Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

Закрытая тема
Опции темы
Непрочитано 12.07.2008, 20:28   #1
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию Динамическая индикация,вопрос

Задача такая – мк делает 8 битное ADC и результат нужно вывести на 3 разрядный 7 сегментный индикатор. Проблема в том что я не пойму как преобразовать переменную ADC измерения для вывода на индикатор. Может приведете пример в Си.
Хочу написать функцию Display () чтобы было типа
Data=read_adc(0);
Display (Data);
Как работает динамическая индикация мне объяснять не надо. Я все понимаю, проблема только в том ,как преобразовать переменную. Как привязать код цифры к переменной?
Все проекты делал для LCD , а тут необходима динамическая индикация, короче идем от сложного к простому.
Реклама:
Zemlyanov вне форума  
Непрочитано 12.07.2008, 20:35   #2
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Создаеш массив и смотря какое число,то и по номеру из массива вытаскиваеш и отправляеш на индикаторы.
Код:
const int numeral[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3  9,0x41,0x42,0x43,0x44,0x45,0x46};
   //             0    1    2    3    4     5   6    7     8    9    A   b    c    d    e    fs
CERGEI1982 вне форума  
Непрочитано 12.07.2008, 20:57   #3
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Пользуй itoa и табличное преобразование в код семисегментного индикатора.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 12.07.2008, 23:35   #4
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию

Все зависит от того, какой средой пользуешься для написания на С. Почти во всех компилляторах есть готовые примеры. И у каждого свои предпочтения. Для PIC и 7 сегментников мне лично нравится MicroC от наших братьев славян. Там в Tool даже встроенный декодер см.картинку, пишется все быстро, жаль не компиллит COFF для отладки, но как доп. инструмент оченно удобно.

-- Прилагается рисунок: --
Halex07 вне форума  
Непрочитано 13.07.2008, 19:46   #5
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию

Второй день борюсь с динамической индикацией. Я не пойму как разложить число на части что бы отправить по очереди в порт для динамической индикации. Допустим у меня число 173, значить мне его нужно разложить и получить отдельно число 1 затем 7 и 3 для того что бы потом из таблицы взять код символа соответствующий данному числу и отправить его в порт для вывода на индикаторе. Мне кто то ответить как делается эта процедура??? У меня уже есть таблица символов я вывожу их последовательно на индикатор значения. Короче программа ждет раздробленного числа а остальное она уже делает. КАК РАЗЛОЖИТЬ ЧИСЛО, что бы потом передать программе динамической индикации по очереди значение каждого сегмента???
Zemlyanov вне форума  
Непрочитано 13.07.2008, 20:24   #6
delay
Гражданин KAZUS.RU
 
Регистрация: 24.06.2005
Сообщений: 535
Сказал спасибо: 262
Сказали Спасибо 216 раз(а) в 118 сообщении(ях)
delay на пути к лучшему
По умолчанию

Я делал так.
Цитата:
void indikat()
{
unsigned int TEMP = REZULT;//REZULT - глобальная переменная
unsigned char DIG_OUT = 0;
while (TEMP ›= 100) // Подсчет сотен
{
TEMP -= 100;
DIG_OUT++;
}
A3 = DIG_OUT;
DIG_OUT = 0;
while (TEMP ›= 10) // Подсчет десяиков
{
TEMP -= 10;
DIG_OUT++;
}
A2 = DIG_OUT;
DIG_OUT = 0;
while (TEMP ›= 1) // Подсчет единиц
{
TEMP--;
DIG_OUT++;
}
A1 = DIG_OUT;
}
Возможно есть более изящные решения.
При вызове функции она раскладывает значение переменной REZULT на 3 цыфры А1, А2, А3 (глобальные переменные). Думаю можно обойтись и без глобальных переменных, передавать их значения функции через локальные переменные, но я не стал морочиться. Типа работает и ладно.
delay вне форума  
Непрочитано 13.07.2008, 20:59   #7
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Сообщение от Zemlyanov
Второй день борюсь с динамической индикацией. Я не пойму как разложить число на части что бы отправить по очереди в порт для динамической индикации.
Очень жаль что ты не прочитал мой пост , там все что тебе надо ...
Это отсюда http://www.remexpert.com/forum/topic1285.html
Цитата:
Добавлю от себя.

Очень часто надо сделать преобразование int-char.
Это я подсмотрел у AVRа которого чаще всего можно найти на сахаре и телесистемах.

