Pokud bys přešel z Bascomu na AVR Studio + WinAVR(jazyk C), tak bych měl odzkoušenou knihovnu pro LCD(HD44780) na vývojovém kitu EvB 4.3(také nemá vyveden z LCD pin R/W).
Příspěvky odeslané z IP adresy 88.100.62.–
Nedalo mi to a zkusil jsem to v Bascomu zkompilovat(použil jsem vzorový příklad z knihy: Mikrokontroléry ATMEL AVR programování v jazyce Bascom, příklad 6.2). Výsledek - na LCD se nic nezobrazí, tak asi bude chyba v knihovně pro Bascom. Funguje až příklad 6.3, kde je ovšem používán LCD pin R/W(při odstranění deklarace Const _lcd_rw = 1, kompilace skončí chybovým hlášením).
Mám dotaz, zkoušel jsi nahrát do uProcesoru nějaký jednoduchý program?
Např: blikání LED na PORTD.0 v intervalu 1s. Z foto nejde poznat hodnota krystalu(pokud je osazen, asi bude pod uProc.). V programu si můžeš nastavit hodnotu, ale musíš pak podle toho upravit pojistky(fuse) při programování - viz datasheet atmega32.
Jelikož z LCD modulu není vyveden pin R/W, musíš správné časování zajistit v programu. Nevím, jak je napsána knihovna pro LCD v Bascomu, některé typy LCD potřebují delší časování mezi příkazy.
Z datasheetu jsem odvodil následující postup komunikace:
Signál CS nastavíš do log.0, pak musíš počkat 8,5us(převod),nebo monitorovat stav na DOUT. Po dobu převodu je v log. 0. Poté postupně přečteš 2byte(MSB,LSB). Signál CS do log.1, před dalším převodem se musí počkat 0,5us.
Max. frekvence SCKL je 4MHz, takže musí být správně nastaven kmitočet pro SPI.
Pro ochranu vstupu AIN bych volil hodnotu (P1 cca 10k) a ochranné diody(2 x 1N4148) na GND a Vss.
#1 remmidemmi
include"P16F877A.inc"
;***************************************************************
COUNT equ 20h
CISLA10 equ 21h
CISLA32 equ 22h
CISLA54 equ 23h
CISLA76 equ 24h
CISLA98 equ 25h
CISLABA equ 26h
CISLADC equ 27h
CISLAFE equ 28h
LOOP3 equ 2Ah
HEX_1 equ 30h
HEX_2 equ 31h
HEX_3 equ 32h
HEX_4 equ 33h
HEX_5 equ 34h
HEX_6 equ 35h
;***************************************************************
org 0000h
goto Start
;**************************************************************
; Podprogram prevede 48 bitove cislo z HEX na DEC
; HEX_6,HEX_5,HEX_4, HEX_3, HEX_2, HEX_1 -> CISLAFE,CISLADC,CISLABA,CISLA98, CISLA76, CISLA 54, CISLA32, CISLA10
; Priklad: FFFFFFFFFFh -> 281474976710655d
Start
movlw 0FFh
movwf HEX_1
movwf HEX_2
movwf HEX_3
movwf HEX_4
movwf HEX_5
movwf HEX_6
HEX6BCD
bcf STATUS,C ; vynuluj bit C pred rotaci
movlw d'48'
movwf COUNT
; ------------------------
clrf CISLA10
clrf CISLA32
clrf CISLA54
clrf CISLA76
clrf CISLA98
clrf CISLABA
clrf CISLADC
clrf CISLAFE
;-------------------------------
LOOP48
rlf HEX_1,F
rlf HEX_2,F
rlf HEX_3,F
rlf HEX_4,F
rlf HEX_5,F
rlf HEX_6,F
rlf CISLA10,F
rlf CISLA32,F
rlf CISLA54,F
rlf CISLA76,F
rlf CISLA98,F
rlf CISLABA,F
rlf CISLADC,F
rlf CISLAFE,F
decfsz COUNT,F
goto DEKKOR ; dekadicka korekce se provede s kazdym registrem
return
;-------------------------------
DEKKOR
movlw CISLA10
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA32
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA54
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA76
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLA98
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLABA
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLADC
movwf FSR
call BCDKOR ; BCD korekce
movlw CISLAFE
movwf FSR
call BCDKOR ; BCD korekce
goto LOOP48
;-------------------------------
BCDKOR
movlw 03h
addwf INDF,W
movwf LOOP3
btfsc LOOP3,3 ; test zda je vysledek > 7
movwf INDF
; ------------------------
movlw 30h
addwf INDF,W
movwf LOOP3
btfsc LOOP3,7 ; test zda je vysledek > 7
movwf INDF
; ------------------------
return
Opak
goto Opak
;***************************************************************
end
Zkuste tohle,doba převodu při 20MHz je cca 1,5ms. Program jsem jen upravil pro 48bit, původní je ze stránky http://doveda.byl.cz/…/prevody.htm#…