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

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Базилюк писал(а):Насчет программных I2C и SPI - это пережитки прошлого. Ужасная практика. Уж лучше дин.индикацию на МК, чем софтовый I2C/SPI.
  • Сдвинуть байт,
    проверить наличие переноса,
    выставить соответствующий уровень на ноге,
    строб на клок,
    + переходы на задержки
    и всё это 8 раз в цикле.
Не более 15-ти строк кода. Весьма ужасно?

Это и к вопросу TM1637, и может даже к асму))

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

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

Особенно когда используется ардуиновский digitalWrite() - это ужасно ужасно. Пережитки прошлого.
Я и говорю - лучше динамическую индикацию напрямую на микроконтроллере, чем ногодрыжный SPI или I2C.

Ну и ассемблер туда же... Я как-то видел одного чувака, который на ассемблере решил прогать STM32H743. Жуткое было зрелище. За два года он сумел только таймеры подергать и еще кой-чо помелочи.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Базилюк писал(а):Я и говорю - лучше динамическую индикацию напрямую на микроконтроллере, чем ногодрыжный SPI или I2C.
Мне тут прям сразу интересно стало))

Получается написать на асме псевдо-I2C под TM1637 в 180 строк (и это с коментариями, пропусками строк и прочими украшениями) - это ногодрыжный интерфейс? ))

А написать на Сях динамику и задействовать 12 лап контроллера - это ни разу не ногодрыжный))

Или на Сях аппаратная динамика? :shock:

У кого из нас с логикой не так? :)))
Базилюк писал(а):Я как-то видел одного чувака, который на ассемблере решил прогать STM32H743. Жуткое было зрелище. За два года он сумел только таймеры подергать и еще кой-чо помелочи.
Аргумент конечно увесистый))
Но я как-то видел одну бабушку, она так и не осилила STM32H743, даже на Сях :)))

Добавлено after 14 minutes 58 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
PS: я дополню:
Базилюк писал(а):Частота обновления - это фигня. А вот определенная последовательность переключения ног для разрядов и сегментов - это куда важнее. Правильно - сначала погасить предыдущий разряд, затем выставить новую комбинацию сегментов, потом зажечь текущий разряд. Если последовательность перепутать, будет засветка сегментов в соседних разрядах. Пройденный на своих шишках этап.
И вы хотите сказать, что это не ногодрыг?)
Или если на Сях написано, то ногодрыгом не считается?))
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

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

Я имею ввиду то, что при наличии аппаратных SPI/I2C использовать ногодрыжный софтовый вариант - это моветон в наше время, динозавризм. Не важно, сколько там строк. Современные МК имеют по 3-6 аппаратных SPI и столько же I2C, недостатка в них нет. С другой стороны, при наличии 48-100 ног выделить 12 ножек под индикатор - тоже не проблема.

В общем, не стоит уподобляться древним звероящерам. На дворе уходит 2024 год, а вы всё топчитесь в прошлом тысячелетии.
Лучше бы че по теме темы сказали, чем флеймить про какую-то фигню. Спор ради спора - фигня с ушами. По делу пишите, а не спорьте на тему звероящеров.

Добавлено after 2 minutes 36 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
ЗЫ. Через DMA и таймер можно и аппаратную динамику запустить, да ваще не проблема.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Базилюк писал(а):Современные МК имеют по 3-6 аппаратных SPI и столько же I2C, недостатка в них нет.
согласен))
но весь сыр бор тут и произошёл из-за того, что у TM1637 свой 2-х проводный интерфейс) типа I2C, но не он)
и аппаратка не канает)) и библиотеки то глючные оказались) и без "ногодрыга" никуда)
но если сравнивать TM1637 с динамикой, то экономится по выводам 1:6) а по коду примерно 1:1
как то так)