Это свернутая версия atoi С стандарта ANSI но в отличие от оригинала работает быстрее.
Вызываш itoa2(5999) результат будет в asc[5]
Код:
Код:
unsigned char asc[5]; 

 void itoa2(unsigned int binval) 
{ 
int step[]={10000,1000,100,10,1}; 
unsigned int temp,val; 
unsigned char i,atemp; 

val=binval; 

 for (i=0; i‹5; i++) 
 { 
  temp=step[i]; 
  atemp='0'; 
  while(val ›= temp) 
  { 
   atemp++; 
   val-=temp; 
  } 
  asc[i]=atemp; 
 } 
}
А дальше табличное конвертирование из стат массива .
Код:
 d7seg[10] = {0x21, 0x77, 0x19, 0x15, 0x47, 0x85, 0x81, 0x37, 0x01, 0x05};
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 13.07.2008, 23:58   #8
Zemlyanov
Гражданин KAZUS.RU
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию

Спасибо dosikus! Использовал функцию itoa (компилятор CodeVision) , для преобразования числа в строку, работает класно , то что нужно, разбирает числовую переменную на запчасти без проблем.

Спасибо delay! Тоже интересное решение , я и не додумался таким образом переформатировать число.

Интересно а какой способ является самым оптимальным (в смысле скорости обработки числа и минимальной загрузки МК). Я думаю что есть ещё какие-то решения данной задачи. Будет интересно посмотреть
Zemlyanov вне форума  
Непрочитано 14.07.2008, 00:31   #9
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,268 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

Дык приглядись внимательно- процедуры моя(DL36) и delay
практически одинаковые .Только моя компактней и 5 разрядная( и нарастить не проблема....
И они урезанные itoa (integer to ansi)
главное смысл понять...

И еще про дин.индикацию - я использую буфер (глобальный массив размером в количество разрядов индикатора) .В буфер заношу данные уже в 7сегментном коде из основной проги , а считываю и вывожу на сегменты циклически в прерывании - 1 прерывание 1 разряд , 2 -2 и т.д.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 03.08.2008, 11:59   #10
oflife
Частый гость
 
Регистрация: 29.10.2007
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
oflife на пути к лучшему
По умолчанию Динамическая индикация,вопрос

Еще один вариант разбиения десятичного числа на позиции и вывода на сегменты предоставляю на Ваше суждение.
Все довольно просто: в начале сохраняем результат, затем вычисляем старшую цифру и выводим на экран, далее, среднюю и

младшую.
Между выводами на дисплей цифр, зажигаем и гасим соответствующие общие аноды(катоды). функция Display выставляет на ножках

порта нолики и единички, тем самым засвечивая необходимые сегменты.
Не знаю как с точки зрения быстродействия, но, по моему наглядно и компактно.


//************************************************** ************************************************** *****************
temp = read_adc; //сохраняем результат преобразования ADC в переменной temp

Display(temp/100); //вычисление и передача в функцию старшей значащей цифры: сотни = temp/1000
Display((temp%100)/10); //вычисление и передача в функцию средней значащей цифры: десятки = (temp%1000)/100
Display((temp%100)%10); //вычисление и передача в функцию очередной значащей цифры: единицы = ((temp%1000)%100)/10


//************************************************** ************************************************** *****************
void Display(unsigned char cifra) // засвечивает сегменты индикатора, соответствущие цифре
{
switch(cifra)
{
case 0: PORTD = 0x3F; break; //
case 1: PORTD = 0x06; break; //
case 2: PORTD = 0x5B; break; //
case 3: PORTD = 0x4F; break; //
case 4: PORTD = 0x66; break; //
case 5: PORTD = 0x6D; break; //
case 6: PORTD = 0x7D; break; //
case 7: PORTD = 0x07; break; //
case 8: PORTD = 0x7F; break; //
case 9: PORTD = 0x6F; break; //
}
}
oflife вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая индикация EKuzmich TTL и CMOS логика 16 05.08.2011 08:18
Индикация аварии Shestakovva Автоматика и аппаратура связи 8 04.05.2009 11:53
Динамическая индикация ПОМОГИТЕ 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 2 27.03.2008 23:53
Динамическая индикация dosikus Микроконтроллеры, АЦП, память и т.д 3 16.02.2008 19:09
Динамическая индикация на ЖК dion310 Микроконтроллеры, АЦП, память и т.д 4 27.11.2007 10:39


Часовой пояс GMT +4, время: 01:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot