Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

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

 
Опции темы
Непрочитано 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
Сообщений: 408
Сказал спасибо: 17
Сказали Спасибо 37 раз(а) в 28 сообщении(ях)
Signalshik2 на пути к лучшему
По умолчанию Re: Каскадное включение max7219

Дайте, пожалуйста, схему и модель матрицы.
Signalshik2 вне форума  
Непрочитано 19.07.2016, 18:46  
Signalshik2
Вид на жительство
 
Аватар для Signalshik2
 
Регистрация: 11.08.2015
Сообщений: 408
Сказал спасибо: 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, время: 13:26.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot