реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
StalkerSoft
сообщение Jun 27 2016, 20:56
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 8-02-08
Из: Ростов-на-Дону
Пользователь №: 34 864



Разговорились со знакомым радиолюбителем и он мне рассказал о том что есть устройство "Синтезатор частот для любительской коротковолновой радиостанции" схема которого публиковалась в Радио 3-2005. с индикатором реализованном на на регистрах сдвига 74HC595 и ему хотелось заменить этот индикатор и поставить вместо старого индикатора, индикатор на базе MAX7219. Я слегка погорячился и сказал не проблема все можно сделать ставим контроллер подключаем по SPI драйвер и будет работать новый индикатор......

Но не тут то было.
Нарисовал стенд, железа нет, а как-то проверять программу нужно. Прикреплен в виде файла протеуса


По схеме видно что для работы индикатора нужны 3-и сигнала данные (data), синхронизация (Clock) и сигнал для защелки (strobe)
Нашел в инете прошивку для синтезатора sd_ra6lm.HEX загрузил в стенд запускаю ну вроде что-то паказывает


Добавил в стенд ATmega328 завел strobe на itn0, clock на int1 и данные portd.4

Написал код по идее который должен был считывать данные и заполнять буффер и посылать их в MAX7219
Это собственно сам код обработчиков прерываний

Код
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Strobe signal
    TrComplete=1;
    charcount=0;
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
    InputBuff[charcount]=(InputBuff[charcount]<<1) | PIND.4;
    if (++bitcount==7){
            bitcount=0;
            charcount++;
            InputBuff[charcount]=0;
    }
}


Полный код проект на CodeVision прикреплен к сообщению.

При тестировании работы получилось что индикаторы отображают разную информацию.

Может кто подсказать что не правильно я сделал?
Может у кого есть готовые примеры.




Прикрепленные файлы
Прикрепленный файл  max7219_connect.rar ( 49.1 килобайт ) Кол-во скачиваний: 11
Прикрепленный файл  stend.rar ( 20.91 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 28 2016, 09:55
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Подозреваю, что контроллер тупо не успевает принимать данные по прерывниям EXT_INT. Почему бы вам не завести сигналы data и clock на SPI, а strobe на EXT_INT? Тогда биты будут задвигаться автоматически, а по strobe будет достаточно сбросить SPI (чтобы восстановить вдруг потерянную синхронизацию) и запустить процесс вывода в MAX7219.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
StalkerSoft
сообщение Jun 28 2016, 10:57
Сообщение #3





Группа: Участник
Сообщений: 9
Регистрация: 8-02-08
Из: Ростов-на-Дону
Пользователь №: 34 864



Цитата(Сергей Борщ @ Jun 28 2016, 12:55) *
Подозреваю, что контроллер тупо не успевает принимать данные по прерывниям EXT_INT. Почему бы вам не завести сигналы data и clock на SPI, а strobe на EXT_INT? Тогда биты будут задвигаться автоматически, а по strobe будет достаточно сбросить SPI (чтобы восстановить вдруг потерянную синхронизацию) и запустить процесс вывода в MAX7219.

Попробую вечером.
т.е. вы предлагаете на spi повесить и входящий поток и max7219 при приеме данных от пика pin load на max7219 опускать и по приходу на ext_int STROBE его поднимать и выдавать в MAX7219 полученные данные
Так?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 29 2016, 12:35
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (StalkerSoft @ Jun 28 2016, 13:57) *
т.е. вы предлагаете на spi повесить и входящий поток и max7219 при приеме данных от пика
Вот видите - вы точку и заглавную букву сэкономили, а я пять раз перечитывал и пытался понять. Уважайте других.

Нет, я предлагаю принимать данные в SPI (поскольку для этого нужна скорость реакции), а выдавать их в max7219 любыми другими ногами ногодрыгом - потому что скорость в этом процессе не нужна и вывод написать гораздо проще, чем ввод. Повесить и то и другое на один-единственный SPI не получится, потому что для приема данных он должен работать в режиме ведомого, а для передачи - в роли ведущего.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 15:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016