:beer:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1988
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Давно использую управление TM1637 по аппаратному/программному I2c: МК: от Arduino, ATtiny13A, PIC до STM32. Отправляете данны без адреса (no slave address), данные "наоборот" (LSB), и не нужно писать еще одну функцию для отправки данных. На 100 kHz все ОК. На форуме есть тема.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

shonty, кроме того прямая динамическая индикация требует от кода жесткий тайминг, иначе яркость разрядов будет плавать (обычно под это выделяют таймер, коопераивно ещё с каким нибудь времязависимым кодом или даже монопольно + его прерывание(я) )
При внешнем управлении индикатором (через СПИ/И2С и доп микросхему-контроллер) когда захотел - тогда и обновил... красота! но, частота регенерации в этом случае обычно задается контроллером и коррекции не поддается.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Ни каких жёстких таймйнгов, и не жёстких тоже никаких .
Яркость разрядов одинаковая , по крайней мере на глаз не различается.
Атмега8 , код на си.
Изображение

Добавлено after 14 minutes 44 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
А да, забыл , вот код со свичами, касями и десятичными то ...

Добавлено after 1 minute 35 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
Код написан в CVAVR
Вложения
ампервольтметр атмега8 led.c
(8.43 КБ) 81 скачивание
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Чт сен 19, 2024 19:18:28

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

Я так думаю, это буквы - U (V) и A - напряжометр и токомер
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Базилюк прав !
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

А каков будет хорошо продуманный дизайн , для семисегментных индикаторов ?

Добавлено after 2 minutes 51 second:
Re: ATmega8, динамическая индикация, switch case и десятичная то
Да и тема то не про дизайн !?

Добавлено after 2 minutes 14 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
Да , для тех кто в танке в верхней сторке последний симол это V вольт по нашему, а в нижней это А ампер.
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

Martian писал(а):для тех, кто не в танке: там не горят сегменты у нолика и восьмёрки. Чем скорее Вы это поймёте, тем быстрее поумнеете.
Это где и кем определено ?
Я решил во встраиваемый ампервольтметр "встроить" наименования
показаний, понятным любому адекватному человеку ...
Кстати Базилюк понял сам , без разьяснений , думаю что 99,(9) процентов людей
имеющих представление что такое ток и напряжение так же поймут
А мнение 1/99,(9) процентов человечества ... пусть имеют своё , ни кто же не запрещает.

Добавлено after 12 minutes 48 seconds:
Re: ATmega8, динамическая индикация, switch case и десятичная то
И вообще мы отвлеклись от темы, про дизайн речи не шло .
Как бы динамическая индикация switch case и десятична ... имеют место быть !
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

вот ещё и схема , к выше выложенному коду
которая работает уже 5 лет в нескольких блоках
Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 678
Зарегистрирован: Пн июн 03, 2024 22:29:24

Сообщение Thinnnfor »

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

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

Thinnnfor, посмотрел я ваш код...
Как это ни каких жестких таймингов если индикация полностью вписана внутрь прерывания таймера? :dont_know:
СпойлерОстальное по коду в ЛС... :tea:
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Аватара пользователя
Сообщения: 15817
Зарегистрирован: Вт мар 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

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

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

Сообщение Thinnnfor »

BOB51 писал(а):А зачем столько лишних лапок?
Была поставлена цель, сделать максимально-минимальную конструкцию встраемого ампер-вольтметра.
Лишние дешифраторы, регистры, или любые другие компоненты, увеличили бы размер плат. А так всё
уместилось ( почти) в спичечный коробок, вместе с шунтом.
Изображение Изображение
Друг Кота
Аватара пользователя
Сообщения: 15817
Зарегистрирован: Вт мар 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-й регистр один прикошачен для своих задач, но в целом, на мой взгляд, использовать динамическую индикацию силами МК сейчас это признак дурного тона. Лепить кучу рассыпухи, отжимать у контроллера лютую кучу портов только для того, чтобы дисплеем поморгать - такое себе.
Не важно чем все начнется. Важно чем кончится!
Ответить

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