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

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

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

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

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

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

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

 
Опции темы

Динамическая индикация,вопрос

Непрочитано 12.07.2008, 20:28  
Zemlyanov
Гражданин KAZUS.RUN
 
Регистрация: 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  
CERGEI1982
Почётный гражданин KAZUS.RUN
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 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  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

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

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

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

Второй день борюсь с динамической индикацией. Я не пойму как разложить число на части что бы отправить по очереди в порт для динамической индикации. Допустим у меня число 173, значить мне его нужно разложить и получить отдельно число 1 затем 7 и 3 для того что бы потом из таблицы взять код символа соответствующий данному числу и отправить его в порт для вывода на индикаторе. Мне кто то ответить как делается эта процедура??? У меня уже есть таблица символов я вывожу их последовательно на индикатор значения. Короче программа ждет раздробленного числа а остальное она уже делает. КАК РАЗЛОЖИТЬ ЧИСЛО, что бы потом передать программе динамической индикации по очереди значение каждого сегмента???
Zemlyanov вне форума  
Непрочитано 13.07.2008, 20:24  
delay
Гражданин KAZUS.RUN
 
Регистрация: 24.06.2005
Сообщений: 530
Сказал спасибо: 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  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
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  
Zemlyanov
Гражданин KAZUS.RUN
 
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
Zemlyanov на пути к лучшему
По умолчанию

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

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

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

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

И еще про дин.индикацию - я использую буфер (глобальный массив размером в количество разрядов индикатора) .В буфер заношу данные уже в 7сегментном коде из основной проги , а считываю и вывожу на сегменты циклически в прерывании - 1 прерывание 1 разряд , 2 -2 и т.д.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 03.08.2008, 11:59  
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, время: 11:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.