Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Сб фев 10, 2007 19:01:01

Дело в том, что он даже при инициализации счиает эту ножку еденицей. ХХХХХХХХХХХХХХХХХХХХХХ Для подобных вещей существуют ЛС :evil: мышонок Меня интересует функция setbit может я в ней чтото делаю не так.

ULTER, предупреждаю, для личных просьб и т.п. пользуйся личкой! Уважай Форум! :evil: Ещё одно упоминание в открытом посте сбросить что-то тебе лично на e-mail... :evil: мышонок

Вс фев 11, 2007 19:50:14

выглядят функции так х-порт у
#define SetBit(x,y) (x|=y)
#define ClrBit(x,y) (x&=~y)

какую ножку то пиши конкретнее. Что не так-то щас.

Вт сен 25, 2007 20:08:08

Negor писал(а):Дело такое. Есть у меня жки от Winstar(WH1602B). Подключаю я его к ATTiny2313 по 4-х битной шине. Всё это для получения практических навыков по работе с данными девайсами и МК. После прошивки Tiny2313 кодом, сгенерированным CodeVision я убедился что всё работает и если что не так, то значит ошибки в коде. Далее я взялся за написание прошивки на ассемблере. Инициализация проходит успешно. НЕ удачи начали постигать при выводе информации на индикатор. Теперь вопросы:
-по даташиту(pdf не прилагается из-за большого размера):
Для вывода на индикатор надо пользоватся командами Set CGRAM adress и Set DDRAM adress. Первая должна выводить символ, а вторая устанавливает курсор. Так? Если так, то как можно выводить символы, если их адреса 8 бит а команда CGRAM может содержать только 6? Тоже самое и с Set DDRAM.
И если можно, напишите мне алгоритмы операций. Что нужно для перемещения курсора, для вывода символа и для составления своих
символов?
Даташит


Что то ты напутал это запись в облать дополнительной памяти CGRAM, нужно если свой символ надо нарисовать

Установка адреса действительно
Set DDRAM adress
для 1-й стоки значения 0х80...0х90
для 2-й строки значения 0хс0...0хd0
т.е. выводишь поочерёдно полубайты адресса дёргая E при RS=0 RW=0

запись символа в DDRAM и его естественно отбражение
Write data CG or DDRAM
ну тут значения по таблице
также дёргаешь E записывая полубайты при RS=1 RW=0

В своё время для winstar сам писал библиотеки на Си всё работает, есть функции вывода по русски т.е. пишешь в компиляторе по русски строку в аргументе функции и он по русски и выводит.

на этот кристал есть описалово по русски, если надо то пиши в личку или стучи в асю номер в профиле есть.

Вт фев 26, 2008 14:21:07

Вчера долго мучался, пытаясь подключить WH1602D к ATmega8. точнее я даже не знал, как это делается в принципе.

Благодаря этому форуму, я нашел необходимую информацию, ссылки на документы и в итоге вывел слово "привет" на дисплей!!!

вот мои труды, может пригодятся кому...
http://groversuper.ucoz.ru/publ/2-1-0-2

Ср фев 27, 2008 13:17:06

Люди, которые уже разобрались с этим вопросом, скажите, я все правильно понял и описал?

Пт мар 21, 2008 09:31:13

Grover писал(а):Люди, которые уже разобрались с этим вопросом, скажите, я все правильно понял и описал?


Ты все правильно понял, ели очень надо могу скинуть мою библиотеку для это дистплея, подключать так же как и ты написал в своей статье, но можно там в define указать просто номера выводов и порты мк для подключения LCD, а потом просто юзать функции отправки строк на дисплей. Даже парится не придется...

Пт мар 21, 2008 15:06:01

Если не жалко - выкладывайте архивом в этой теме, например, или, если есть время и желание, присылайте статью. Думаю, многим пригодится. :)

Вс мар 23, 2008 15:55:16

Вот моя библиотека для WH1602D.
Подключение 8 бит. Позаимствовано из статьи Grover

Код:
PORTС
PС0 – E – импульс.
PC1 – RS – команда или данные.
PC2 – R/W – чтение или запись.

PORTD
PD0 – DB0 – данные байт 0
PD1 – DB1 – данные байт 1
PD2 – DB2 – данные байт 2
PD3 – DB3 – данные байт 3
PD4 – DB4 – данные байт 4
PD5 – DB5 – данные байт 5
PD6 – DB6 – данные байт 6
PD7 – DB7 – данные байт 7


