Коллеги, а накидайте идей, по какой-такой причине на сабже может не работать SPI? Расклад следующий: есть Atmega8, которой нужно выводить информацию на восьмиразрядный индикатор через драйвер MAX7219. В Протеусе всё работает замечательно, но в железе я получаю полный ступор: на линии MOSI висит высокий потенциал и нет никакого движения, на линиях SCK и PB0 низкий потенциал с периодически возникающими пачками каких-то хаотичных импульсов. Индикаторы при этом либо вообще не включаются, либо выводят бессмыслицу. Ну, ОК, программер я тот ещё, мог и накосячить в коде. Беру с сайта NarodStream демонстрационную программу, которая разжёвана уважаемым автором до последней строчки... https://narodstream.ru/avr-urok-28-spi- ... d-max7219/
...заливаю её в контроллер и получаю тот же результат. Отключаю от контроллера драйвер с индикатором -- ничего не меняется. Заливаю для проверки простейшую программу-мигалку, всё работает, контроллер весело дрыгает всеми своими ножками. Прошивается и читается он, к слову, тоже без проблем.
Что бы это могло значить? Попался бракованный контроллер или это я где-то люто торможу? К сожалению, запасного под рукой нет.
В монтаже ошибок нет, флюс смыт уже просто до хруста. Все подключения по даташиту, ну разве что в драйвере по линии ISET стоит не волшебный резистор 9,53К а нормальный в 10К. Атмега не китайская, куплена во всем известном магазинчике с богатым ассортиментом и конскими ценами . Фьюзы установлены по умолчанию, 3F, D9, E4. Блоки питания пробовал разные, в том числе и трансформаторные.
Новый контроллер заказал, жду. А пока буду благодарен за любые идеи.
Идея есть. Выложить свой неработающий код в части работы SPI и инициализации. Потому что осень ослабляет телепатические способности. На линиях висят те потенциалы, которое им диктует программа - в нормальном МК.
Возможно несоответствие spi mode у дивайса и в программе. Всё легко ущучивается: синхронизнуться внешне от CS, посмотреть MOSI относительно CLK. MOSI постоянно в высоком? Коротыш на питание, косяк в программе, неисправность МК. Чудес не бывает. Разделяется и проверяется по частям.
Ну и МК может быть дохлый. То, что прошивается, ещё не гарантия "хорошести" .
Последний раз редактировалось Jack_A Вс сен 20, 2020 14:02:30, всего редактировалось 1 раз.
[uquote="Jack_A",url="/forum/viewtopic.php?p=3895124#p3895124"]Идея есть. Выложить свой неработающий код в части работы SPI и инициализации.[/uquote]
Программер я начинающий и мой код пока что слишком убог, чтобы его публиковать Так что позволю себе ограничиться демо-программой от NarodStream, которую я упоминал выше. Она ровно так же не работает на моей железке, но отлично запускается в Протеусе. От авторской, выложенной на сайте, она отличается только тем, что количество знакомест ограничено пятью, восемь у меня протеус не тянет.
Читать этот код мне лень, могу посоветовать: перерезать дорожку от MOSI и посмотреть, что теперь на MOSI - есть импульсы или нет. Если есть, а на другой стороне "перереза" высокий - то коротыш. Если нет - косяк МК.
Монтаж проверен-перепроверен по десятому кругу, всё с ним нормально, замыканий нет. Я и сам, откровенно говоря, склоняюсь к мысли, что мне "повезло" заиметь глючный МК, но надежда, как известно, умирает последней. Оттого и решил спросить совета у бывалых.
Что касается кода, то если Вам или ещё кому он будет интересен, то вот видеоурок. Автор детально разбирает буквально каждую строчку и демонстрирует работу и в Протеусе и в железе. Чёрт, эта программа просто обязана работать, там нечему глючить.
Хм... SPI2X по умолчанию стоит в нуле. ОК, попробую выставить бит явно. В Протеусе код работает, позже попробую поэкспериментировать с железкой и о результате отпишусь.
Пришли индикаторы на мах7219…
Как и обещал, написал тестовую прошивку для меги8. Фьюзы прошивать не нужно (МК тактируется на заводских установках). На индикаторе установлена минимальная яркость. Задействован аппаратный SPI.
MAX7219_Test.hex
Схема для подключения индикатора к выводам МК.
Спойлер
Коллеги, премного извиняюсь за долгое молчание, свалился на голову срочный проект.
Продолжаю разговор. Дело, как оказалось не в Меге, а в связке Max7219 и индикаторах. Я тоже разжился готовыми китайскими модулями, точно такими как в посте выше. Подключаю их, вуаля, всё работает идеально! Но мне надобны циферки побольше. Закупаю ещё пять штук 7219 к трём имеющимся у меня, итого их становится восемь. Так вот, из восьми штук на моём самодельном дисплее запустилась лишь одна, да и та работает нестабильно, через несколько минут может погаснуть. Остальные ведут себя так, как описано в первом посте.
Какого шкодливого кота 7219 отказывается работать с индикаторами? Они у меня самые обычные, семисегментные, красные, общий катод, типа TOS-5161AMR-N, высота знакоместа 14 мм.
Если по отдельности (с тестовой прошивкой), все модули работают нормально, а в связке с Вашей программой управления начинают глючить – то засада в Вашей программе… а вообще при необходимости больших цифр/букв используют матрицы 8х8 с МАХ7219 как пример:
Спойлерhttps://aliexpress.ru/item/4001189296229.html?spm=a2g0o.search0302.0.0.2511373a2oNrkN&algo_pvid=5ecffd06-f398-4dad-b9d2-14c0ac266c58&algo_expid=5ecffd06-f398-4dad-b9d2-14c0ac266c58-15&btsid=0b8b034a16082669484826525ee0d4&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_
Для цифирек "побольше" (или совсем "безразмерных") легче разновидности 595го регистра применять с источниками тока на каждый сегмент на основе LM317...
Спасибо всем за ответы!
С прошивкой у меня всё в порядке, как выяснилось. С позволения почтенной публики я опишу ситуацию немного подробнее. Итак, имеется устройство, состоящее из двух плат, соединённых бутербродом через PLS-PBS. На нижней распаяна Мега вместе со всей требухой, верхняя -- чисто дисплей, здесь установлены индикаторы и 7219. При включении имеем картинку, описанную в первом посте. Однако, если вместо верхней платы подкинуть китайский модуль, фото которого есть выше у тов. Самсусамыча, то всё работает правильно. Более того, с одной из имеющихся у меня 7219 самодельный дисплей тоже запускается, но работает нестабильно и через пару минут вешается. Тем не менее этот факт как бы говорит, что дисплей распаян правильно и в принципе работоспособен.
Кроме того у меня есть отладочная плата, в которую я залил демонстрационную прошивку от НародСтрим, тоже упомянутую выше. С ней картина аналогичная, самодельный дисплей не работает, китайский -- запускается.
ИМХО я словил какой-то очень странный конфликт 7219 и индикаторов, причины которого я пока не понимаю. Микросхемы куплены в разных местах: три в ЧиД, пять у китайцев, что примечательно запускается "китайская". В качестве рабочей версии подозреваю неудачную разводку платы, из-за которой возникают наводки. Индикаторы одинарные, плата двусторонняя, дорожек, понятное дело, много. Пока не придумал ничего лучше как заказать строенные сборки индикаторов и полностью переделать плату. Посмотрю, что из этого выйдет.
Да, слишком большие цифры мне не требуются, это будет настольное устройство, для которого матрицы излишни. Знакоместо в 14 мм. в самый раз, а вот китайский модуль маловат.
Kalessin72, скажи чем разрешилась проблема?
Чтобы не плодить темы, опишу свою проблему здесь.
У меня подобная сложность - с али пришёл 1 модуль в сборе (матрица 8х8 и max7219), и отдельно 5шт. max7219.
Модуль в сборе работает как положено, а вот если родной max7219 заменить на те, что пришли отдельно, то ничего не работает, и более того, виснет атмега.
Самое интересное, что все 5 отдельных max7219 дают такой эффект.
Есть ли у кого соображения в чём причина зависания атмеги от max7219?
На фото рабочий модуль в сборе.
Отмечалась нестабильная работа блока с 8 индикаторами ("стандартная" платка с СМД МАХом) в случае режима дешифратора.
Нечеткое включение/"зависание" при подаче питания...
Вариант "знакосинтеза" таких дефектов не обнаруживал.
Как предположение...
Собственно в МАХе свой генератор сброса - возможно время до подачи блока команд инициализации надо увеличить.
Расположенный у контактов питания электролит также не слишком увеличивать...
Смотрим за максимально допустимым током на сегмент (задается внешним резистором) и соотношение кратности увеличения при снижении количества активных знакомест (менее 8 ). И корректность команд в блоке инициализации. Возможно имеет значение порядок следования команд - сначала настройка, затем включение индикации.
Крайний случай - подделка...
У Вас случаем не адуринка?
Там с контактами ISP надо несколько поаккуратнее обращаться - учитываем их коротенькую активацию на момент запуска бутлоадера при включении платки!
BOB51 писал(а):У Вас случаем не адуринка?
Там с контактами ISP надо несколько поаккуратнее обращаться - учитываем их коротенькую активацию на момент запуска бутлоадера при включении платки!
[uquote="simonsun",url="/forum/viewtopic.php?p=3956619#p3956619"]Есть ли у кого соображения в чём причина зависания атмеги от max7219?[/uquote]
Моя тестовая прошивка тоже зависает?