Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2013, 17:59   #1
Илья2323
 
Регистрация: 24.11.2013
Сообщений: 8
По умолчанию Cветодиодный индикатор. Нужна помощь

Есть светодиодный индикатор,
есть 8-ими раздяное ацп, которое передает 256 значений(от 0 до 255)
так вот надо сделать так, чтобы выводилось любое значение из этого промежутка, например "167","190" и т.д., не знаю как это программно описать, знаю, лишь что здесь что-то с нулевым битим связано
подскажите пожалуйста
Илья2323 вне форума Ответить с цитированием
Старый 24.11.2013, 18:11   #2
Илья2323
 
Регистрация: 24.11.2013
Сообщений: 8
По умолчанию

данные с ацп поступают на микроконтроллер ADuC812, тот в свою очередь соединен с сегментами индикатора
Илья2323 вне форума Ответить с цитированием
Старый 24.11.2013, 18:23   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

кошерно ...вот и преобразуйте принятое с АЦП в семисегментный код, согласно схемы подключения.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 24.11.2013, 18:24   #4
Илья2323
 
Регистрация: 24.11.2013
Сообщений: 8
По умолчанию

так с этим помощи и прошу(
Илья2323 вне форума Ответить с цитированием
Старый 24.11.2013, 18:34   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

С чем, со сферическим конем? Как именно подключен индикатор к МК (знаете ли вы принцип динамической индикации, есть ли на схеме драйверы светодиодов или преобразователи кода или сдвиговые регистры), сколько разрядов у индикатора, где в конце-концов схема?

Каждый семисегментный индикатор состоит из 7 светодиодов и одного знакового светодиода (точки, запятой) с общим анодом или катодом. Этих светодиодов достаточно для формирования цифр от 0-9 и некоторых символов-значков. Каждый из этих светодиодов промаркирован символьным обозначением A, B, C, D, E, F, G, H. Эти обозначения имеют постоянный порядок во всех индикаторах для стандартизации и унификации. С противоположной части данного индикатора выведены контакты-выводы (пины), отвечающие каждый за свой светодиод и один общий. Для того, чтобы знать какой светодиод зажечь при формировании символа-цифры разработчику при проектировании платы нужно знать какой это контакт. Данная табличка показывает какой контакт-пин соответствует какому светодиоду A-H какого индикатора (в данном случае он сдвоенный). Разработчик-программист, зная эту распиновку, может написать программу-прошивку для микроконтроллера, которая и будет зажигать определенный светодиод. В зависимости от способа формирования это будет разная реализация. При поддержке МК аппаратного SPI программисту достаточно инициализировать порт и просто послать в порт нужное количество тактов и выставить число.

При динамической индикации, принцип несколько иной: одноименные линии A-H всех индикаторов объединяются и сажаются, как правило (но необязательно) на один порт 0..7 (условно, имеем порт A с разрядами A0..A7, А0 кидаем на сегмент A индикатора, A1 на сегмент B индикатора и т.д.), управляющая прошивка (микропрограмма) МК устанавливает состояние пинов порта в соответствии нужным символом. Для того, чтобы этот символ отобразился на нужной нам позиции, нужно зажечь (включить) определенный индикатор в данный момент времени, вот для этого и служит этот общий анод или катод всех сегментов одного индикатора. Т.о. включая поочередно определенный индикатор (через ключи) и выводя в этот момент нужное число в порт A0..A7 (т.е. сегменты A-H) формируется общее изображение-число-информация. Если переключать по кольцу эти индикаторы (общие аноды или катоды) за время меньшее инерционности человеческого зрения, то мы увидим практически непрерывную картинку-изображение.

http://sezador.radioscanner.ru/pages...s/serialed.htm
http://www.gaw.ru/html.cgi/txt/ic/Ma...ay/max6954.htm
http://ahtoxa.net/micros/tiny/leds/

ЛИТЕРАТУРА

- Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера / Ревич Ю.
- Микроконтроллеры AVR семейства Mega / Евстифеев А.В.
- AVR-RISC Микроконтроллеры/Вольфганг Трамперт


И еще, где наработки? Нет наработок -> во фриланс.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 24.11.2013 в 18:37.
raxp вне форума Ответить с цитированием
Старый 24.11.2013, 19:08   #6
Илья2323
 
Регистрация: 24.11.2013
Сообщений: 8
По умолчанию

подключено вот так,
на второй фотографии процесс преобразования в ацп
на последней про индикатор
Изображения
Тип файла: jpg IMG_20131118_234138.jpg (80.6 Кб, 122 просмотров)
Тип файла: jpg IMG_20131118_234147.jpg (71.9 Кб, 118 просмотров)
Тип файла: jpg IMG_20131125_000525.jpg (67.8 Кб, 120 просмотров)
Илья2323 вне форума Ответить с цитированием
Старый 24.11.2013, 20:22   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Подключение неверное. Сопротивления нужно ставить последовательно с каждым светодиодом для ограничения и выравнивания токов.

И как вы собрались отображать три разряда десятичного числа на одноместном семисегментнике? В принципе, можно выводить последовательно цифры с перерывом между блоками. Конфигурируем порт P2 на выход и устанавливаем в ноль. Вводим массив значений для порта для символов от 0 до 9:

А именно, имеем "cегмент - бит"
a - 0
b - 1
c - 2
d - 3
e - 4
f - 5
g - 6
h - 7


Для отображения символа "0" требуется зажечь сегменты a-b-c-d-e-f, что соответствует 0b00111111 = 0x3F.
Для отображения символа "1" требуется зажечь сегменты b-c, что соответствует 110 = 0x06.
и т.д.

Таким образом:
Код:
const unsigned char Digit[10]={0x3f,0x06, и т.д. до всех символов};
После этого для вывода цифры нам достаточно послать в порт P2 (как он в вашей среде разработки обозначен см. даташит на ваш адьюк) значение по индексу этого массива, к примеру:
Код:
PORTD = Digit[num]
Теперь нам остается вывести, скажем трехзначное число "123". Тогда выделяем единицы, десятки и сотни и последовательно отображаем с задержкой или с помигиванием, как нравится. Как выделить единицы-десятки-сотни? Можно тупо делить на 100, на 10 и вычитать из безнакового целого:
Код:
int SetIND(int num){
 int _num,temp;
 //1- ADR
 _num = num/1000;
 //PORTB=NUM[3];
 PORTD = Digit[_num];
 wait_1ms(500);
 //2- ADR
 _num = num/100; temp = _num/10; temp = temp*10; _num = _num-temp; 
 //PORTB=NUM[2]; 
 PORTD = Digit[_num];
 wait_1ms(500);
 //3- ADR
 _num = num/10; temp = _num/10; temp = temp*10; _num = _num-temp; 
 //PORTB=NUM[1]; 
 PORTD = Digit[_num];
 wait_1ms(500);
 //4- ADR
 temp = num/10;  temp = temp*10; _num = num-temp; 
 //PORTB=NUM[0]; 
 PORTD = Digit[_num];
 wait_1ms(5000);
return 1;
}
Ферштеен, дальше сами справитесь?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 24.11.2013 в 20:25.
raxp вне форума Ответить с цитированием
Старый 24.11.2013, 21:35   #8
Илья2323
 
Регистрация: 24.11.2013
Сообщений: 8
По умолчанию

cпасибо большое за вашу помощь
только есть вопрос, после того как мы создали из символов массив и присвоили порту значение как здесь
PORTD = Digit[num]

как мне записать нужный мне порт? если у меня подключение в портам с P2.0 до P2.7 можно будет порт описать как PORTP2 = Digit[num] ?
Илья2323 вне форума Ответить с цитированием
Старый 25.11.2013, 08:39   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Читайте документацию к вашему МК и среде сферической разработки.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 25.11.2013, 09:29   #10
Unique_Maks
Пользователь
 
Регистрация: 07.06.2010
Сообщений: 89
По умолчанию

если поможет, то:
настроив порт P2 на выход (ножки P2_0 - P2_7 на выход) и записывая в регистр, отвечающий за данные этого порта (см. по даташиту, возможно это PORTP2), значения в hex (0x3F и т.д.) или двоичном (0b00111111) формате, вы управляете каждым пином порта:

PORTP2 = 0b00111111 это

P2_0 = 1
P2_1 = 1
P2_2 = 1
P2_3 = 1
P2_4 = 1
P2_5 = 1
P2_6 = 0
P2_7 = 0

и будет символ "0"
Unique_Maks вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
нужна помощь ShamanK Microsoft Office Excel 2 01.12.2009 12:46
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Нужна помощь! coiN PHP 2 07.11.2008 07:21