Коллеги, а накидайте идей, по какой-такой причине на сабже может не работать 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 раз.
Идея есть. Выложить свой неработающий код в части работы SPI и инициализации.
Программер я начинающий и мой код пока что слишком убог, чтобы его публиковать Так что позволю себе ограничиться демо-программой от NarodStream, которую я упоминал выше. Она ровно так же не работает на моей железке, но отлично запускается в Протеусе. От авторской, выложенной на сайте, она отличается только тем, что количество знакомест ограничено пятью, восемь у меня протеус не тянет.
void Clear_7219(void) { char i = dg; // Loop until 0, but don't run for zero do { // Set each display in use to blank Send_7219(i, 0xF); //CHAR BLANK } while (--i); }
void Number_7219(volatile long n) { char ng = 0; //переменная для минуса if (n < 0) { ng = 1; n *= -1; } Clear_7219(); if (n == 0) { Send_7219(0x01, 0); //в первый разряд напишем 0 return; } char i = 0; do { Send_7219(++i, n%10); n /= 10; } while (n); if (ng) { Send_7219(i+1, 0xA); //символ - } }
void NumberFull_7219(volatile long n) { int i; //Clear_7219(); for(i=0;i<dg;i++) { Send_7219(i+1,(n/((long)pow(10,i)))%10); } }
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Читать этот код мне лень, могу посоветовать: перерезать дорожку от MOSI и посмотреть, что теперь на MOSI - есть импульсы или нет. Если есть, а на другой стороне "перереза" высокий - то коротыш. Если нет - косяк МК.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Монтаж проверен-перепроверен по десятому кругу, всё с ним нормально, замыканий нет. Я и сам, откровенно говоря, склоняюсь к мысли, что мне "повезло" заиметь глючный МК, но надежда, как известно, умирает последней. Оттого и решил спросить совета у бывалых.
Что касается кода, то если Вам или ещё кому он будет интересен, то вот видеоурок. Автор детально разбирает буквально каждую строчку и демонстрирует работу и в Протеусе и в железе. Чёрт, эта программа просто обязана работать, там нечему глючить.
Хм... SPI2X по умолчанию стоит в нуле. ОК, попробую выставить бит явно. В Протеусе код работает, позже попробую поэкспериментировать с железкой и о результате отпишусь.
Заголовок сообщения: Re: Atmega8 + MAX7219 не работает SPI
Добавлено: Пт ноя 06, 2020 19:37:33
Пришли индикаторы на мах7219…
Как и обещал, написал тестовую прошивку для меги8. Фьюзы прошивать не нужно (МК тактируется на заводских установках). На индикаторе установлена минимальная яркость. Задействован аппаратный SPI.
Вложение:
MAX7219_Test.hex
Схема для подключения индикатора к выводам МК. Спойлер
Коллеги, премного извиняюсь за долгое молчание, свалился на голову срочный проект.
Продолжаю разговор. Дело, как оказалось не в Меге, а в связке Max7219 и индикаторах. Я тоже разжился готовыми китайскими модулями, точно такими как в посте выше. Подключаю их, вуаля, всё работает идеально! Но мне надобны циферки побольше. Закупаю ещё пять штук 7219 к трём имеющимся у меня, итого их становится восемь. Так вот, из восьми штук на моём самодельном дисплее запустилась лишь одна, да и та работает нестабильно, через несколько минут может погаснуть. Остальные ведут себя так, как описано в первом посте.
Какого шкодливого кота 7219 отказывается работать с индикаторами? Они у меня самые обычные, семисегментные, красные, общий катод, типа TOS-5161AMR-N, высота знакоместа 14 мм.
Заголовок сообщения: Re: Atmega8 + MAX7219 не работает SPI
Добавлено: Пт дек 18, 2020 07:55:56
Если по отдельности (с тестовой прошивкой), все модули работают нормально, а в связке с Вашей программой управления начинают глючить – то засада в Вашей программе… а вообще при необходимости больших цифр/букв используют матрицы 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 надо несколько поаккуратнее обращаться - учитываем их коротенькую активацию на момент запуска бутлоадера при включении платки!
У Вас случаем не адуринка? Там с контактами ISP надо несколько поаккуратнее обращаться - учитываем их коротенькую активацию на момент запуска бутлоадера при включении платки!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения