Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Каскадное включение max7219

Непрочитано 17.07.2016, 12:23  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Каскадное включение max7219

Здравствуйте, уважаемые форумчане.
Больше недели бьюсь над светодиодными матрицами на базе max7219. У меня их 4 штуки, подключенных каскадом, ьатрицы самодельные. В ардуино всё работает как надо. Но я решил написать библиотеки на Си под cvavr. В итоге с одной матрицей всё нормально, в каскаде всё дублируется. Пробовал с пустыми пакетами - результат тот же.
Я взял логический анализатор, взял программу на ардуино, считал байты по spi, написал инициализацию для каскадов - в итоге на ардуино работает, на си - дублирует картинку на все матрицы.
Кто работал на си с max72xx поделитесь опытом.
Прикреплю свои библиотеки ниже.
Вложения:
Тип файла: rar Desktop.rar (3.8 Кб, 0 просмотров)
Реклама:

Последний раз редактировалось Andrejchukov; 19.07.2016 в 21:47.
Andrejchukov вне форума  
Непрочитано 17.07.2016, 18:43  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Странный малость код...
На Вашем месте я бы делал проще:
Код:
// Объявляем массив в котором будут храниться разряды:
char digits[32];
// Матрицы должны быть составлены так:
[01234567][8-15][16-23][24-31]
// Отправляем их:
void max7219_light(unsigned char light) {
int i;
for (i=0;i‹8;i++) {
 spi_write_word(i‹‹8|digits[24+i]);
 spi_write_word(i‹‹8|digits[16+i]);
 spi_write_word(i‹‹8|digits[8+i]);
 spi_write_word(i‹‹8|digits[i]);
};
};
Поясню. Если у Вас чипы расположены, как рекомендует мануал, цепочкой, то первый пакет данных в итоге окажется в последнем чипе, а последний - в первом.
Первым параметром передаётся номер знакоместа. Могу ошибиться и цифры у Вас окажутся развёрнуты относительно порядка индикаторов. Но, думаю, с этим уже справитесь самостоятельно.
И, как бы, всё. Больше никаких переделок на первый взгляд делать не нужно.

Старые данные (которые были в регистрах ДО новых) будут просто вытолкнуты.
-Alan- вне форума  
Непрочитано 19.07.2016, 01:07  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Re: Каскадное включение max7219