Библиотека рассчитана на вывод латиницы...
Но если пошаманить с бубном можно добиться и вывода русских строк...
Так же скидываю прогу для работы с термодатчиком, там я как раз продемонстрировал использование этой библиотеки.
Пользуйтель.... Но не забывайте автора. :))
Вложения
Termo.c
Прога для ATmega8535 + DS18B20
(1.84 KiB) Скачиваний: 1245
wh-lcd.h
Библиотека для WH1602D.
(4.16 KiB) Скачиваний: 1799

Пт мар 28, 2008 08:30:18

Задавался такой вопрос:

Freeman писал(а):Не могу никак вывести русский текст на LCD 16*2 (HY-1602H)
в конторе где его брал написано "руссифицированный", вообщем вот:

http://www.rcscomponents.kiev.ua/module ... 64&cid=224

Похожего типа дисплей уже использовался в статье и отображал русские символы!

Пишу в Код вижн АВР, использую обычный чаровый массив
unsigned char b[8] = "Проверка"; На экран выводит каракули...

Подскажите пожалуйста, где собака зарыта? Или может он в действительности не руссифицированый?

Зарание спасибо!


Ответы и рекомендации такие:

lexmulya писал(а):Если есть мелт то там в прошивке две кодовых страницы, нужно переключиться на вторую и будет счастье без всяких своих перекодировок.


GrigaN писал(а):лови.. я сделал так, как советовал народ.. чуточку доработал.. все работает

char *str; // буферная строковая перменная для вывода

//массив во флэш-памяти для русских символов
flash char Decode2Rus[255-192+1]= {
0x41,0xA0,0x42,0xA1,0xE0,0x45,0xA3,0xA4,
0xA5,0xA6,0x4B,0xA7,0x4D,0x48,0x4F,0xA8,
0x50,0x43,0x54,0xA9,0xAA,0x58,0xE1,0xAB,
0xAC,0xE2,0xAD,0xAE,0xAD,0xAF,0xB0,0xB1,
0x61,0xB2,0xB3,0xB4,0xE3,0x65,0xB6,0xB7,
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0x6F,0xBE,
0x70,0x63,0xBF,0x79,0xE4,0x78,0xE5,0xC0,
0xC1,0xE6,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7 };

//функция вывода на LCD русско-символьной строки
void putsf(flash unsigned char *string)
{
char c; //символ из строки
while (c=*string++){
if(c>=192) lcd_putchar(Decode2Rus[c-192]);
else lcd_putchar(c);
}
}

выводить на лсд будешь вот так:
putsf("я Кот Матроскин!");


Radio_Master писал(а):Я печатал на руссифицированой hd-ке по русски так:


#pragma rl+ //перевод экрана на русскоязычное отображение
lcd_gotoxy(4,0); //местоположение курсора
lcd_putsf("Здраствуйте"); //вывод текста
#pragma rl- //Перевод экрана на английское отображение




Использовал CVAvr,библиотеку LCD.h, мастер начального кода. Проверял в CVAVR 1.25.8 - компилится без ошибок.


Gray64 писал(а):В общем разобрался я с индикатором, оказался русифицированным. Но такая фича: попытка вывести более 16 имволов по одному приводит к сбою счётчика адреса, тоесть начинает выводить с пробела(хз). Кодировка руских букв не совпадает с ASCII, пришлось по быстому набросать софтину - переводчик. Лежит она тут. Но это всё проверялось на asm'e. А по причине что в С я абсолютный ноль, то не имею ни малейшего понятия как эти коды себя поведут ТАМ. Но опять же, прога испытывалась на том же индикаторе о котором я говорил выше. Кому надо, юзайте на здоровье)))


Еще попробуйте вот эту софтинку, поможет.
Вложения
LCD20.zip
(125.01 KiB) Скачиваний: 1470
Последний раз редактировалось Aheir Чт янв 08, 2009 20:28:11, всего редактировалось 6 раз(а).

Пт апр 04, 2008 14:46:41

Возможно не вту ветку, но проблемма в следующем: я имею ЖК WH2002 - 20Х2 на микроконтроллере KS0066
Проблемма в том, что уже 3 день пытаюсь инициализировать ЖК результат - постоянно горит верхняя строка и все!
Уже прочитал около 8 даташитов - там почти все одинаково, только тайменги по задержкам отличаются для разных фирм ЖК 20х2, но процесс инициализации везде почти один:
Передача будет по 4 битной шине данных, R\W посажен на 0, RS=0
1)Задержка 20мс
2)Передаю значение на DB7...DB4 = 3
3)стробирую Е путем Е=1 задержка 250нс Е=0
4)Задержка 5мс
5) повтор 2,3,4 пунктов
6) повтор 2,3,4 пунктов
7) Повторяю пункты 2,3,4, с учетом изменения на выводах DB7...DB4=2
8)Далее потетрадно передаю данные,при чем сначала старшую, затем младшую, при этом стробирую постоянно после каждой тетрады Е
Данные следующие: 28,08,01,02,06,0Е
Помогите плиз подскажите в чем дело может быть.
Проверял на остцилографе - команды передаются именно так и с такими временами.

Пт апр 04, 2008 20:21:46

Когда у меня такое было(правда было это на асм) - или задержки неправильные или ножки не те дёргаеш(имеется ввиду RS E) и ещё - заземли RW на всякий пожарный. А так - код в студию

Сб апр 05, 2008 07:31:21

"R\W посажен на 0"
"и ещё - заземли RW на всякий пожарный."
Можно спросить почему не используется флаг готовности? Ведь удобнее, не гадая на задержках, при опросе флага определить готовность индикатора к обмену. Для примера осмелюсь приложить файл для AVR на ASM, который работает уже очень давно ( как есть ). Последнее применение для PLED WP1602A от WINSTAR

Сб апр 05, 2008 13:50:07

Ну при инициализации не всегда можно читать флаг готовности. Да и гадать то не надо. Даташит есть там всё написано - какая команда сколько времени требует.

Вт май 06, 2008 06:31:50

Спрашивал в другой ветке, но решил спросить и тут.... Приобрел ЖК индикатор WH0802 фирмы Winstar, подцепил к ATTiny2313 по 4-битному интерфейсу, стал мучить... Оказалось, что у него недопрошит знакогенератор - части символов нет, часть стоит не на своих местах и т.п. Может кто сталкивался с таким. Что это - брак или я что-то не так делаю? Подскажите, плиз, кто юзал сей девайс...

Ср май 07, 2008 20:09:29

Беру свои слова обратно. Все работает. Для тех кто сталкивался с этим или предстоит столкнутся поясню как не наступать на эти грабли.
1. Как было (почти работало):
Подключил я 2-х строчныйХ8 символов ЖК дисплей WH0802 (Winstar)к ATTiny 2313 по 4-х проводному интерфейсу вот так:
PD6->RS PD5->R/W PD4->E PD3->D7 PD2->D6 PD1->D5 PD0->D4.
В инете нашел примеры кодов по работе с таким дисплеем. Примерно так:


command: out portd,lcd
cbi portd,RW
cbi portd,RS

sbi portd,E
cbi portd,E

swap lcd

out portd,lcd
cbi portd,RW
cbi portd,RS

sbi portd,E
cbi portd,E

ldi delay1,255
del40_1:
dec delay1 ;задержка ~ 40 мкс
brne del40_1

ret

data: out portd,lcd
cbi portd,RW
sbi portd,RS

sbi portd,E
cbi portd,E

swap lcd

out portd,lcd
cbi portd,RW
sbi portd,RS

sbi portd,E
cbi portd,E

ldi delay1,255
del40_2:
dec delay1 ;задержка ~ 40 мкс
brne del40_2

ret

