Семисегментный индикатор. Теория управления
- Войдите на сайт для отправки комментариев
Чт, 30/01/2014 - 18:52
Добрый день форумчане. Столкнулся с проблемой. Как можно выводить цифры на индикатор используя ардуинку?
Самое простое это зажигать в нужный момент диод. Это понятно. Интересует вопросы, такие как например люди используют для зажигания какой-либо цифры с помощью шестадцетиричного числа или двоичного?
Например вот
0x3f, //0
0x06, //1
0x5b, //2
0x4f, //3
0x66, //4
0x6d, //5
0x7d, //6
0x07, //7
0x7f, //8
0x6f //9
Не могу разобраться. Каким образом ардуина поймет это? Объясните пожалуйста.
7-сегментный индикатор. Поиск в гугле выдает кучу уроков, схем и т.п.
Исследование индикаторов, лабораторный практикум
Обозначение сегментов семисегментного индикатора:
цифра "1", например - это зажженные сегменты B и C, то есть второй (первый при отсчете от нуля) и третий (второй при отсчете от нуля). Такую комбинацию можно представить числом 6 (в двоичном представлении - B00000110, в шестнадцатиричном - 0x06). По такому же алгоритму попробуйте "отобразить" любую из приведенных вами комбинаций. Возможно, наступит прозрение...
Спасибо все, сейчас попробую!)
Есть такая библиотека Arduino-SevenSegmentDisplay
С ней удобнее работать с индикаторами.
А еще лучше, брать индикаторы с MAX2119 и LedControl библиотеку. Там любое количество индикаторов по трем проводам подключается
хмм.. Тогда следующий вопрос, куда надо будет подавать бинарник чтобы он зажег определенные сегменты?
Если у нас есть 7 портов, то я так понял на них надо подать бинарник как-то? или я чего-то не понимаю?
Оказывается, посмотрел я на циколевку атмеги. Увидел что все порты делятся на категории, PORTA, PORTB и PORTC
Ну я подключил 8 ножек индикатора к PORTD - это 0-7 ноги arduino UNO
Сказал чтобы эти порты, 0-7, были выводами и просто потом на PORTD отправлял бинарник или HEX
PORTB=0x3F - это ноль на индикаторе.
Вопрос такой, а почему нельзя в процедуре setup указать pinMode(PORTD,OUTPUT); ? Может кто сказать?
Ухты, и правда есть что-то вроде короткой записи в пины бинарным образом
http://www.arduino.cc/en/Reference/PortManipulation
x= коду цифры
цикл 0-7
вывод на пин (i, x& 0x01)
x>>=1
Оказывается, я посмотрел на циколевку атмеги. Увидел что все порты делятся на категории, PORTA, PORTB и PORTC
Ну я подключил 8 ножек индикатора к PORTD - это 0-7 ноги arduino UNO
Сказал чтобы эти порты, 0-7, были выводами и просто потом на PORTD отправлял бинарник или HEX
PORTB=0x3F - это ноль на индикаторе.
Вопрос такой, а почему нельзя в процедуре setup указать pinMode(PORTD,OUTPUT); ? Может кто сказать?
забудьте эти ассемблерные стилевые приемчики PORTC в борьбе за скорость лишнее это
пишите в С стиле потому как быстрее результат
например эфективен такой стиль С с подпрограммками с удобненькой функцией миллис
это дооооолгий таймер и трясущиеся семисегментники без упрощающего код драйверочка max7219
совмещено казалось бы такое разноскоростное автор так выделиывался с циферками
тут не самый быстрый стиль подумал написал спаял продал
но он вам покажет как писать со всякими извращениями фантазиями
не помню где-то пример этот лежит постоянно
это у меня с диска
полная схема
потому что это функция PORTB прямо из ассемблера поетому сразу шестнадцатиричное десятичное слово ждет
а теперь сравните с таким стилем
это конечно не очень точное сравнеие по железу
но размер кода соотвествует
а теперь Какой код продуктивнее?
Вот вам и теория управления отображением.
Дибилы и грамотные.
Любое програмное обеспечение компенсирует аппаратное несовершенсто.
Мой закон. И что-то никто не смог мне оппонировать.
Прислушайтесь к словам sav13
И опыт сын ошибок трудных
Семисегментный индикатор. Теория управления "используйте c max7219"
http://ru.aliexpress.com/item/FreeShipping-5PCS-LOT-MAX7219-Led-Module-8-Digit-7-Segment-Digital-LED-Display-Tube-For-Arduino/1995254787.html
порадуйте нас чем нибудь радостным
Что-то много бУкАв написал. Сам повторно не осилю.
А вот этой штуке с MAX7219 не надо всё время долбанить, чтобы оно обновляло индикатор как той хрени с двумя сдвиговыми регистрами?
Я вот такую хрен заказывал. Там для отображения надо всё время срать последовательностью "позиция - значение", чтобы они как бы все светились.
А у меня какой-то странный семисегментник 4-х циферный... Что бы зажечь на нём сегмент цифры, на ногу с ним нужно посылать 0, а не 1!!! Из -за этого не верно себя ведёт и драйвер для семисегментника... То есть те сегменты которые должны гореть, потушены, а те которые не должны, наоборот горят. То есть на 1 дожны гореть А и B, а горят C,D,E,F,G =( Не понимаю как с этим справиться.
и что вообще нет мыслей почему так может быть?
Это вопрос с подвохом? Вероятно так спаян модуль, что у него инверсное обращение к сегментам.
так даже веселее. выясняется что уже не семисегементный индикатор а модуль с драйвером
Опишу ещё раз.
Есть семисегментный индикатор на 4-ре цифры в едином корпусе. У него есть ноги под 7 сегментов и восьмую точку, а так же ещё 4-ре ноги для включения конкретного индикатора.
Во всех скетчах, да и судя по драйверу, чтобы отобразить цифру 1, нужно зажечь два сегмента A,B в 1(подать напряжение на соответствующие пины).
В моём же случае, чтобы получить цифру 1 необходимо зажечь все остальные пины кроме этих двух. Ну и поскольку я хотел использовать драйвер для этого семисегментника и в нём уже забиты эти комбинации ног, возникает вопрос, как поступить в такой ситуации, возможно ли инверсию подавать на семисегментник или как-то переключить его в другой режим работы? Или может быть можно перепрограммировать драйвер(хотя тут у меня наибольшие сомнения, ведь он сделан хардово, а не софтово.) Без драйвера, в теории я то же могу заставить дисплей работать как надо, но тогда на ардуинке практически не стаётся свободных пинов.
какой драйвер
Это когда приходим в ресторан. Официант дает меню с картинками, где остается только тыкнуть пальцем.
Мы кричим не надо нам картинки и названия. Мне надо вот то что ел на свадьбе моего шурина когда он во второй раз женился.
Официант вам помои еще не принес покушать?
Продолжаем. Ну я же обьясняю:
Что бы зажечь на нём сегмент цифры, на ногу с ним нужно посылать 0, а не 1!!!
Исходя из этого индикатор с общим анодом.
То есть на 1 дожны гореть А и B, а горят C,D,E,F,G
А вот здесь что-то непонятно. Проверьте индикатор, подав на ногу сегментов 0, а на ногу знакоместа 1 через резистор.
Что бы зажечь на нём сегмент цифры, на ногу с ним нужно посылать 0, а не 1!!!
Исходя из этого индикатор с общим анодом.
То есть на 1 дожны гореть А и B, а горят C,D,E,F,G
А вот здесь что-то непонятно. Проверьте индикатор, подав на ногу сегментов 0, а на ногу знакоместа 1 через резистор.
Да, 4-х сегментник, с ообщим анодом. И при подаче на один из 4-х контактов, отвечающих за сегмент, загораются диоды в соответсвующем сегменте. Но проблема в том, что:
То есть на 1 дожны гореть А и B, а горят C,D,E,F,G
Следовательно, если я на 3 из 4-ёх знакомест подаю 0, а на последнее подаю 1, и при этом подаю 1 на А и B, то получется, что горят C,D,E,F,G, это похоже на букву Е, вместо 1. То есть всё наоборот. И что бы показать единичку необходимо зажечь(установить пины в HIGH) C,D,E,F,G, а А и B наоборот в LOW. Разумеется, драйвер семисегментника рассчитывает на другое поведение и не ясно как заставить это работать нормально.
В качестве контроллера arduino uno
То есть, я правильно понял, подаете 0 на знакоместо и 1 скажем на А, а горят все остальные? Подаете напрямую или через контроллер какой-то?
Простой и красивый тутор по сегментам и ардуино
http://www.youtube.com/watch?v=6_AtFoeXDoo&list=TLm_wSuI1NQVk&index=9
Простой и красивый тутор по сегментам и ардуино
http://www.youtube.com/watch?v=6_AtFoeXDoo&list=TLm_wSuI1NQVk&index=9
Во, круто! Я какраз купил пару сдвиговых регистра для того чтобы подключить дисплей 16на2
Судя по этому видео, не важно 0 или 1 подавать.
спасибо!