Доброго днях. Uart, Avr, ацп.
Сообщения в терминал приходят кракозябрами.
В коде есть сообщение которое отправляется в основном цикле(бесконечно, пока не сработало ни одно условие, после завершения условия сообщение продолжает отправлятся), есть кнопочка которая обрабатывает нажатие и отправляет сообщение, есть ацп при совпадении с условием также отправляется сообшение.
Так вот, если включить и выключить контроллер подключить его к терминалу, то в терминал сыпется мусор, стоит нажать и отжать кнопочку(сообщение по нажатию кнопочки приходи нормально) или срабатывает условие по ацп, то потом сообщение из основного цикла начинает приходить как положено.
Если после инициализации уарта ,ацп и разрешения прерываний, перед основным циклом поставить задержку в 8сек!!(меньше не помогает) то все норм работает.
Куда капнуть?
Последний раз редактировалось mastech Чт окт 24, 2019 09:49:03, всего редактировалось 1 раз.
[uquote="NStorm",url="/forum/viewtopic.php?p=3723880#p3723880"]Какова частота CPU, от чего тактируется, и какова скорость (baudrate) UART'а?[/uquote]
Частота 8МГц от внутренний RC и 9600 скорость.
Добавлено after 6 minutes 20 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3723828#p3723828"]не видя кода, умнее ничего не посоветую [/uquote]
Код только вечером смогу скинуть. Там собственно нет ничего такого. Библиотека Uarta, настройка Ацп и пара условий в майне.
Автор библиотечки уарта http://homepage.hispeed.ch/peterfleury/index.html
Добавлено after 1 hour 58 minutes 6 seconds:
[uquote="NStorm",url="/forum/viewtopic.php?p=3723880#p3723880"]Какова частота CPU, от чего тактируется, и какова скорость (baudrate) UART'а?[/uquote]
Думаете имеет смысл ставить кварц на 7.3728Мгц(покупал когда-то именно под уарт)?
Просто в других проектах использовал эту же библиотеку и внутренний рц генератор и все отправлялось (но там конечно были отдельные посылки).
Да не, на 9600 должно нормально работать. Просто несколько раз недавно встречал, что на 115200 пытаются заставить работать с 8МГц, а там слишком большая погрешность и процент ошибок. Дело не в этом значит. Наверное дальше код действительно надо посмотреть.
Поставил кварц на 7,372Мгц работать стало стабильнее, в самом начале немного мусора, но потом само выравнивается.
В коде есть пара функций дисплея дублируют данные на экран 16х2,(замедляют немного) так вот если их убрать то валится мусор пока неизменятся значения в АЦП.
Пробовал скорости 9600, 19200, 57600.
Код во вложении.
Когда работаешь с цифровыми микросхемами, интерфейсами, в первую очередь нужно понимать как все это работает на физическом и программном уровнях. А также нужно иметь под рукой нужные инструменты. Частотомер и осциллограф. Хотя бы осциллограф. В таких случаях очень важны планирование и методичность. Проекты пилить и делать кусочками. Отлаживать каждый кусочек. И только после того, когда отлажены все кусочки, также методично собирать их в кучу.
Первое что меня смущает, 8 секундная задержка.
Проверяем монтаж схемы. Затем проверяем работу кварцевого генератора. Снята ли галочка 8 div.
Пины RX TX. Активный уровень - низкий. Это означает, что когда нет приема передачи, на пинах должен быть высокий уровень. Убедиться, что пины настроены соответственно, на вход-выход. Подтягивающие резисторы на плюс питания. От 4,7 кОм до 10 кОм.
Когда убедились, что кварц стабильно работает (а могут быть случаи, что кварцы неисправны), нужной ли емкости конденсаторы, не дефектны ли (лично у меня были случаи перегрева паяльником, микротрещины). То есть, нужно еще иметь и прибор который позволяет измерять конденсаторы маленькой емкости. После этого делаем тестовый проект или урезаем проект, делаем только передачу тестовых посылок. Затем прием посылок.
То есть, нужно не только иметь нужные инструменты под руками, но и создавать нужные программные инструменты (понимается: для МК). Тестовые программы, тестовые закладки.
Освоить симулятор AVR-Studio. Здесь много поклонников Proteus, лично я им не пользуюсь. Как и аппаратными отладчиками. Не буду спорить, что при их наличии время экономится, но я всегда исхожу из того, что хорошо знаю архитектуру МК, как работают нужные мне интерфейсы, и четко представляю, как работает программа.
И только после этого копать дальше.
[uquote="Dimon456",url="/forum/viewtopic.php?p=3724736#p3724736"]Demiurg Программная ошибка в функции itoa().
Может с частотомером и осциллографом разберетесь или подсказать?[/uquote]
А голова на что? Шапку носить и кашу туда есть?
[uquote="Dimon456",url="/forum/viewtopic.php?p=3725172#p3725172"]Логично, удалите все остальное и оставьте только первое условие (кстати в нем то же ошибка) - будет работать?[/uquote]
Удалил из main все (конец строки и количество итераций цикла - эти ошибки можно исключить), в основном цикле оставил только отправку строки uart_puts("test") и возврат каретки uart_putc('\r') и получаем при включении кракозябры пока не нажмешь ресет.
Может так и должно быть?
Сделайте так: минимум обвязки на МК. Кварц, преобразователь ТТЛ-UART. Тестовая программа минимальна. Только отправка 1 - символа, скажем, каждые 100-500 мс. Пропишите внаглую код символа, шестнадцатеричным кодом. Скажем, пусть это будет буква "А".
[uquote="mastech",url="/forum/viewtopic.php?p=3726435#p3726435"]Удалил из main все (конец строки и количество итераций цикла - эти ошибки можно исключить), в основном цикле оставил только отправку строки uart_puts("test") и возврат каретки uart_putc('\r') и получаем при включении кракозябры пока не нажмешь ресет.
Может так и должно быть?[/uquote]
В непрерывном потоке асинхронных символов, терминал может "зацепиться" не за старт-бит, а за другой перепад уровня. Т.е. терминал может неправильно определить границу символов.
[uquote="NStorm",url="/forum/viewtopic.php?p=3726533#p3726533"]Что за терминал, что за преобразователь?[/uquote]
Плата pinboard2 преобразователь там ft2232d
Терминалы Terminal b1.9 by br@y и Termite 3.4.
Добавлено after 2 minutes 3 seconds:
[uquote="viiv",url="/forum/viewtopic.php?p=3726581#p3726581"]В непрерывном потоке асинхронных символов, терминал может "зацепиться" не за старт-бит, а за другой перепад уровня. Т.е. терминал может неправильно определить границу символов.
[uquote="viiv",url="/forum/viewtopic.php?p=3726581#p3726581"]В непрерывном потоке асинхронных символов, терминал может "зацепиться" не за старт-бит, а за другой перепад уровня.[/uquote]
В этом случае поток действительно должен быть непрерывным - чтобы пауз даже в пару байт не было...
Но такие косяки, даже если поднять скорость нельзя, легко исправить, анализируя состояние DTR!
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