Программирование МК AVR. Урок 12. LCD индикатор 16x2. Часть 4

  Рет қаралды 16,731

narod stream

narod stream

Күн бұрын

Пікірлер: 54
@DrargonsM
@DrargonsM 9 жыл бұрын
Сериал про программирование!!! лайк
@Павел-р6д9н
@Павел-р6д9н 6 жыл бұрын
Есть предложение скидывать код к каждому уроку - будет удобно сверяться
@Avonavi232
@Avonavi232 5 жыл бұрын
Привет из 2019. У меня тоже не с первого раза завелось. в итоге проблема была в связанности кода и железа. Обратите внимание на строчку "hc=c>>4;" если выводы D4-D7 дисплея подключены не к Px4-Px7, то эта строчка будет иной, либо не будет вообще. Например, я подключил D4-D7 к выводам PA0-PA3. Поэтому, чтобы передать полбайта, мне не нужно ничего сдвигать: LCD_PORT |= (0b00001111 & halfbyte); моя полная функция отправки полубайта выглядит так: void writeLcdHalfbyte(uint8_t halfbyte){ LCD_PORT = (LCD_PIN & 0b11110000) | (1
@mykhailomorhal2181
@mykhailomorhal2181 7 жыл бұрын
спасибо за ваш труд)
@borisboris1308
@borisboris1308 4 жыл бұрын
С начала не понял, а потом как понял, так сразу спасибо автору)) Хотя предыдущая строка некорректна, спасибо должно быть не зависимо от понял или ещё что либо.
@liolikbolek5780
@liolikbolek5780 6 жыл бұрын
каой-то я .., пялился в даташит из урока, где инициализация ничего не понял, без Вашего пояснения ничего бы не сделал сам. Хотя попался другой даташит от Winstar - там все понятно.
@СтаниславРумянцев-ы9ь
@СтаниславРумянцев-ы9ь 9 жыл бұрын
У меня собралось только после такого варианта. void sendbyte (unsigned char c,unsigned char mode) { if (mode==0) { rs0; } else { rs1; } unsigned char hc=0; hc=c>>4; sendhalfbyte(hc); sendhalfbyte(c); }
@D._-Porcupine-_.
@D._-Porcupine-_. 8 жыл бұрын
В мене тоже. І для чого обнуляти окремо hc? можна ж відразу - unsigned char hc = (c>>4);
@ЛПХсНулЯ-и1л
@ЛПХсНулЯ-и1л 8 жыл бұрын
У меня то же только вот так собралось
@vik1379
@vik1379 5 жыл бұрын
А у меня: void sendbyte(unsigned char c, unsigned char mode) { if (mode==0) rs0 // Без ; !!!!!!!!!!!!!!!!! else rs1; unsigned char hc=0; hc=c>>4; sendhalfbyte(hc); sendhalfbyte(c); }
@lexa8527
@lexa8527 4 жыл бұрын
Спасибо большое, из 2020 года.
@ДанилаДанила-э8с
@ДанилаДанила-э8с 3 жыл бұрын
та же штука из 10.2021)
@alexapod
@alexapod 8 жыл бұрын
Большая просьба выкладывать ссылки на документацию и даташиты.
@narodstream552
@narodstream552 8 жыл бұрын
+Александр Подгузов Хорошо. Я в принципе последнее время так и делаю. Просто иногда бывает где то в завалявшихся папках найдешь, а где взял уже не помню)
@ДанилаДанила-э8с
@ДанилаДанила-э8с 3 жыл бұрын
сам бы я фик заставил работать этот дисплей)
@Serious_Sam
@Serious_Sam 2 жыл бұрын
Спасибо! А у меня компилятор после if не просит точку с запятой и, все ок было без объявления позиции.
@sergeisavin8626
@sergeisavin8626 6 жыл бұрын
Добрый день. Скажите, пожалуйста, в чем может быть проблема: собрал схему этого урока - все четко скомпилироволось и отработало в протеусе, но на реальном железе никак не получается. Проводов не так много чтоб ошибиться. Дисплей подключен с резистором для регулировки контраста. Подозреваю, что где-то как-то сам или лцд или атмега8 бушлатит. Со фьюзами не колдовал ни разу и не знаю как. Может тут дело в них?
@AVRshik
@AVRshik 7 жыл бұрын
У меня AVRStudio4 без " ; " после rs1 и без функции "setpos" скомпилировала без ошибок, и в проетус вывела все сразу на экранчик, как раз таки когда после rs1 ставлю " ; ", компилироваться не хочет, выдает ошибку.
@mcvladoc8818
@mcvladoc8818 4 жыл бұрын
+++
@DenystheMenace11
@DenystheMenace11 9 жыл бұрын
интересно)
@narodstream552
@narodstream552 6 жыл бұрын
Комментарий удалил, так как там ссылка, но тем не менее отвечу на него. "Подскажите как выводить русские символы? Дисплей их поддерживает. Марка дисплея: MT-16S2R-2FLB-3V0. Куплен тут: ссылка" Русские символы (правильнее кириллицу) выводить на Ваш дисплей, по-моему, очень легко, просто использовать кодировку кириллицы ASCII. Но так как у меня такого дисплея нет, то проверить и уточнить не могу. А на общедоступных китайских это делается посредством использования памяти CGRAM. Создаёте там символы (доступно только 8 вроде) и используете. Больше не создадите, поэтому я париться не стал и пользуюсь английскими, так как проекты все некоммерческие и обязанности использовать в них национальную кодировку нет. А ссылки постарайтесь в комментариях не постить. Это не приветствуется политикой сообщества KZbin. Рисковать каналом не хочу, поэтому такие комментарии будут удаляться, да и нет смысла рисковать, так как владельцы сайтов, к которым ведут эти ссылки, мне ничего не платят.
@a-c.o.s.1806
@a-c.o.s.1806 3 жыл бұрын
Почему на сайте не получается зарегистрироваться?
@sadim98
@sadim98 8 жыл бұрын
У меня дисплей ничего не показывает. Дисплей работает, МК тоже, писал сначала по вашим урокам, не заработало, попробовал скопировать, но это тоже не помогло. Подскажите, пожалуйста, в чём может быть проблема
@narodstream552
@narodstream552 8 жыл бұрын
+Николай Петрищев Живой дисплей или в Протеусе?
@sadim98
@sadim98 8 жыл бұрын
Живой дисплей. В протеусе то всё нормально работает
@narodstream552
@narodstream552 8 жыл бұрын
+Николай Петрищев А резистор на 10 килоом подстроечный подключали? Обычно не работает, когда к 3й ноге напряжение регулируемое не подведено
@sadim98
@sadim98 8 жыл бұрын
Спасибо, я завтра попробую и вам напишу
@sadim98
@sadim98 8 жыл бұрын
Подключил к 3 ноге (V0) резистор на 10кОм, но экран всё-равно показыват пустой экран
@Dmitry_Freeman
@Dmitry_Freeman 7 жыл бұрын
Никак не получается вывести символ на вторую строчку. Когда в коде прописываешь выводить символ на вторую строчку то и на первой ничего не высвечивается. А если только на первой то все работает?
@narodstream552
@narodstream552 7 жыл бұрын
Что-то попутали в коде наверно
@Dmitry_Freeman
@Dmitry_Freeman 7 жыл бұрын
Я тоже так думаю. Но вот ищу ищу и нифига). Вывожу на lcd другими лапками не (D4, D5,D6,D7) а (B0,B1,B2,B3). И вот что получается когда передаю младшую тетраду: void polbyte(unsigned char c) //отправляем пол байта { e1; //устанавливаем линию е на дисплеи в 1 _delay_us(50); PORTB&=0b11110000; // очищаем младшую тетраду байт порта PORTB|=c; //посылаем в порт e0; //устанавливаем линию е на дисплеи в 0 _delay_us(50); } Если так , то мне же не надо сдвигать на 4 в старшую тетраду. А в остальном год точно такой же как и у вас. только вот в протеусе никак не хочет рисовать вторую строчку. Может дело в контроллере использую Attiny13a
@AleksejKirichenko
@AleksejKirichenko 9 жыл бұрын
а у меня по чему-то не высветились две nn в чем проблема где искать ошибку
@narodstream552
@narodstream552 9 жыл бұрын
+K.A.V MAKAR Напишите в личку в контакте vk.com/id7361273 Попробуем разобраться.
@СергейТарасов-п9и
@СергейТарасов-п9и 8 жыл бұрын
+K.A.V MAKAR у меня тоже не высвечивались символы на дисплее "nm", причина в том, что в предыдущем уроке есть ошибка в коде, в этой строке " PORTD&=00001111; // стираем информацию на информационных входах". Там пропущена "0b". Автор в этом уроке эту ошибку исправил, но не озвучил. по этому код собирается без ошибок, но символы на экран не выводятся.
@narodstream552
@narodstream552 8 жыл бұрын
Попробую добавить попозже подсказку.
@BaronMacaroon
@BaronMacaroon Жыл бұрын
@@СергейТарасов-п9и Большое спасибо! долго вдуплял что же сделал не так и почему это не работало.
@ljlegas
@ljlegas 9 жыл бұрын
можно вопрос! а что с уроком 4? не включается видео!
@narodstream552
@narodstream552 9 жыл бұрын
+legas 2 Простите, теперь всё должно работать. Небольшая техническая заминка.
@kosmos8460
@kosmos8460 3 жыл бұрын
не хочет он с ; точкой запятой компилироватся этот код ?! какую вы ошибку нашли , так и не понял ?!
@ДанилаДанила-э8с
@ДанилаДанила-э8с 3 жыл бұрын
после #define в начале нет запятых? а то у меня были и код не компилировался с ";" после первого if. убрал их и поставил ";" после первого if и только тогда скомпелировалось (не сам придумал, кто то ниже писал)
@СергейЛевашов-г5н
@СергейЛевашов-г5н 7 жыл бұрын
в у меня с (;) в цикле if else выдает ошибку не чего не могу сделать!
@narodstream552
@narodstream552 7 жыл бұрын
возможно нету точки с запятой.
@СергейЛевашов-г5н
@СергейЛевашов-г5н 7 жыл бұрын
так с с точкой запятой и дает ошибку.. а когда ее нет компилируется нормально
@liolikbolek5780
@liolikbolek5780 7 жыл бұрын
проверьте , где определяется (#define rs1) в конце строки НЕ ДОЛЖНО БЫТЬ точки с запятой.
@ДмитрийСолнцев-й1т
@ДмитрийСолнцев-й1т 6 жыл бұрын
Видео старое, но все же отпишусь тут. Очень хотелось бы увидеть (можно даже отдельными уроками) процесс отладки кода. Как найти ошибку? Более подробное объяснение работы с отладчиком.
@narodstream552
@narodstream552 6 жыл бұрын
Кстати, мне бы тоже хотелось. Так как режим отладки ни одним моим программатором для AVR не поддерживается. На сегодняшний момент существует какой-то очень дорогущий программатор, который поддерживается Atmel Studio 7. Правда не у всех он видится, существуют проблемы с драйверами. Поэтому заказывать себе я такой пока воздержусь.
@ДмитрийСолнцев-й1т
@ДмитрийСолнцев-й1т 6 жыл бұрын
Ну Вы же как то ищите ошибки? Не с первого же раза у Вас все работает, особенно если задача не тривиальная.
@ApalonPSS
@ApalonPSS 8 жыл бұрын
Привет, может кто-то сталкивался как решалсь проблема, собираю этот код и схему урока (LCD) megaios.ru/avr/index12.html в atmelStudio 7 только в одном файле, и компилирую и подключаю в протеусе экран включается но не выводит ничего. После этот же код формирую в протеусе но он просит закомментировать строки с установкой частоты и после все отображается.
@ApalonPSS
@ApalonPSS 8 жыл бұрын
Проблему нашел, в atmel studio у меня стоял не Atmel8 а Atmel328p.
@Владимир_Великий_Русь
@Владимир_Великий_Русь 6 жыл бұрын
не работает вывод информации ни в протеусе ни в железе - Фейк ! Автору дизлайк !
@AleksejKirichenko
@AleksejKirichenko 2 жыл бұрын
у меня с данной точказапятой код не собирается проверьте #define F_CPU 8000000UL #include #include #include //_______________ #define e1 PORTA|= 0b00001000; //установка линии [A1 #define e0 PORTA&= 0b11110111; //установка линии [A0 #define rs1 PORTA|= 0b00000100; //установка линии [rs1 #define rs0 PORTA&= 0b11111011; //установка линии [rs0 //_______________ void port_ini(void) { PORTA = 0x00; DDRA = 0XFF; } //_________________ void sendhalfbyte(unsigned char c) { c 4; sendhalfbyte(hc); sendhalfbyte(c); } //_________________ void setpos (unsigned char x,unsigned char y) { char adress; adress = (0x40*y+x)|0b10000000; sendbyte(adress,0); } //_________________ void sendchar (unsigned char c) { sendbyte(c,1); } //_________________ void LCD_ini(void) { _delay_ms(15);//ждем 15 ms sendhalfbyte(0b00000011); _delay_ms(4);//ждем 4 ms sendhalfbyte(0b00000011); _delay_us(100);//ждем 100 us sendhalfbyte(0b00000011); _delay_ms(1);//ждем 1 ms sendhalfbyte(0b00000010); _delay_ms(1);//ждем 1ms sendbyte(0b00101000,0);//4bit режим две линии [N=1 _delay_ms(1);//ждем 1ms sendbyte(0b00001100,0);//включаем изображение на дисплеи [D=1 курсоры не какие не включаем _delay_ms(1);//ждем 1ms sendbyte(0b00000110,0);//здесь мы заставляе курсор двигаться с права на лево _delay_ms(1);//ждем 1ms } //_________________ int main (void) { port_ini(); LCD_ini(); setpos(0,0); sendchar('n'); sendchar('j'); while(1); { } }
Try this prank with your friends 😂 @karina-kola
00:18
Andrey Grechka
Рет қаралды 9 МЛН
СИНИЙ ИНЕЙ УЖЕ ВЫШЕЛ!❄️
01:01
DO$HIK
Рет қаралды 3,3 МЛН
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН
ОБЯЗАТЕЛЬНО ПОСМОТРИ! ВСË про ESP32 за 2 МИНУТЫ! ТЕЛЕГА arduino_uno_ws #shorts
2:46
ARDUINO Uno WorkShop - канал про Arduino и прочее
Рет қаралды 2,6 М.
Визитка программиста
19:40
Александр Красников
Рет қаралды 221 М.