BMP180 я так понимаю на SDA и SCL вешается?
Часы на светодиодных матрицах с драйверами MAX7219
- Сообщения: 349
- Зарегистрирован: Сб окт 20, 2007 14:12:03
Ога, получен, но в протеусе не работает. Попробую в железе.
BMP180 я так понимаю на SDA и SCL вешается?
BMP180 я так понимаю на SDA и SCL вешается?
- Реклама
Ну да, он же I²C-шный.
По поводу того, что в Proteus не работает - это странно, должно бы (я выкладывал рабочий проект).
Кстати, компилятор вполне может выдать код большего размера, чем 8кБ. Поэтому всё же попробуйте avr-gcc 4.8 использовать, код от него точно "влезает".
По поводу того, что в Proteus не работает - это странно, должно бы (я выкладывал рабочий проект).
Кстати, компилятор вполне может выдать код большего размера, чем 8кБ. Поэтому всё же попробуйте avr-gcc 4.8 использовать, код от него точно "влезает".
- Сообщения: 349
- Зарегистрирован: Сб окт 20, 2007 14:12:03
Я и так его использую.
Тип драйвера и все прочие настройки в Makefile прописываются?
Я никогда не кодил для GCC, поэтому и туплю.
Тип драйвера и все прочие настройки в Makefile прописываются?
Я никогда не кодил для GCC, поэтому и туплю.
Да, либо в Makefile указать драйвер/процессор, либо передать make как параметр командной строки.
Смотрите мой скрипт build_all.sh для массовой сборки всех прошивок.
Смотрите мой скрипт build_all.sh для массовой сборки всех прошивок.
иследуя процедуру
свою проблемму решил еще проще, буквально изменением 3 строк
WiseLord спасибо за такой код, есть чему поучиться
с помощью этой функции можно воротить матрицами как хочешь
даже для удобства разводки можно подключать произвольно матрицу к 7219, правда это требует дополнительного кода
для понимания, обьясните как идет сканирование и отображение матрицы, вопрос возник анализируя картинку с 1 стр расположения матриц с ОА и ОК и схеме
на схеме написано аноды строки - снизу вверх, катоды - слева направо
у меня не совсем сходиться расположение матриц, просто хочу по новой развести правильно большие матрицы 60х60 с 13,3,4,10,6,11,15,16 - катоды (FYM-23881BUHR)
Спасибо
Код: Выделить всё
void max7219SendDataBuf(uint8_t *buf, uint8_t rotate)WiseLord спасибо за такой код, есть чему поучиться
с помощью этой функции можно воротить матрицами как хочешь
даже для удобства разводки можно подключать произвольно матрицу к 7219, правда это требует дополнительного кода
для понимания, обьясните как идет сканирование и отображение матрицы, вопрос возник анализируя картинку с 1 стр расположения матриц с ОА и ОК и схеме
на схеме написано аноды строки - снизу вверх, катоды - слева направо
у меня не совсем сходиться расположение матриц, просто хочу по новой развести правильно большие матрицы 60х60 с 13,3,4,10,6,11,15,16 - катоды (FYM-23881BUHR)
Спасибо
- Реклама
Сканированием занимается сама MAX7219. Ей просто нужно передать номер столбца и данные для него. И так восемь раз, для каждого из столбцов.
По сути, вся функция max7219SendDataBuf() сводится к коду: А дальше уже частные случаи. Например, при rotate номера столбцов должны идти в обратном порядке:
При необходимости поворота на 90 градусов нужны уже разные битовые сдвиги (собрать N-ный бит каждого из 8 столбцов, и сформировать из них байт данных data, который уже и послать в драйвер, и так 8 раз для каждого N-ного бита)
Для четырёх матриц данные посылаются следующим образом, если упростить:
Получается, мы посылаем 4 байта (первый столбец каждой из 4 матриц), записываем в матрицы, потом ещё 4 (второй столбец) и так 8 раз
По сути, вся функция max7219SendDataBuf() сводится к коду:
Код: Выделить всё
for (j = 0; j < MAX7219_NUM_USED; j++) {
max7219SendByte(MAX7219_DIGIT_0 + i);
}Код: Выделить всё
max7219SendByte(MAX7219_DIGIT_7 - i)Для четырёх матриц данные посылаются следующим образом, если упростить:
Код: Выделить всё
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;
}Спойлер
Код: Выделить всё
Заполняем 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получается сканирование идет по столбцам слева направо
по каждой матрице с 1 столбца 1 2 3 4 матрицы потом 2 столбец 1 2 3 4 матрицы и т.д.
по каждой матрице с 1 столбца 1 2 3 4 матрицы потом 2 столбец 1 2 3 4 матрицы и т.д.
В случае отсутствия поворота - да.
Данные пишутся в драйвер 0, дальше передаются по цепочке в драйвер 1, драйвер 2, драйвер 3.
Поэтому сначала нужно передать данные для 3 матрицы, потом для 2-й, потом для 1-й и потом уже для 0-й:И так 8 раз для каждого из 8 столбцов.
Собственно сканированием (развёрткой) занимается сама MAX7219. Главное, если смотреть на матрицу с лицевой стороны светодиодов чтобы DIG_0 выход был подключен к левому столбцу (катоду), DIG_7 к правому. А выходы анодов (A-DP) шли сверху вниз. Как на схеме.
Данные пишутся в драйвер 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)Собственно сканированием (развёрткой) занимается сама MAX7219. Главное, если смотреть на матрицу с лицевой стороны светодиодов чтобы DIG_0 выход был подключен к левому столбцу (катоду), DIG_7 к правому. А выходы анодов (A-DP) шли сверху вниз. Как на схеме.
спасибо, я все понял
при перевороте передаем с 3 по 0 матрицу т.е. в противоположном порядке
а с формированием байта я разобрался
при перевороте передаем с 3 по 0 матрицу т.е. в противоположном порядке
а с формированием байта я разобрался
Нет, при перевороте как раз-таки передаём с 0 по 3 матрицу, а без переворота - с 3 по 0. Потому что байт, переданный первым, после передачи всех четырёх, как раз-таки окажется "напротив" последней матрицы, и по команде LOAD загрузится именно в неё.
ну правильно я это и имел ввиду 1 первый посланный бай при 4 кратной посылке применится к последней матрице
то есть
1 байт - 4 матрица
2 байт - 3 матрица
3 байт - 2 матрица
4 байт - 1 матрица
при перевороте наоборот
спасибо все понятно
то есть
1 байт - 4 матрица
2 байт - 3 матрица
3 байт - 2 матрица
4 байт - 1 матрица
при перевороте наоборот
спасибо все понятно
- Сообщения: 58
- Зарегистрирован: Ср апр 16, 2014 07:13:00
WiseLord здравствуйте! Что то у меня не получается отключить ежечасный сигнал. В редакторе снимаю галочку но после загрузки точка сигнала горит и соответственно звучит сигнал. Отключаю сигнал 1 и 3 кнопкой точка гаснет но сигнал все равно звучит. Помогите пожалуйста. Спасибо
Ваша правда.
Увлёкся редактором, ячейку в eeprom задействовал, переменную соответствующую завёл, а вот обработать её как-то и забыл.
Исправлено. Проверяйте.
Увлёкся редактором, ячейку в eeprom задействовал, переменную соответствующую завёл, а вот обработать её как-то и забыл.
Исправлено. Проверяйте.
- Вложения
-
- matrixclock-31e9521.7z
- (24.2 КБ) 1105 скачиваний
- Сообщения: 58
- Зарегистрирован: Ср апр 16, 2014 07:13:00
- Сообщения: 58
- Зарегистрирован: Ср апр 16, 2014 07:13:00
здорово! как, из чего делали? видно что очень все оккуратно
- Сообщения: 58
- Зарегистрирован: Ср апр 16, 2014 07:13:00
корпус оргстекло 3мм закатанное черной самоклейкой
передняя панель из красного акрила у которого одна сторона глянцевая (наружняя) внутренняя матовая. это стекло позволяет видеть только горящие светодиоды а самих матриц не видно
на фото смотрится по другому не так симпатично
передняя панель из красного акрила у которого одна сторона глянцевая (наружняя) внутренняя матовая. это стекло позволяет видеть только горящие светодиоды а самих матриц не видно
на фото смотрится по другому не так симпатично
понятно!
как резали, чем клеили, уж очень ровные края, тоже так хочу научится - может есть какие тонкости
как резали, чем клеили, уж очень ровные края, тоже так хочу научится - может есть какие тонкости
- Сообщения: 58
- Зарегистрирован: Ср апр 16, 2014 07:13:00
Резал лазером с минимальным количеством воздуха это дает ровный чистый рез а клеил клеем космофен
можно дихлоэтаном
Можно вместо лазера использовать фрезер еще лучше торец получается ровный и под прямым углом к поверхности.Лазер чуть подкашивает торец особенно на толстых материалах
можно дихлоэтаном
Можно вместо лазера использовать фрезер еще лучше торец получается ровный и под прямым углом к поверхности.Лазер чуть подкашивает торец особенно на толстых материалах