[QUOTE=-Alan-;1043661]Странный малость код...
На Вашем месте я бы делал проще:
Код:
// Объявляем массив в котором будут храниться разряды:
char digits[32];
// Матрицы должны быть составлены так:
[01234567][8-15][16-23][24-31]
// Отправляем их:
void max7219_light(unsigned char light) {
int i;
for (i=0;i‹8;i++) {
 spi_write_word(i‹‹8|digits[24+i]);
 spi_write_word(i‹‹8|digits[16+i]);
 spi_write_word(i‹‹8|digits[8+i]);
 spi_write_word(i‹‹8|digits[i]);
};
};
Спасибо за ваш ответ. Но всёравно мне немного не понятно (так как в программировании я пока ноль).
Я так понимаю, ваш пример для семи сегментных матриц (это не суть вопроса, принцип их работы тот же, что и у матриц 8x8 ). Дело вот в чём: инициализацию матриц я уже переписал (в архиве в шапке темы первый сырой вариант, я потом посмотрел анализатором, как это делает ардуиновский скетч, затем проверил тем же анализатором, как это делает моя программа, на спи выходят идентичные пакеты) в основном цикле я отправляются четыре пакета (например: три пакета 0х0000, затем пакет с номером строки и байтом сегментов (напр 0х01FF), на первом круге основного цикла у меня заполняется нужный столбец нужной матрицы, затем на втором круге начинает заполняться тот же столбец во всех остальных матрицах. Проверяют анализатором, на spi в цикле четыре пакета 0х0000, 0х0000, 0х0000, 0х01FF (всё как и задумано). Может быть я ошибаюсь, но первый пакет должен заполнить последнюю матрицу, второй - пред последнюю, третий - вторую, четвёртый - первую. А потом всё сначала. Пустые пакеты по идее должны идти в матрицы, состояние которых мне не нужно менять в данный момент.
P.S. моя функция light всего лишь выставляла яркость матриц. Инициализация у меня тоже работает, как я понимаю, раз матрицы хоть и криво но работают.

Последний раз редактировалось Andrejchukov; 19.07.2016 в 12:11.
Andrejchukov вне форума  
Непрочитано 19.07.2016, 15:22  
-Alan-
Прописка
 
Аватар для -Alan-
 
Регистрация: 05.12.2008
Адрес: Россия, Омск
Сообщений: 145
Сказал спасибо: 39
Сказали Спасибо 29 раз(а) в 22 сообщении(ях)
-Alan- на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Я пролистал немного мануал по самим микросхемам.
И вот что получается. Если отправить посылку вида
НомерЦифры/ВключённыеРазряды (0x01|0xFF) - Зажигаем в 1-м разряде (не нулевом, а именно первом, это второе знакоместо) 8 и точку. '8.', а сразу за этим - например, (0x01|0x00) - Полностью гасим знакоместо, то первая команда окажется во второй микросхеме, а вторая - в первой. Аналогично, по сути, работают сдвиговые регистры типа 74HC595 (только сигнал записи нужно ещё передать).
Таким образом, в том коде, что привёл я, данные будут передаваться сразу на всю линейку от 4-й микросхемы к первой. За один цикл из цифр числа Пи:
3,14159265 35897932 38462643 38327950 (3, будут находиться в одном знакоместе!)
Будут переданы:
-› '3', '3', '3', '3,' (First Word)
-› '8', '8', '5', '1'
И так далее. Самая первая переданая посылка будет загружена в последний чип в 0-е знакоместо.
Во всяком случае, у меня такое предположение.

Кстати, ещё забыл одну строку:
Код:
for (i=0;i‹8;i++) {
 spi_write_word(i‹‹8|digits[24+i]);
 spi_write_word(i‹‹8|digits[16+i]);
 spi_write_word(i‹‹8|digits[8+i]);
 spi_write_word(i‹‹8|digits[i]);
// Вот здесь должна быть команда, дёргающая пин /CS чипов!
// Например, такая:
PORTA &= ~0x01;
PORTA |= 0x01;
// PORTA.0 (нулевой пин) будет подключен к общим пинам микросхем /CS. Например.
};
Да, я пролистал более подробно инструкцию к микросхемам. Именно по спаду на пине CS данные из буфера загружаются в регистры чипа. Так что, нужно будет пользоваться этим пином. Иначе не будет корректно работать.
Мой код в прошлом примере будет просто гонять байты через микросхемы. Теперь - будет записывать.
Я предполагаю. Протестировать не на чем.
-Alan- вне форума  
Непрочитано 19.07.2016, 16:32  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Сообщение от -Alan- Посмотреть сообщение
Код:
for (i=0;i‹8;i++) {
 spi_write_word(i‹‹8|digits[24+i]);
 spi_write_word(i‹‹8|digits[16+i]);
 spi_write_word(i‹‹8|digits[8+i]);
 spi_write_word(i‹‹8|digits[i]);
// Вот здесь должна быть команда, дёргающая пин /CS чипов!
// Например, такая:
PORTA &= ~0x01;
PORTA |= 0x01;
// PORTA.0 (нулевой пин) будет подключен к общим пинам микросхем /CS. Например.
};
Попробовал ваш код, результат, к сожалению, тот же (на картинке). Все матрицы дублируют изображение. Код взял полностью ваш, только CS у меня на порте B(исправил естественно), хотя у меня SPI аппаратный, та CS сам дёргается после отсылки байта (в моём случае слова).
Миниатюры:
Нажмите на изображение для увеличения
Название: IMG_20160719_151922.jpg
Просмотров: 0
Размер:	4.45 Мб
ID:	96830  
Andrejchukov вне форума  
Непрочитано 19.07.2016, 16:58  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Вот для примера прилагаю картинки работы кода Ардуино (светятся две точки на разных матрицах) и работы моей программы на код вижене (на всех матрицах одно и то же) и картинка из анализатора (пакеты spi идентичные, отличаются только скоростями, т.к. ардуино использует программный spi, который я тоже, кстати, пробовал с тем же результатом). Плата на atmega128 одна и та же. Парадокс?

Я стал подумывать на свой spi, взял программный (выдрал из axlib для студии) - то же самое, менял скорость передачи - бесполезно.
Миниатюры:
Нажмите на изображение для увеличения
Название: IMG_20160719_150235.jpg
Просмотров: 0
Размер:	4.60 Мб
ID:	96832   Нажмите на изображение для увеличения
Название: IMG_20160719_150334.jpg
Просмотров: 0
Размер:	3.82 Мб
ID:	96833   Нажмите на изображение для увеличения
Название: cvavr.jpg
Просмотров: 0
Размер:	143.9 Кб
ID:	96834  

Нажмите на изображение для увеличения
Название: arduino_scr.jpg
Просмотров: 0
Размер:	105.9 Кб
ID:	96835  

Последний раз редактировалось Andrejchukov; 19.07.2016 в 17:01.
Andrejchukov вне форума  
Непрочитано 19.07.2016, 17:58  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Кажись, я сам допёр, в чём дело. Я сравнил пакеты данных (из предыдущего своего сообщения) и понял, что в ардуино cs дёргается между пакетами данных, а у меня- после каждого слова, что защёлкивает сдвиговый регистр, и данные перемещаются пословно в каждую матрицу. Попробую переписать протокол spi.
Andrejchukov вне форума  
Непрочитано 19.07.2016, 18:34  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Дайте, пожалуйста, схему и модель матрицы.
Signalshik2 вне форума  
Непрочитано 19.07.2016, 18:46  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 409
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Вероятно такое решение: во все микросхемы/регистры записываете одно и то же число. В Вашей микросхеме сигнал CS# называется LOAD - записывает последние 16 бит во внутренние регистры и, соответственно, показывает их.
Signalshik2 вне форума  
Непрочитано 19.07.2016, 18:52  
Andrejchukov
Частый гость
 
Регистрация: 28.02.2011
Сообщений: 33
Сказал спасибо: 1
Сказали Спасибо 13 раз(а) в 12 сообщении(ях)
Andrejchukov на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Сообщение от Signalshik2 Посмотреть сообщение
Дайте, пожалуйста, схему и модель матрицы.
Led матрицы 1088BS, к матрице подключено так:
max72xx // LED

SEG DP Anod1
SEG A Anod2
SEG B Anod3
SEG C Anod4
SEG D Anod5
SEG E Anod6
SEG F Anod7
SEG G Anod8

DIG0 Katod1
DIG1 Katod2
DIG2 Katod3
DIG3 Katod4
DIG4 Katod5
DIG5 Katod6
DIG6 Katod7
DIG7 Katod8

CS и CLK в кучу, DIN первой матрицы к MOSI микроконтроллёра, DOUT первой матрицы на DIN второй и т д. Линия CS и контакты ISET подтянуты на плюс через 10 килоом. Приложу плату в LAYOUT6.
Плата у меня односторонняя, там оооочень много перемычек, и надо на пол миллиметра развести матрицы между собой.
Схему рисовал сходу из головы.
Вложения:
Тип файла: rar max7219.rar (12.4 Кб, 0 просмотров)

Последний раз редактировалось Andrejchukov; 19.07.2016 в 18:58.
Andrejchukov вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с MAX7219 igor33 TTL и CMOS логика 32 12.09.2016 15:41
STM32F107VC + MAX7219 wastegate ARM 4 26.09.2014 14:35
Включение реле процессором без помех при включении. Sozh Электроника - это просто 23 22.06.2011 16:17
Ступенчатое включение нагревателей II3II Производственное оборудование 69 03.09.2010 13:37
M41T93 подвисает при включение ! :) ajborman Микроконтроллеры, АЦП, память и т.д 0 04.02.2008 14:42


Часовой пояс GMT +4, время: 17:48.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.