Часы на светодиодных матрицах с драйверами MAX7219

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Ответить
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

Ога, получен, но в протеусе не работает. Попробую в железе.
BMP180 я так понимаю на SDA и SCL вешается?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ну да, он же I²C-шный.

По поводу того, что в Proteus не работает - это странно, должно бы (я выкладывал рабочий проект).

Кстати, компилятор вполне может выдать код большего размера, чем 8кБ. Поэтому всё же попробуйте avr-gcc 4.8 использовать, код от него точно "влезает".
Контактная информация:
Реклама
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

Сообщение AVK »

Я и так его использую.
Тип драйвера и все прочие настройки в Makefile прописываются?
Я никогда не кодил для GCC, поэтому и туплю.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Да, либо в Makefile указать драйвер/процессор, либо передать make как параметр командной строки.

Смотрите мой скрипт build_all.sh для массовой сборки всех прошивок.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

иследуя процедуру

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

void max7219SendDataBuf(uint8_t *buf, uint8_t rotate)
свою проблемму решил еще проще, буквально изменением 3 строк
WiseLord спасибо за такой код, есть чему поучиться
с помощью этой функции можно воротить матрицами как хочешь
даже для удобства разводки можно подключать произвольно матрицу к 7219, правда это требует дополнительного кода

для понимания, обьясните как идет сканирование и отображение матрицы, вопрос возник анализируя картинку с 1 стр расположения матриц с ОА и ОК и схеме
на схеме написано аноды строки - снизу вверх, катоды - слева направо
у меня не совсем сходиться расположение матриц, просто хочу по новой развести правильно большие матрицы 60х60 с 13,3,4,10,6,11,15,16 - катоды (FYM-23881BUHR)
Спасибо
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Сканированием занимается сама MAX7219. Ей просто нужно передать номер столбца и данные для него. И так восемь раз, для каждого из столбцов.
По сути, вся функция max7219SendDataBuf() сводится к коду:

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

for (j = 0; j < MAX7219_NUM_USED; j++) {
    max7219SendByte(MAX7219_DIGIT_0 + i);
}
А дальше уже частные случаи. Например, при rotate номера столбцов должны идти в обратном порядке:

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

max7219SendByte(MAX7219_DIGIT_7 - i)
При необходимости поворота на 90 градусов нужны уже разные битовые сдвиги (собрать N-ный бит каждого из 8 столбцов, и сформировать из них байт данных data, который уже и послать в драйвер, и так 8 раз для каждого N-ного бита)

Для четырёх матриц данные посылаются следующим образом, если упростить:

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

for (i = 0; i < 8; i++) { // биты
  PORT(MAX7219_LOAD) &= ~MAX7219_LOAD_LINE;
  for (j = 0; j < MAX7219_NUM_USED; j++) { // номер матрицы
    max7219SendByte(MAX7219_DIGIT_0 + i)
  }
  PORT(MAX7219_LOAD) |= MAX7219_LOAD_LINE;
}
Получается, мы посылаем 4 байта (первый столбец каждой из 4 матриц), записываем в матрицы, потом ещё 4 (второй столбец) и так 8 раз
Спойлер

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

Заполняем 0 столбец:
Линия LOAD = 0
                           0        1 байт
                  0                 2 байт
         0                          3 байт
0                                   4 байт
Линия LOAD = 1
0        0        0        0        бит 0 в 4-х матрицах

Заполняем 1 столбец:
Линия LOAD = 0
                            1       1 байт
                   1                2 байт
          1                         3 байт
 1                                  4 байт
Линия LOAD = 1
01       01       01       01       бит 1 в 4-х матрицах

Заполняем 2 столбец:
012      012      012      012     
Заполняем 3 столбец:
0123     0123     0123     0123    
Заполняем 4 столбец:
01234    01234    01234    01234   
Заполняем 5 столбец:
012345   012345   012345   012345  
Заполняем 6 столбец:
0123456  0123456  0123456  01234567
Заполняем 7 столбец:
01234567 01234567 01234567 01234567
Контактная информация:
Реклама
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

получается сканирование идет по столбцам слева направо
по каждой матрице с 1 столбца 1 2 3 4 матрицы потом 2 столбец 1 2 3 4 матрицы и т.д.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

