stalkersoft 0 27 июня, 2016 Опубликовано 27 июня, 2016 · Жалоба Разговорились со знакомым радиолюбителем и он мне рассказал о том что есть устройство "Синтезатор частот для любительской коротковолновой радиостанции" схема которого публиковалась в Радио 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 stend.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 28 июня, 2016 Опубликовано 28 июня, 2016 · Жалоба Подозреваю, что контроллер тупо не успевает принимать данные по прерывниям EXT_INT. Почему бы вам не завести сигналы data и clock на SPI, а strobe на EXT_INT? Тогда биты будут задвигаться автоматически, а по strobe будет достаточно сбросить SPI (чтобы восстановить вдруг потерянную синхронизацию) и запустить процесс вывода в MAX7219. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stalkersoft 0 28 июня, 2016 Опубликовано 28 июня, 2016 · Жалоба Подозреваю, что контроллер тупо не успевает принимать данные по прерывниям EXT_INT. Почему бы вам не завести сигналы data и clock на SPI, а strobe на EXT_INT? Тогда биты будут задвигаться автоматически, а по strobe будет достаточно сбросить SPI (чтобы восстановить вдруг потерянную синхронизацию) и запустить процесс вывода в MAX7219. Попробую вечером. т.е. вы предлагаете на spi повесить и входящий поток и max7219 при приеме данных от пика pin load на max7219 опускать и по приходу на ext_int STROBE его поднимать и выдавать в MAX7219 полученные данные Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 июня, 2016 Опубликовано 29 июня, 2016 · Жалоба т.е. вы предлагаете на spi повесить и входящий поток и max7219 при приеме данных от пикаВот видите - вы точку и заглавную букву сэкономили, а я пять раз перечитывал и пытался понять. Уважайте других. Нет, я предлагаю принимать данные в SPI (поскольку для этого нужна скорость реакции), а выдавать их в max7219 любыми другими ногами ногодрыгом - потому что скорость в этом процессе не нужна и вывод написать гораздо проще, чем ввод. Повесить и то и другое на один-единственный SPI не получится, потому что для приема данных он должен работать в режиме ведомого, а для передачи - в роли ведущего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться