Микроконтроллеры для начинающих "USART часть 2"
Вставка
- Опубліковано 9 січ 2025
- Программирование микроконтроллеров avr для начинающих. Работа USART на практике. Передача данных между микроконтроллерами avr, одного байта и пакет данных (массива)
Программы для микроконтроллеров - atmel-programme...
USART часть 1 - • Программирование микро...
Р.С Есть оговорки, записывал все ночью, так что сильно не пинайте :)
Помощь каналу: U203362127962, Z188974325606
Спасибо за уроки.
Надеюсь скоро понадобятся.
Продолжайте в том же духе!
Вы единственный у кого есть такой ценный материал для начинающих программистов!
Спасибо! Вы наконец то вернулись! С нетерпением жду Ваших видео!
Спасибо. Смотрю Ваше видео и успокаиваю нервы. (Это помимо восприятия материала)
Спасибо за видеоуроки! Может кому будет полезно:
Писал 9битный UART(Того требует протокол, по которому общаются устройства). Отправка у меня выполняется отдельно в функции, которая принимает в параметрах, что отправлять(байт, ну не совсем байт ведь это 9 бит).
Посылка отправлялось как в коде в видео, в прерывании UDRE вызывалась моя функция, но выполнение не успевало дойти до инкремента счетчика в итоге слались одни и те же 9 бит. :)
Решение:
ISR(USART2_UDRE_vect){
if(I
Честно скажу это лучшее за 3 дня поисков. Этот Ардуин мня бесил на протяжении всех трех дней. как только я начинаю искать помощь так сразу ардуин. Я уверен что если спросить хотя бы 10 случайных ардуинщика как происходит процесс передачи данных 9 из них тут же как по волшебству превращаются в баранов. Готовые библиотеки и скетчи... это все равно тоже что носить в трусах чужое г...о. (сори за сравнение) просто они действительно собрали "ЛЕГО" и думают что схемотехники и мало того забивают все поиски этим ге. в общем спасибо дядька! Выручил даже очень! Осталось только все переварить в своем котле и заработать первый миллион! Всех тебе благ и жизни длинной.
Добрый день! Уроки Супер! Не могли бы вы сделать еще урок по работе с USART. Хотелось бы разобраться как принимать и обрабатывать строки, например от gps приемника. Спасибо!
Nick M Именно с gpc в врятли, я не работал с ним не было надобности.
Александр Писанец Ну можно и с gsm модулями. Главное принцип понять, как делать.
Очень хороший урок!!!! Спасибо!!! Особенно меня удевила команда sizeof!!! раньше возникали проблемы, не зная этой команды
Все ООочень просто! Я не программист и я чуть не рихнулся. Но за видео лайк. Супер
Спасибо!
Больше уроков хороших и разных!!!
а как принять массив?
Такой вопрос я из терминала отправляю число в десятичном виде например 1 но в регистре UDR попадает уже 0х31 то есть в шестнадцатеричном виде как его привести к десятичному виду?
Огромное спасибо Вам. Материал разжеван.
Александр спасибо за ваши уроки.
Очень нужен урок по работе с SSI интерфейсом. Самому разобраться не получается. Требуется для подключения абсолютного энкодера AS5040.
С данным интерфейсом не работал. Надо даташит изучить, а там посмотрим. Вовсяком случае сразу я не помогу, вы уж извините
Александр Писанец Понимаю, спасибо.
Здравствуйте Александр!
Есть предложения на новые темы. Сейчяс самостоятельно пытаюсь разобраться, но если вас не затруднит, то если можно:
* Как работает ватч дог , что это? (Watchdog)
* Sleep моды. Kak можно усыпить и разбудить чип? (Power Management and Sleep Modes)
* Спай. (SPI - Serial Peripheral Interface)
* 2 wire Сериал итнерфасе. (2-wire Serial Interface)
* Бут лодер. Как он работает и что ето? (Boot Loader Support)
* Селф программинг флаш. (Read-While-Write Self-Programming)
И думаю было бы удобно (но это так, только предложение ) для новых посетителей иметь хронологию например номер урока, основное nazvanije и тема урока.
01_МикроконтроллерыAVR_Прерывания_урок_1
Тогда будет легче новым посетителям разобраться с чего начать и если тема уже обсуждалась, k примеру 7 сегмент ЛЕД, то надо вернуться или наоборот ещё будет. В ютубе можно переименовывать видео и ставить в плай листы . Но это только мнение, а в общем всё просто супер. Надеюсь, что благодаря вам часть будущих да и нынешних разработчиков начнут делать более качественные товары.
Спасибо что вернулись :)
Здравствуйте. Наоборот, я таким пожеланиям по улучшению только рад. Данный канал и создавался для начинающих. Поэтому что-то я из ваших пожеланий учту. Что касается уроков, то все упирается во время. Приносило бы мне это деньги :), я тратил куда дольше времени, темболее, что мне это нравится. А так, приходится довольствоваться мизером по времени. Также, мне очень интересно знать какие темы для вас интересны.
Исходя из ваших пожеланий, я буду стараться делать уроки.
На счёт заработка, то можно попробовать создать отдельную домашнюю страничку и организовать донатион (donation) (тоесть денежные переводы кому не жалко ). Есть проекты которые с этого чтото получают, глядишь и у вас пошлобы. Также организовать продажу DVD дисков по интернету или скачать весь курс с вашей страницы через SMS или прямым переводом . А также организовать учебные курсы на заказ. Какие темы обсуждаются, сколько стоит и как организовать курс. У нас фирма порой тратить большие деньги чтобы отправить нас на какие нибуть бестолковые недельные курсы. У вас курсы реально толковые так что думаю и шансов больше.
Успехов :)
На счёт частных курсов, обязательно надо засветиться в гугле и по возможности рекламироваться на разных пресс сайтов которые пишуть статьи на эти темы. Тоесть написать статью а в конце упомянуть про курсы и прочее, где найти... У вас очень хорошо получаются интро в уроки. С ними можно делать короткую рекламу перед уроком. Там 5 секунд интро вроде как рекламма, чтоб и интересно и красиво было.
Я знаю, уже разместил. Далеко не все сайты дают возможность рекламировать свой ресурс.
В самом конце видео вы рассказали о определении длинны массива, вот только у вас размер массива в конце определяется не того, что выводится. Предположим, мы задали массив через указатель, но почему-то размер массива через указатель определяется не верно. Как бы это решить, а то все остальное вроде как работает отлично.
***
Проверяю работу так : в протеусе шлю данные в 1-ый(виртуальный) ком порт, в котором данные перенаправляются (с помощью настройки программы виртуального ком-порта) на 2-ой(виртуальный) ком порт, с которого в этом же протеусе я считываю данные.
Увы, данный способ работает только с фиксированными размерами массивами. В вашем случае я не знаю способа определение размера, так сказать плавающего масcива, я бы сделал отдельно переменную в которой находится размер массива(естественно вы вами указываете значение).
Спасибо за USART, в протеусе все работает. Александр, а для синхронного режима от приемника поступает сигнал передатчику на начало отправки?
Отличные уроки!
Помигать светодиодом с помощью _delay_ms() -обычный человек
Помигать светодиодом с помощью таймера -мега мозг.
Помигать светодиодом с помощью uart - сверхразум)
Добрый день! Уроки Супер! Не могли бы вы сделать урок по управлению lcd c контроллером HD44780, или как создать для него библиотеку.
Спасибо!
Здравствуйте. Вы далеко не первый кто просит. Я готовлю материал по данной теме. Та как я не использую готовых библиотек, то нужно время все подготовить и объяснить. А это занимает не мало времени.
Александр Писанец: скажите пожалуйста, а принимать пакет данных как ?
Уважаемый Александр Писанец у Вас на видео(5:47) показана отладочная плата. с виду самодельная, Вы не поделитесь схемой и печаткой. если конечно у Вас осталось от неё схемка и схема печатки. Спасибо за ваши уроки.! ( моя почта zoom.85.vc@gmail.com)
Александр когда по USART передается поток (10байт) после каждого 1 байта передается стоповый бит или после всего пакета. хотелось бы понять физику, в 1wire и в I2S понимаю, (ведь буфер фактически 1 байт)
Никола Пшоня Стоповый в конце посылки.
С длиной передаваемых данных не все точно.
Даже если указателю Р присвоить адрес второго массива и переменной Temp его размер, то данные будут переданы с 4го по 10й байты.
Условие передачи данных нужно изменить.
Валентин Береговий Спасибо. Посмотрю
Александр Писанец Вам за уроки спасибо!
Александр а какое расстояние между двумя мегами можно сделать по UART PX TX провод витая пара? Если пробовали. Мне надо 32м вынести пульт (буду пробовать- но не зная зарание продавят меги или нет)Спасибо.
.
+Никола Пшоня Я пробовал витой парой на 160м нормально работает на скорости 9600.
Спасибо вы меня обрадовали.
Александр Писанец: Очень ждем курс по STM
(UBRRL) = 51 ?? почему ? сколько у него максимальное значение ?для чего он надо ?
Доброго дня! Скажите а как синхронизировать массивы? Есть 2 массива по 20 значений каждый и чтобы ячейка masiv1 [5] передавалась и записывалась в ячейку masiv2[5], а ячейка masiv1[18] в masiv2 [18] . На практике получается что контролеры стартуют по разному даже если питаются от одного источника и значения массива смещаются произвольно.
Спасибо!
+Jack Sparrow Вы сами ответили на свой вопрос. Микроконтроллер выступает в качестве мастера. Устанавливает единицу на порту, для синхронизации подчиненному микроконтроллеру. Ну что то вроде такого
Здравствуйте, Александр. Можно ли подключать одновременно usart
и spi устройства к одному микроконтроллеру для коммуникации между собой (т.е. микроконтроллер будет выступать в своем роде конвертером) ? Например к Atmega32. Задача такова, что с spi устройства будут приходить данные (постоянно). По запросу устройства usart нужно будет передавать последние принятые данные от spi к usart. Не будет ли это многовато для микроконтроллера?
Nik RU42 Здравствуйте. Вполне все реально, при грамотном написании программы.
В даташите имена векторов не имеют окончания _vect и _num как это предлогает Visual studio. Вопрос. Какая разница между этими именами?
К примеру:
USART_UDRE_vect
USART_UDRE_vect_num
USART_UDRE
?
Я и сам не знаю, не разберался.
Google говорит, что это имена прерывания и вектора. Например:
USART_РХС - это имя самого прерывания
USART_РХС_vect - это имя вектора.
Ну и ладно, это не суть. Я думал может сдесь есть какоетo важное отличае.
www.avrfreaks.net/index.php?name=PNphpBB2&file=printview&t=48188
Александр, не подскажите по какой причине в регистр UDR не производится запись? В режиме отладки прошагиваю код, а мне показывает, что регистр UDR пуст даже после команды записи числа 2. В чём может быть причина?
#include
#include
int main(void)
{
UBRRH = 0;
UBRRL = 25;
UCSRB|=(1
Скорей всего оптимизация причина. Компелятор считает что данное действие бесмысленое. Попробуйте создать функцию и там запись производить.
Не помогло. Пробовал даже на всех уровнях оптимизации, и всё равно ничего не помогает((
void USART_SENT(unsigned char b)
{
UDR = b;
}
.
.
.
while(1)
{
USART_SENT(2);
}
Спасибо! Вопросик!! Так связать 2 микр-ра можно и по USART и по SPI. Так а какой вариант лучше?? Если расстояние между мик-рами пол-метра(Атм8 измеряет, а Атм16 связана с ЛСД выводит данные) Как лучше их связать??
Оба варианта подходят, но проще по USART
У меня при обработке прерывания ошибку выдает во время сборки Atmel Studio 7
ISR (USART_UDRE_vect){
UDR0 = Data;
UCSR0A &= ~(1
Вуберите цифру "нуль" и букву "е" в записи udr, ucsra
Aleksandr Bengard в новой студии регистры именно так пишутся
Aleksandr Bengard проблема уже решилась, я просто не подключил библиотеку прерываний
Можно ли использовать МК без кварца для передачи данных на ПК?Насколько использование внутреннего резонатора повлияет на точность принятых комп данных?
+Ievgen Od Можно, я использовал 9600 бит, больше уже начинают ошибки.
просто у меня ошибки на 9600 бит.Например отправляю цифру "2" ,а комп получает 2...мусор...мусор..2.... и т.д. Думал ошибки из-за отсутствия кварца,но наверное проблема в коде.
Кварц точно лишним не будет
а как передать (или принять) в USART переменную x = 65 в виде 65 а не в виде символа "A" ASCII??
+Ingvar orlov Так и передаете 65
рано я начал танцевать... вот посмотрите.... во первых библиотека на подсвечена а во вторых вот такие ошики передает. если проблема в объявлении то как ее правильно обвить? а если в самой библиотеке то где можно скачать такую?
undefined symbol 'USART_RXC_vect'
undefined symbol 'USART_UDRE_vect'
undefined symbol 'asm'
undefined symbol 'asm'
библиотека подключена как: #include
#include добавите если нет такой
без изменений. все те же ошибки
полетело
#include
В этом видео нет инициализации портов tx на выход rx на вход почему? И в даташите на мк указаны екземплы для юартов но ни они ни ваши варианты не работают
Да, порты желательно переопределить, хотя и так работает но это не правильно. Пример рабочий, и был естественно опробован на мк. Опешите что именно у вас не получается постараюсь помочь.
Я схематически ошибся но во код настройки частоты #define FOSC 4000000 // Clock Speed
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1 я адекватно вижу данные на частоте 2400 Гц
например мне нужна 9600 я меняю код на #define FOSC 2000000 и я уже вижу данные на частоте 4800 ГЦ то есть если я установлю FOSC 1000000 то стоило ожидать данных на частоте 9600 но идут кракозябры. Почему так? Как вы понимаете я не знаю/не умею определить действительную FOSC можно ли открыть эту тему. Потому как фузы я прошиваю на внутрений 8МГц , а тактирование юарта UBRR0H = (unsigned char)(MYUBRR>>8); UBRR0L = (unsigned char)MYUBRR; Использую ATmega48PA
На ATmega8A це працює а ось на атмега 48 частота юарта в нижча в 4 рази
UBRR почему 51 ?????
Подскажите пожалуйста! почему в Протэусе когда подключаю virtual terminal при отправки на него у меня одни буква АААА любое число там буквы АА,
А вот если напишу так
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
#define BAUD 9600
#define UBRR_VAL F_CPU/16/BAUD-1
----------------------------------------------------------
usart_init (UBRR_VAL); вызову
----------------------------------------
void usart_init(unsigned int speed)
{
UBRRH=(unsigned char)(speed>>8);
UBRRL=(unsigned char) speed;
}
////////////////////////////////
вот так в терминал отправляю код все норм работает почему ?? так ??
В протэусе не работал.
Александр Писанец все разобрался) спс вам)
вот есть еще вопрос)
UBRRL = 25;
UCSRB |=(1
сколько есть интерфейсов и каких?спасибо заранее!
В atmege16 - USART, I2C, SPI, 3 таймера, 10 битный АЦП, компаратор. и т.д
У меня STK500 как мне дебажить не на симуляторе а на железе.
Насколько я знаю STK500 это отладочный модуль с интегрированным программатором, но без возможности отладки.
Уважаемый Александр куда можно отправлять нашу благодарность Вам
Спасибо конечно. Я очень сильно сомневаюсь, что какие-то деньги будут :), хотя поживем увидим. В разделе сведения на канале кошелек.
А кроме веб мани ище както можно помочь каналу? Нет у меня там кошелька
ой гоню) 25 )
С помощью числа задается скорость передачи данных. В уроке все это есть.
Александр Писанец нету,или я не нашел ,число от 0 до ?
Обращаюсь ко всем ценителям уроков Александра Писанец! Я предлагаю скинуть гривен по 50 автору ето будет нашей благодарностью автору и стимулом для продолжения ево уроков ! Я думаю с нас никто не обеднеет если скинет полтиник а автору будет приятно и судя по количеству подпищиков нормальные деньги если конечно Вам не жалко