Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Пт май 21, 2010 11:27:24
советом тоже дело если скину кусок кода с коментами ? пойдет ?
тело программы и работа с пзу не принципиально это наброски мне важна сама работа и алгоритм общения с лцд программа не идет далее опроса флага резета
.include "C:\VMLAB\include\m16def.inc"
; *********************************************************
.def temp =r16 ;DO-PB0
.def Simwol =r17 ;D7-PB7
.def Komand =r18 ;E-PD0
.def ConstFF =r19 ;R/W -PD1
.def Const00 =r20 ;R/S -PD2
.def Schet =r21 ;CE1 -PD3
.def Adres =r22 ;CE2 -PD4
.def Const01 =r23 ;RES -PD6
.CSEG
.org 0
reset: rjmp start
reti ; Addr $01 Вектора прерываний
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06
reti ; Addr $07
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $01 Вектора прерываний
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06
reti ; Addr $07
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
start: ldi temp,low(RAMEND) ; инициализация стека
out SPL,temp
ldi temp,high(RAMEND) ; инициализация стека
out SPH,temp
ldi Const00,$00 ; определение константы "0"
ldi ConstFF,$FF ; определение константы "FF"
ldi Const01,$01 ; определение константы "1"
ldi temp,0b11111111
out DDRD,temp ; Настройка порта D
ldi temp,0b00000000
out PORTD,temp ; вывод в порт D
ldi temp,0b00000000
out DDRb,temp ; Настройка порта в
ldi temp,0b11111111
out PORTb,temp ; вывод в порт в
ldi temp,0b11110000
out DDRC,temp ; Настройка порта c
ldi temp,0b11111111
out PORTC,temp ; вывод в порт c
ldi temp,0b00000000
out DDRA,temp ; Настройка порта а
ldi temp,0b11111111
out PORTA,temp ; вывод в порт а
ldi temp , 0b00000000
out GICR , temp
ldi temp, 0x80 ; отключчение компаратора
out ACSR , temp ;
ldi temp ,0b01100000; включение ацп лево ориент. вход А0
out ADMUX , temp ;
ldi temp , 0b11100101 ; образцовое напряжение питания
out ADCSR , temp ;
ldi temp , 0b00000000; коэфициент деления 32
out SFIOR ,temp;
; **************** Инициализация LCD ****************
inic: cbi PORTD,PD6 ;reset
nop
nop
nop
sbi PORTD, PD6 ;reset
nop
nop
nop
nop
nop
cbi portc ,7 ; выход на порт для контроля выполнения программы
rcall GOTOV1;flag reset
cbi portc , 6 ; выход на порт для контроля выполнения программы
rcall GOTOV ;flag busy
cbi portc , 5 ; выход на порт для контроля выполнения программы
cbi PORTD,PD3;выбор чип 1
cbi PORTD,PD4;выбор чип 2
nop
nop
nop
nop
nop
nop
ldi Komand,0b00111111
rcall GOTOV
rcall ZAPCOMAND
cbi portc , 4
ldi Komand,$0C
rcall GOTOV
rcall ZAPCOMAND
ldi adres,$20
; ****************** Тело программы ******************
main: sbis PINC,0
rjmp kn1
sbis PINC,1
rjmp kn2
sbis PINC,2
rjmp kn3
rjmp main
kn1: ldi adres,$00
ldi Komand, 0b10111000; 0 страница озу
rjmp wwod
kn2: ldi adres,$00
ldi Komand, 0b10111001; 1 страница озу
rjmp wwod
kn3: ldi adres,$00
ldi Komand, 0b10111010; 2 страница озу
rjmp wwod
wwod: ldi Schet, $40;
rcall GOTOV
rcall ZAPCOMAND
ldi komand , 0b01000000;0 адрес столбца
nov1: rcall EEPROM
rcall GOTOV
rcall ZAPDATA
inc Adres
dec Schet
brne nov1
rjmp main
; ************ Подпрограмма определения готовности ЖКИ :флаг занятости
GOTOV: cbi PORTD,PD2 ;r\s
nop
nop
povtor: sbi PORTD,PD1 ;p\w
out DDRB,Const00
out PORTB,ConstFF
nop
nop
nop
nop
sbi PORTD,PD0 ;E
nop
nop
nop
nop
nop
nop
nop
in temp,PINB
nop
cbi PORTD,PD0 ;E
nop
nop
nop
cbi PORTD,PD1 ; R|W
sbrc temp,7
ret
rjmp povtor
; ************ Подпрограмма определения готовности ЖКИ :флаг резет
GOTOV1: cbi PORTD,PD2 ;r\s
nop
nop
nop
povtor1: sbi PORTD,PD1 ;p\w
out DDRB,Const00
out PORTB,ConstFF
nop
sbi PORTD,PD0 ;E
nop
nop
nop
nop
nop
nop
nop
in temp,PINB
nop
cbi PORTD,PD0 ;E
nop
nop
nop
nop
cbi PORTD,PD1 ; R|W
sbrs temp,4
ret
rjmp povtor1
; ********* Подпрограмма записи в регистр команды ЖКИ
ZAPCOMAND: cbi PORTD,PD2 ;R|S
cbi PORTD,PD1 ;R|W
out DDRB,ConstFF
nop
nop
nop
nop
nop
out PORTB,Komand
sbi PORTD,PD0 ;E
nop
nop
nop
nop
nop
nop
nop
cbi PORTD,PD0 ;E
nop
ret
; ************** Подпрограмма записи в регистр данных ЖКИ цп1
ZAPDATA: sbi PORTD,PD2 ; Вывод R|S
cbi PORTD,PD1 ;R|W
out DDRB,ConstFF
nop
nop
sbi PORTD,PD3; чип 1
out PORTB,Simwol
sbi PORTD,PD0 ;E
nop
nop
nop
nop
nop
cbi PORTD,PD0 ;E
nop
cbi PORTD,PD3;чип 1
ret
; ************** Подпрограмма записи в регистр данных ЖКИ цп2
ZAPDATA1:sbi PORTD,PD2 ; Вывод R|S
cbi PORTD,PD1 ;R|W
out DDRB,ConstFF
nop
nop
sbi PORTD,PD4; чип 2
out PORTB,Simwol
sbi PORTD,PD0 ;E
nop
nop
nop
nop
nop
cbi PORTD,PD0 ;E
nop
sbi PORTD,PD4; чип 2
ret
; ************** Подпрограмма чтения ПЗУ *********
EEPROM: out EEARH,Const00
out EEARL,Adres
out EECR,Const01
in Simwol,EEDR
ret
.ESEG
.ORG 0
.DB $20, $31, $2E, $20, $A5, $B3, $61, $BD, $6F, $B3, $20, $20, $20, $20, $20, $20, $FF, $FF
.DB $20, $32, $2E, $20, $A8, $65, $BF, $70, $6F, $B3, $20, $20, $20, $20, $20, $20 ,$FF, $FF
.DB $ff ,$ff, $ff, $FF, $FF, $FF ,$ff ,$ff, $ff, $FF, $FF, $FF $ff ,$ff, $ff, $FF, $FF, $FF
.DB $ff ,$ff, $ff, $FF, $FF, $FF ,$ff ,$ff, $ff, $FF, $FF, $FF $ff ,$ff, $ff, $FF, $FF, $FF
.DB $ff ,$ff, $ff, $FF, $FF, $FF ,$ff ,$ff, $ff, $FF, $FF, $FF $ff ,$ff, $ff, $FF, $FF, $FF
.DB $ff ,$ff, $ff, $FF, $FF, $FF ,$ff ,$ff, $ff, $FF, $FF, $FF $ff ,$ff, $fD, $FD, $FD, $FE
.EXIT
Вс май 23, 2010 23:02:42
а нафика те флаг опрашивать хай так работает ( по выдержке времени ).
главное выдержать максимальное время, оно указано в Д.Ш.
попробую обьеснить на пальцах.
для включения дисплея соответственно подать питание и соединить выход драйвера через резистор со входом питания жк модуля тоесть соединить через резистор 3 и 18 выводы.
далее я делал так, хотя видал ктото делал подругому вывод RESET всегда на земле но у меня он подключён квыводу мк.
подал <1> на RESET
14мкс (микросекунд) задержки // по д.ш. 10 мкс
подал на <1> на Е1 и Е2 // на выводы выбора кристала
14мкс (микросекунд) задержки
подал <0> на RESET
14мкс (микросекунд) задержки
подал <1> на RESET
14мкс (микросекунд) задержки
подал <B'00111111'> на шину данных // та самая команда ON
14мкс (микросекунд) задержки
подад <1> на Е // строб разрешение чтения / записи
50мкс задержки // после этого дисплей чернеет и готоа к принятию всевозможных команд
яб мог чёнть попутёвий накалякать но увы с AVR неработаю. мож попробовать на си както программы составить мож скампилируются как надо
а насчёт чтения из дисплея могу сказать что программа составленная мной прекрасно читала из дисплея в PIC в PROTEUSе но в железе эттого непроисходило поэтому я в дальнейшем нерасматривал чтения с дисплея.
- Вложения
-
- както так .txt
- (2.51 KiB) Скачиваний: 517
Вт июн 15, 2010 11:10:57
Помогите пожалуйста разобраться новичку, уже 3 недели морочусь с графическим LCD.
Основу взял из страницы
viewtopic.php?f=20&t=5199&start=40проект LCD графич MT12864 CVAVR PROTEUS.rar (спасибо автору).
Такой вариант работает:
LCD_PUTSF(56,28,"radiokot");
Но мне нужно отправлять на LCD переменную.
Не буду изображать что я делал не основное, но основное здесь:
unsigned char buf[33];
unsigned m;
m=1234; // Моя цель чтобы LCD показало – 1234.
sprintf (&buf[0], "%d", m);
LCD_CLS();
LCD_PUTSF(56,28,&buf[0]); // компилятор выдает ошибку в этой строке
Выдает что не соответствие формату требуемому для LCD
При замене последней строки на такой вариант
LCD_PUTSF(56,28,buf[0]); // удален &
тоже выдает ошибку.
Здесь применил стандартные функции, почему не идет не пойму.
Еще последнюю строку пробовал в таком варианте
WriteData(buf[0]);
Ошибок не выдает, но LCD показывает только двоеточие на середине нижней строки.