Теперь в нашем онлайн-магазине доступна уникальная книга «BEAM-робототехника. От азов до создания практических устройств», идеально подходящая как для кружков робототехники, так и для самообучения дома. Вы можете приобрести её по привлекательной цене в 699 рублей. Дополнительная информация о книге доступна на нашем сайте. Также в ассортименте нашего онлайн-магазина представлены готовые наборы для сборки роботов, с помощью которых ваш ребенок сможет легко собрать своего первого робота, следуя нашим подробным инструкциям. Перейти в магазин


[ Раскрыть online-чат / Закрыть ] · [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: nightmare, Aleks_Crow, Huntswarrior  
Семисегментный индикатор
Отправлено 19.09.2013 - 20:541
Участник
8 сообщений
Мужчина
доброго времени суток ... проблема с выводом двухзначных чисел на тройной семисегментник ...My WebPage в кратце опишу действие. у этого индикатора общий катод 3 вывода соответственно на каждый отдел и 8 выводов на подключении самих сегментов, так для того чтобы зажечь цифру 1 нужно запитать BC выводы но если подключить второй сегментник на нем тоже будет отображена цифра один. вопрос как сделать так чтобы сегменты зажигались раздельно к примеру чтобы вывести цифру 56 или 72 ?


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 19.09.2013 - 22:202
Модераторы
211 сообщений
Мужчина
Проблемма ясна. Подключение многоразрядного (от 2х и более) семисегментного индикатора требует иного подхода. В общем ничего сложного. Выводите числа последовательно. Делается это следующим образом. Каждый из выводов катода индикатора подключите через свои транзисторы КП505А или КТ3102 или КТ315 или BC547 (эмиттер к минусу ист. пит, коллектор к катоду секции индикатора, базу через резистор 1,2 кОм к микроконтроллеру, если транзистор полевой КП505, то достаточно 220 Ом ). Далее допустим вам нужно вывести число 56. Значит можно вывести первые две цифры на первых два сегмента, а последний третий сегмент вообще не зажигать. Делаем следующее.
С микроконтроллера подаём + 5 вольт на базу транзистора управляющего катодом первой секции, на остальные два транзистора (для оставшихся двух секций) нужно подать "0" (принудительно выключаем). Выставляй на входах цифрового сегмента цифру 5. При этом только на первом сегменте зажжётся цифра 5, остальные гореть не будут! Затем на базе транзистора управляющего катодом первого сегмента выставляй "0". Смени индицируемую цифру на входах сегмента на цифру 6. Подай на транзистор управляющий второй секцией катода "1". При этом первый сегмент гореть уже не будет, а на втором высветиться цифра 6. Если быстро переключать (включать-выключать) транзисторы управляющие катодами первого и второго сегмента, то будут видны сразу две цифры одновременно. Частота переключения приблизительно 25Гц. Если наблюдается эффект мерцания цифр, то увеличивайте частоту переключения транзисторов. Это способ подразумевает, что входы семисегментных индикаторов для формирования цифр соединены вместе, а переключение осуществляется управлением катодами.


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 19.09.2013 - 22:213
Участник
28 сообщений
Мужчина
Нужно использовать т.н. динамическую индикацию. http://we.easyelectronics.ru/Shemate...._2.html


Профиль Личное сообщение Дом. страница icq Skype
4
Отправлено 21.09.2013 - 11:444
Участник
8 сообщений
Мужчина
Droid, Спасибо огромное )!!!! Dimsan, и вам спасибо прочел полезная информация еще пригодится )

Добавлено (21.09.2013, 11:41)
---------------------------------------------
Droid, вы бы не могли написать пример кода на бейсике как зажечь поочередно эти сегменты ? я пробовал с командой high эксперементировать но она не воспринимает ни бинарное ни хексовое исчисление а к примеру для цифры 8 мне нужно как минимум 7 команд high использовать а это не удобно ... может есть какое то решение типа той же самое команды lookup или еще чего нибудь ?

Добавлено (21.09.2013, 11:44)
---------------------------------------------
и еще, базу я подключил через порт D хотя все сегменты сидят на портах В. вопрос - как совместить включение порта D вместе с включением портов В в одной команде???



Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 23.09.2013 - 23:505
Модераторы
211 сообщений
Мужчина
BAsic для PIC или для Atmega? Далее про поочерёдность зажигания сегментов. Собственно любой построчный код выполняется не параллельно, а поочерёдно. В коде основной программы выводите на порт B лог.1 построчно командами или одной командой, если этот порт не используется для других целей. Совместить включение порта B и D просто, достаточно прописать команды вывода лог.1 для обоих портов побитно!


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 24.09.2013 - 17:346
Участник
8 сообщений
Мужчина
Droid, Для PIC. Ну то что поочередно я разобрался к примеру можно прописать команду с общим катодом так:
init:
trisb =%00000000
portb =%00000000
start:
portB =$6F "вывод символа на порт Б с общим
portD =$01 "катодом на порте Д1
portB =$FF "гашение символа
portD =$FF "гашение порта Д1
portB =$56 "вывод символа на порт Б с общим
portD =$02 "катодом на порте Д2
portB =$FF "гашение символа
portD =$FF "гашение порта Д2
goto start
end

А вот как побитно это будет команды выглядеть ? я же не смогу в одной команде HIGH или PORTB прописать два разных порта B и D к примеру?
Спасибо что ответили


Профиль Личное сообщение Дом. страница icq Skype
0
Отправлено 24.09.2013 - 22:347
Модераторы
211 сообщений
Мужчина
Чтобы зажечь цифру достаточно установить одной командой portb =%00000000 (вместо нулей нужные биты на лог.1) и не требуется никаких семи команд, катод разумеется должен быть подключен. И ещё в твоём коде нет задержек, которые обязательно нужно ставить после включения порта и после выключения иначе будет ерунда на выходе. Вобще то на PIC-BAsic я не программирую, но поскольку он схож по синтаксису для AVR, попробую подправить код. При зажигании одной цифры (любой) нужно придерживаться следующего алгоритма: сначала выставляем лог.1 сегмента, потом подключаем катод индикатора, потом задержка 20-30мсек, потом выключаем катод и снова пауза на 50-90мсек. После этого можно сменить код сегмента на новый и далее всё сначала по алгоритму.
init:
trisb =%00000000 'конфигурируем выводы порта B на выход
portb =%00000000 'выставляем лог.0 на всех выводах порта B
start:
portB =$6F 'вывод символа на portb
portD =$01 'подключаем катод 1 сегмента portd
GoSub Ind
portB =$56 'вывод символа на portb
portD =$02 'подключаем катод 2 сегмента portd
GoSub Ind
goto start
end

'ПОДПРОГРАММА
Ind:
pause 25 'пауза 25 миллисекунд на длительность свечения сегмента
portD =$FF 'гашение portd
portB =$FF "гашение символов portb
pause 50 'пауза 50 миллисекунд на длительность выключения сегмента
Return


Профиль Личное сообщение Дом. страница icq Skype
50
Отправлено 24.09.2013 - 23:218
Участник
8 сообщений
Мужчина
Droid, блин ... подпрограмма ...ё моё ... это даже проще чем я думал ... спасибо что объяснили ... огромное спасибо )


Профиль Личное сообщение Дом. страница icq Skype
0
  • Страница 1 из 1
  • 1
Поиск: