ATmega8, динамическая индикация, switch case и десятичная то

Обсуждаем контроллеры компании Atmel.
Ответить
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

вот ещё и схема , к выше выложенному коду
которая работает уже 5 лет в нескольких блоках
Изображение
Реклама
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Попробую ещё всё-таки объяснить: помимо плохого визуального разделения информации, Ваше решение на 100% совпадает с возможной ошибкой отображения цифры из-за несвечения одного из сегментов. Никто кроме Вас не может на 100% быть уверенным, что это буквенные символы, а не ошибочные цифры.
И я уверен, что Вам и самому неудобно на такое смотреть. Но признать свою ошибку и согласиться с оппонентом... даже мыши предпочитают плакать, колоться, но продолжать жрать кактус. Что уж говорить о человеке...

Добавлено after 2 minutes 3 seconds:
[uquote="Thinnnfor",url="/forum/viewtopic.php?p=4633997#p4633997"]Изображение[/uquote]
Применение посегментной индикации при большом количестве разрядов предпочтительнее.

Добавлено after 1 minute 31 second:
Re: ATmega8, динамическая индикация, switch case и десятичная то
и вообще: вся динамическая индикация давным-давно разжёвана в книжках и статьях. В том числе и здесь, на этом сайте.
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Кстати , динамическую индикацию можно делать на 595-х регистрах !
Есть проект на Мк PIC12F683 , и она занимает всего 3 пина микроконтроллера.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

Thinnnfor, посмотрел я ваш код...
Как это ни каких жестких таймингов если индикация полностью вписана внутрь прерывания таймера? :dont_know:
СпойлерОстальное по коду в ЛС... :tea:
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

[uquote="Thinnnfor",url="/forum/viewtopic.php?p=4633997#p4633997"]вот ещё и схема...[/uquote]
А зачем столько лишних лапок?
Достаточно поставить дешифратор и ограничиться четырьмя... Да еще и кнопы в таком случае на контроллер дисплея/клавиатуры присоединить. С учетом начинки АВРок вполне себе такое на всего одном из таймеров делается.
Схем для светиков уже столько наделано...
:tea:
У топикстартера (Denis-1307) похоже другая проблема - как семисегментные "кракозябры" под СИ удобно организовать...
Там лучше сначала значения кракозябр заготовить, а уже потом их имена в соответствующих местах программы использовать...
Как то вроде вот такого:
Спойлер

Код: Выделить всё

// набор MAX7219 8-позиционник

#define s_A 6 // значение номера сегмента A
#define s_B 5 // значение номера сегмента B
#define s_C 4 // значение номера сегмента C
#define s_D 3 // значение номера сегмента D
#define s_E 2 // значение номера сегмента E
#define s_F 1 // значение номера сегмента F
#define s_G 0 // значение номера сегмента G
#define s_H 7 // значение номера сегмента H

/* "кодовая страница кракозябр 7-сегментных"
 раскладка сегментов по символам определяется стандартной разметкой A-H
 по условию, что активный уровень(сегмент астивен/светится) принят за 1 */

#define fnt_bl 0
#define fnt_0 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F) // цифра 0 или символ "О"
#define fnt_1 (1<<s_B | 1<<s_C) // цифра 1
#define fnt_2 (1<<s_A | 1<<s_B | 1<<s_D | 1<<s_E | 1<<s_G) // цифра 2
#define fnt_3 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_G) // цифра 3 или символ "Э/З"
#define fnt_4 (1<<s_B | 1<<s_C | 1<<s_F | 1<<s_G) // цифра 4 или символ "Ч"
#define fnt_5 (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // цифра 5 или символ "S"
#define fnt_6 (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // цифра 6
#define fnt_7 (1<<s_A | 1<<s_B | 1<<s_C) // цифра 7
#define fnt_8 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // цифра 8
#define fnt_9 (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // цифра 9
#define fnt_A (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "A"
#define fnt_b (1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // символ "b"
#define fnt_C (1<<s_A | 1<<s_D | 1<<s_E | 1<<s_F) // символ "C" (прямая скобка '[' )
#define fnt_d (1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_G) // символ "d"
#define fnt_E (1<<s_A | 1<<s_D | 1<<s_E | 1<<s_F | 1<<s_G) // символ "E"
#define fnt_F (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_G) // символ "F"
#define fnt_P (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_G | 1<<s_B) // символ "P"
#define fnt_L (1<<s_E | 1<<s_F | 1<<s_D) // символ "L"
#define fnt_H (1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "H"
#define fnt_U (1<<s_B | 1<<s_C | 1<<s_E | 1<<s_F | 1<<s_D) // символ "U"
#define fnt_I (1<<s_E | 1<<s_F) // левая 1 или латинская I
#define fnt_S (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_F | 1<<s_G) // аналог цифры 5
#define fnt_J (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_E) // символ "J"
#define fnt_G (1<<s_A | 1<<s_C | 1<<s_D | 1<<s_E | 1<<s_F) // символ "G"
#define fnt_r (1<<s_G | 1<<s_E) // символ "r"
#define fnt_n (1<<s_G | 1<<s_E | 1<<s_C) // символ "п"
#define fnt_c (1<<s_G | 1<<s_E | 1<<s_D) // символ "с" или '<'
#define fnt_o (1<<s_G | 1<<s_E | 1<<s_D | 1<<s_C) // нижний кружок "о"
#define fnt_u (1<<s_C | 1<<s_E | 1<<s_D) // символ "u"
#define fnt_h (1<<s_C | 1<<s_E | 1<<s_F | 1<<s_G) // символ "h"
#define fnt_rusg (1<<s_A | 1<<s_E | 1<<s_F) // символ "Г"
#define fnt_rusP (1<<s_A | 1<<s_E | 1<<s_F | 1<<s_B | 1<<s_C) // символ "П"
#define fnt_rus_iE (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D | 1<<s_G) // символ Э/З/цифра 3 (инверсное Е)
#define fnt_rusY (1<<s_F | 1<<s_G | 1<<s_B | 1<<s_C | 1<<s_D) // символ "У"
#define fnt_qest (1<<s_A | 1<<s_B | 1<<s_E | 1<<s_G) // символ "?"
#define fnt_rC (1<<s_A | 1<<s_B | 1<<s_C | 1<<s_D) // символ ']' (обратная скобка/"вывернутая С")
#define fnt_rc (1<<s_G | 1<<s_C | 1<<s_D) // символ '>'
#define fnt_gradus (1<<s_A | 1<<s_B | 1<<s_F | 1<<s_G) // верхний кружок "символ грвдуса"
#define fnt_minus (1<<s_G) // символ "-" (средняя черта)
#define fnt_aplin (1<<s_A) // символ "верхняя черта"
#define fnt_dnlin (1<<s_D) // символ "_" (нижняя черта)
#define fnt_trlin (1<<s_A | 1<<s_G | 1<<s_D) // символ "три черты"
#define fnt_coma (1<<s_H) // символ "," (децимальная точка)
:roll:
Реклама
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Сообщение Базилюк »

Эх, динамическая индикация... ммм :) Пробило на скупую слезу ностальгии :) Если в ящичках есть семисегментник, пойду делать честную динамическую индикацию. Я ж сто лет её не делал.
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

BOB51 писал(а):А зачем столько лишних лапок?
Была поставлена цель, сделать максимально-минимальную конструкцию встраемого ампер-вольтметра.
Лишние дешифраторы, регистры, или любые другие компоненты, увеличили бы размер плат. А так всё
уместилось ( почти) в спичечный коробок, вместе с шунтом.
Изображение Изображение
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ну дык в таком случае можно было и посегментным сканированием обойтись и транзисторов нету и полярность матриц безразлична. МК с такой задачей вполне справится.
8)
Электрический кот
Аватара пользователя
Сообщения: 1050
Зарегистрирован: Вс мар 01, 2009 19:47:16
Откуда: Ростов-на-Дону

Сообщение Viper_Snake »

А? Чё? Я срач пропустил? Кому там TMки хренью показались? Денег много и свободного времени у вас, видимо. Я тут недавно электрокотел на тини84 организовал - 4-х разрядный 7-мисегментник, управление энкодером с кнопкой, 2 канала АЦП, 4 цифровых входа, 7 каналов управления силовой нагрузкой, еще и 3 ноги у тиньки в резерве осталось. У TMки вообще задействовано не более 40 процентов от ее возможности. Ну, правда еще 595-й регистр один прикошачен для своих задач, но в целом, на мой взгляд, использовать динамическую индикацию силами МК сейчас это признак дурного тона. Лепить кучу рассыпухи, отжимать у контроллера лютую кучу портов только для того, чтобы дисплеем поморгать - такое себе.
Не важно чем все начнется. Важно чем кончится!
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Так ВСЕ ОТНОСИТЕЛЬНО.
Для каждого конкретного случая свое наиболее подходящее решение.
8)
Кстати... Для тех контроллеров (что MAX, что другие "кракозябровые") все равно по хорошему внутренний буфер в ОЗУ потребуется для предподготовки пакета данных.
:roll:
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Viper_Snake писал(а):Кому там TMки хренью показались?
Мне.
Я так и не смог запустить ту китйскую херь на TM1637 .
Хотя с MAX7219 проблем вообще не было.
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

У ТМок протокол весьма вредный...
Но вполне съедобный.
Их (и их разновидности) частенько на индикаторах весов ставят...
:evil:
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

[uquote="Thinnnfor",url="/forum/viewtopic.php?p=4635092#p4635092"]Я так и не смог запустить ту китйскую херь на TM1637 .
Хотя с MAX7219 проблем вообще не было.[/uquote]
ни чуть не сложнее, чем с MAX7219. примерно, как два пальца ...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Старичёк , ты то супермонстр ассемблера ! А я то на си балуюсь .
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Сообщение Базилюк »

У TM1637 интерфейс корявый, в отличие от нормального SPI у MAX7221. У MAX7219 немного неправильный SPI в части работы CS/Load.
Вымогатель припоя
Аватара пользователя
Сообщения: 604
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

7219- это просто - это просто ! Я не пользователь библиотек и скетчей ! Я просто написал прогу в кодевижин авр , без библиотек . Программно дёргаю выводы и всё с 7219 работает , и уже всяких часов с всякими бегущими строками, набегающими с верху .. это уже как года 4 назад написал . А во т ТМ - это какое то дерьмо , которое не хочет работать .
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

Сообщение Базилюк »

Как раз наоборот - в MAX7219 НЕ нужно программно дергать выводы, там аппаратный SPI справляется. А вот TM1637 - это косячный интерфейс - почти I2C, только нет адреса слейва.
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Если есть аппаратный SPI. Или без него удобнее трассировка. В общем, все средства хороши.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15595
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

[uquote="Thinnnfor",url="/forum/viewtopic.php?p=4635182#p4635182"]Старичёк , ты то супермонстр ассемблера ! А я то на си балуюсь .[/uquote]
Где то вроде выкладывал и под адуриний Си -"лаподрыг"то и там никто не отменял.
:wink:
Доки для ТМ1637
TM1637_урезанная.pdf
(712.75 КБ) 58 скачиваний
DATASHEET-TM1637_var2.pdf
(712.75 КБ) 51 скачивание
8)
Модератор
Аватара пользователя
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

самая большая проблема с модулями на ТМ1637 - это то, что производители ставят с слишком большой емкостью конденсаторы на сигнальные входы.
из-за этого придется делать слишком "длинные" импульсы по обоим входам.
я снимаю эти конденсаторы вообще, и модуль начинает прекрасно работать с тактовой частотой МК 1 МГц.
ну да, у меня это обычный программный "ногодрыг".
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»