Вообщем все почти работало - инициализация проходила, символы печатались, но не все((((

После дня мучений нашел свою ошибку: после вывода данных в порт (out portd,lcd) - на входах RS, R/W и E получается всякий "мусор", который при определенном стечении обстоятельств (адрес данных или компанды) приводит к таким последствиям.
Вообщем для устранения такого "мусора" перед выводом данных в порт необходимо наложить маску:

COMMAND:
mov lcd1,lcd
mov lcd2,lcd

swap lcd1

andi lcd1,0b00001111
andi lcd2,0b00001111

out portd,lcd1 ;вывод данных в порт
swap lcd1

sbi portd,E ;строб
cbi portd,E ;

out portd,lcd2 ;вывод данных в порт

sbi portd,E ;строб
cbi portd,E ;

ldi delay1,255
del40_2:
dec delay1 ;задержка ~ 40 мкс
brne del40_2

ret


DATA:
mov lcd1,lcd
mov lcd2,lcd

swap lcd1

andi lcd1,0b00001111
andi lcd2,0b00001111

out portd,lcd1 ;вывод данных в порт
swap lcd1

sbi portd,RS

sbi portd,E ;строб
cbi portd,E ;

out portd,lcd2 ;вывод данных в порт

sbi portd,RS

sbi portd,E ;строб
cbi portd,E ;

ldi delay1,255
del40_3:
dec delay1 ;задержка ~ 40 мкс
brne del40_3



данные процедуоы работают на МК при частоте 0.9-1.0 МГц (Встроенный RC- генератор)

ret

Пн май 12, 2008 09:46:34

У меня есть МТ-16s2r. C инициализацией не парился, т.к. программирую на BASCOM-AVR, и при указании типа индикатора, компилятор сам производит инициализацию. Единственно - происходит инициализация только первой страницы знакогенератора.
Для того чтоб включить вторую, написАл маленькую вставку на АСМе

$asm
Declare Sub Waitt
LDI R20, 1000
ldi R16, &B00100000
ldi R17, &B00100100
ldi R18, &B10100000
ldi R19, &B10100100

Out Portc , R17
Call Waitt
Out Portc , R16
Call Waitt
Out Portc , R18
Call Waitt
Out Portc , R19
Call Waitt
Out Portc , R18
Call Waitt
jmp en

Waitt:
Dec r20
tst r20
brge Waitt
ret
En:
$end Asm
CLS '(или подпрограмма очистки (сброса) экрана)

Задержка в 3-ей строке - 1000, для кварца 5мГц. На другие придется подбирать. Можно конечно оптимизировать код, т.к. в АСМе я не силен и писАл, что называется "в лоб".
Но вот есть такой вопрос. На сайте МЭЛТа указано что мой экран может работать и в инверсном включении, да и на других сайтах видел фото с инверсным экраном. Но нигде не нашел как включить этот режим. Подскажите, если кто знает?
Заранее синкс.

Сб июн 21, 2008 10:54:27

У меня почти такой же индикатор (контроллер, и т.п. - все одинаковое).
Только, по сравнению, к примеру, с МЭЛТ'овским индикатором, у меня нет ни каких символов в промежутках:
0x00-0x1f
0x80-0x9f. В МЭЛТ'е нет 0x00-0x07. В даташите на МЭЛТ сказано, что эти 8 мест знакогенераторамолжно запоолнить своими. в даташите на мой ЖКИ неуказано, сколько символов могу заполнить я. Означает ли это, что я могу заполнить 64 символа как пожелаю?

Сб июн 28, 2008 15:55:20

у меня пока такие результаты: задаются символы с 0х00 по 0х0F, а остальные пустые - нет :( . ЖКИ - Ampire ac162

Как правильно читать данные из HD44780

Чт июл 24, 2008 15:08:13

вот даташит

http://www.melt.com.ru/files/file2142.pdf

в цикле записи E идет на подъем на 250 нс и 250 на низком уровне.
При чтении данных в середине высокого уровня появляются данные для чтения. Это все по диаграмме. Получается, что если я даю команду прочесть память, то на 150 нс у меня должны быть данные готовы.

Однако, в таблице команд сказано, что команда чтения выполняется 40мкс. Значит, пока не пройдет 40 мкс данных не будет.

Не пойму тогда, чего мне делать при чтении? Где ждать эти 40 мкс?
Дать команду, поднять E, ждать 40мкс, прочесть данные. Так? Или как правильно?

А в 4-х битном режиме какую паузу делать между чтения полубайтов? Не мене 500 нс (минимальная длительность стрба) или дольше?

P.S.: прикол в том, что я все уже сделал и все работает и не глючит даже. Но, во-первых, все таки хотело бы быть уверенным, что все сделано как надо и оптимально, а во-вторых я BS проверяю постоянно,а чтобы сделать на таймере надо тайминги знать правильные.

Чт июл 24, 2008 16:25:14

А есть ли вообще смысл что-либо читать из ЖКИ ? Чтобы проверить -записались ли туда данные или нет ? Дык в 90% этим никто не озабочен, в любой схеме ЖКИ - самый неторопливый элемент, его достаточно 10раз в секунду обновлять. При таком подходе он автоматом все успевает.
Ответить