с исходными ногами data в протеусе все работает нормально, а если изменить схему и определение ног в lcd_lib.h, то выходят косяки, то протеус ругается, Attepmet to read after witing a single nibble, то при несколько другом расположении ног, просто крякозябры выходят.
прилагаю проекты в протеусе и WinAVR
Немного промазал, извините Доброго времени суток!
Занялся освоением контроллеров и решил сделать термометор на TINY2313 и WH0802A. Написал програмулину и работает, но кривовато отображение. При работе заголовок выводится в 2-х строках в дальнейшем все отображение только в верхней строке (lcd_goto(0,1)-не работает). Также заметил, что если между выводом между 1 и 2 строкой вставить любую строку с кодом, то вывод второй строки будет в первой. Фьюзы-заводские. Пробовал с WH1202A тоже... Програмирую Pony prog.
Вот часть кода на Си:
/****Вывод заставки о производителе****/
lcd_gotoxy(0,0);
lcd_putsf("Thermo");
lcd_gotoxy(0,1);
lcd_putsf("Alex");
delay_ms(1500);
lcd_clear();
if(ds1820_devices==0)
{
lcd_putsf("Nosensor");
delay_ms(1000);
}
else
{
/**Выводим информацию о найденных датчиках**/
lcd_gotoxy(0,0);
lcd_putsf("Find:");
show(ds1820_devices);
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf("Devices");
delay_ms(1000);
lcd_clear();
Заставка-Ок! А вот вывод кол-во датчиков и далее, только в верхней строке Если закоментить строки:
show(ds1820_devices);
delay_ms(1000);
то выводятся 2 строки С Любой из этих строк вывод накладывается в первой строке.
Ваше мнение в чем проблемма?
Уважаемые радиокоты
Который день мучаюсь с МЭЛТ MT-16S2H-2YLG. Ну не хочет она инициализироваться в 4-х битном режиме.
Что здесь не так
Инициализация по датишу, а на выходе - ничего. Проект в CV.
МЭЛТ MT-16S2H-2YLG - весчь практически не убиваемая, работает даже после подачи 12В, если не работает ищи косяки в программе. Если все правильно - прекрасно работает и в 4-х битном и в 8-и.
Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?
fenakit писал(а):Просмотрел документацию на ЖКИ MT-16S2S. Там описана возможность работы по 3-х и 4-х проводном последовательном интерфейсе. Пробовал ли кто-нибудь работать с этими интерфейсами?
М.ПРЕДКО Справочник по PIC микроконтроллерам с.250-258 приведена схема и программа двухпроводного интерфейса от МК до ЖКИ с использованием промежуточного сдвигового регистра...
«Просите, и дано будет вам; ищите, и найдете; стучите, и отворят вам; ибо всякий просящий получает, и ищущий находит, и стучащему отворят». Матф.гл. 7, ст. 7—8
сам не пробовал. думаю должно завестись с первого раза. Посмотрев на инициализацию 3-х и 4-х проводного интерфейса понял, что это бесполезная вещь. При инициализации используются 6 ног индикатора (DB0... DB5), а для управления индикатором уже из последовательного режима используется 3 ноги, но не те что были при инициализации, а DB5...DB7!!! ппц бред... "МЭЛТ - Хотели как лучше, получилось как всегда!"
У меня проблема с выводом кириллических символов, но не обычная. Компилирую winavr2010 в среде Code::Blocks. LCD рабочий, кириллические символы выводит если выводить их через код, а если напрямую, то не получается. Причем некоторые чисто кириллические символы выводит верно. Ну вот пример:
unsigned char CharToCode(char C)
{
switch(C)
{
case 'А' : return (0x41);
case 'Б' : return (0xa0);
case 'В' : return (0x42);
case 'Г' : return (0xa1);
..................
..................
..................
..................
case 'ш' : return (0xc1);
case 'щ' : return (0xe6);
case 'ъ' : return (0xc2);
case 'ы' : return (0xc3);
case 'ь' : return (0xc4);
case 'э' : return (0xc5);
case 'ю' : return (0xc6);
case 'я' : return (0xc7);
}
return ( 0x80 );
}
Так вот если бы Code::Blocks/Winavr видел при компиляции кириллицу, то и выводил бы верно. Пробова в родном блокноте Winavr, выдавал просто каракули вместо пробелов.
В общем как я понимаю - проблема в том, что не воспринимаются некоторые символы кириллицы именно при компиляции, а некоторые воспринимаются. сама библиотека вроде рабочая и с английскими буквами проблем нет. Менял в Code::Blocks во вкладке settings -> editor опцию encoding на KOI-8R и UTF8, не помогло.
Bobrik
Кодировка символов для матричных индикаторов отличается от кодировок ASCII, ANSI и др. принятых в компьютерах. Поэтому если писать напрямую, то на экран будет выводится всякий бред(т.к. номера символов не совпадут). Или у вас сам редактор не понимает русский язык?
Насчет функции CharToCode(char C). Написана она крайне не оптимально и будет кушать много лишнего кода. Лучше ее записать в виде массива, т.е.:
CharToCode[256]={0,1,2,....,0x41,0xa0...};
А потом выводить символы:
lcd_putc(CharToCode['ю']);
Можно записать функцию, выводящую строки с перекодировкой:
void lcd_putsf(char flash *str)
{
char k;
while (k=*str++)
lcd_putc(CharToCode[k]);
}
И обращаться к ней так:
lcd_putsf("Здравствуй мир!");
Купил индикатор Winstar WH1602D-YGH-CTK#, он со светодиодной подсветкой. До этого работал с ЖКИ без подсветок. Смотрел документацию, но мне так и не стало ясно как правильно включать подсветку: напрямую подавать 5V на анод-катод или через гасящий резистор?
Товарисчи, скажите у кого-нибудь работает модель ЖКИ в Proteus 7.7 по 4-х битной шине? А то уж какой день мучаюсь, и подозреваю, что с моделью что-то не то. По 8-ми битной шине все нормально.
Если поставить интегрирующую цепочку на выход ШИМ, то получим напряжение, а не импульсы - а это то что нужно для управления контрастностью. Сам не пробовал, но мысли тоже были по этому поводу. Думаю скоро попробовать.
короче такие дела. Контроллер ПИК18Ф4550. ЖКИ - 2х16 на ks0066u.
Вот прога... Писал битовыми командами, т.к. мне так понятнее. Писал по даташиту. Иначе запутался бы. 4-х битный интерфейс.
Прошиваю этой инициализацией и ничего... На ЖКИ как были квадратики так и остались. Задержка перед каждой пачком команд 4мс. Проверял в стопвотче.
В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код
;*********************************
initialization_LCD;(см. даташит на КS0066U, стр.26)
movlw D'200'
movwf count3
dec
nop
nop
decfsz count3,1
goto dec
call delay_4ms; *power on delay
;Function set
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *2-line mode
bcf lcd_D,DB6; *LCD off
movlw D'200'
movwf count3
dec1
nop
nop
decfsz count3,1
goto dec1
call delay_4ms;wait, т.к. ЖКИ тормознутая падла
;Display ON/OFF control
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bsf lcd_D,DB7_busy_flag; *bit set
bsf lcd_D,DB6; *LCD on
bsf lcd_C,DB5; *cursor on
bsf lcd_C,DB4; *blink on
movlw D'200'
movwf count3
dec2
nop
nop
decfsz count3,1
goto dec2
call delay_4ms;wait
;Display clear
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bcf lcd_D,DB6; *bit set
bcf lcd_C,DB5; *bit set
bcf lcd_C,DB4; *bit set
movlw D'200'
movwf count3
dec3
nop
nop
decfsz count3,1
goto dec3
call delay_4ms;wait
;Entry Mode Set
bcf lcd_D,RS; *bit set
bcf lcd_C,RW; *bit set
bcf lcd_D,DB7_busy_flag; *bit set
bcf lcd_D,DB6; *bit set
bsf lcd_C,DB5; *increment mode
bcf lcd_C,DB4; *entire shift on
;Initialization end
Roman Venom писал(а):В общем, мож кто подскажет где я протупил... Зараннее благодарю тех, кто будет читать мой ламерский код
Мля, это пипец а не код. Где хотя бы комменты?
Могу посоветовать давать самую первую команду на инициализацию два раза (с паузой, естессно). Мне помогло.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]