В случае отсутствия поворота - да.
Данные пишутся в драйвер 0, дальше передаются по цепочке в драйвер 1, драйвер 2, драйвер 3.
Поэтому сначала нужно передать данные для 3 матрицы, потом для 2-й, потом для 1-й и потом уже для 0-й:

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

матрица               0 1 2 3

данные для 3 матрицы: 3
данные для 2 матрицы: 2 3
данные для 1 матрицы: 1 2 3
данные для 0 матрицы: 0 1 3 3
сохранили (LOAD)
И так 8 раз для каждого из 8 столбцов.

Собственно сканированием (развёрткой) занимается сама MAX7219. Главное, если смотреть на матрицу с лицевой стороны светодиодов чтобы DIG_0 выход был подключен к левому столбцу (катоду), DIG_7 к правому. А выходы анодов (A-DP) шли сверху вниз. Как на схеме.
Контактная информация:
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

спасибо, я все понял
при перевороте передаем с 3 по 0 матрицу т.е. в противоположном порядке
а с формированием байта я разобрался
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Нет, при перевороте как раз-таки передаём с 0 по 3 матрицу, а без переворота - с 3 по 0. Потому что байт, переданный первым, после передачи всех четырёх, как раз-таки окажется "напротив" последней матрицы, и по команде LOAD загрузится именно в неё.
Контактная информация:
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

ну правильно я это и имел ввиду 1 первый посланный бай при 4 кратной посылке применится к последней матрице
то есть
1 байт - 4 матрица
2 байт - 3 матрица
3 байт - 2 матрица
4 байт - 1 матрица
при перевороте наоборот
спасибо все понятно
Открыл глаза
Сообщения: 58
Зарегистрирован: Ср апр 16, 2014 07:13:00

Сообщение Kuzma511 »

WiseLord здравствуйте! Что то у меня не получается отключить ежечасный сигнал. В редакторе снимаю галочку но после загрузки точка сигнала горит и соответственно звучит сигнал. Отключаю сигнал 1 и 3 кнопкой точка гаснет но сигнал все равно звучит. Помогите пожалуйста. Спасибо
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ваша правда.

Увлёкся редактором, ячейку в eeprom задействовал, переменную соответствующую завёл, а вот обработать её как-то и забыл.

Исправлено. Проверяйте.
Вложения
matrixclock-31e9521.7z
(24.2 КБ) 1105 скачиваний
Контактная информация:
Открыл глаза
Сообщения: 58
Зарегистрирован: Ср апр 16, 2014 07:13:00

Сообщение Kuzma511 »

Спасибо большое! Все работает.
Открыл глаза
Сообщения: 58
Зарегистрирован: Ср апр 16, 2014 07:13:00

Сообщение Kuzma511 »

Вот решил показать свои часы
IMG_0139 (1).JPG
(78.34 КБ) 1513 скачиваний
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

здорово! как, из чего делали? видно что очень все оккуратно
Открыл глаза
Сообщения: 58
Зарегистрирован: Ср апр 16, 2014 07:13:00

Сообщение Kuzma511 »

корпус оргстекло 3мм закатанное черной самоклейкой
передняя панель из красного акрила у которого одна сторона глянцевая (наружняя) внутренняя матовая. это стекло позволяет видеть только горящие светодиоды а самих матриц не видно
на фото смотрится по другому не так симпатично
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

понятно!
как резали, чем клеили, уж очень ровные края, тоже так хочу научится - может есть какие тонкости
Открыл глаза
Сообщения: 58
Зарегистрирован: Ср апр 16, 2014 07:13:00

Сообщение Kuzma511 »

Резал лазером с минимальным количеством воздуха это дает ровный чистый рез а клеил клеем космофен
можно дихлоэтаном
Можно вместо лазера использовать фрезер еще лучше торец получается ровный и под прямым углом к поверхности.Лазер чуть подкашивает торец особенно на толстых материалах
Мявтор!
Аватара пользователя
Сообщения: 2057
Зарегистрирован: Чт ноя 30, 2006 12:27:46
Откуда: Челябинск

Сообщение dt_andrew »

спасибо, я так и думал что лазер
Ответить

Вернуться в «Статьи»