 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
james Neznanec

Pridružen-a: Čet 27 Sep 2007 18:49 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Čet Sep 27, 2007 7:28 pm Naslov sporočila: 16f876a ter LCD |
|
|
Živjo!
Že cel teden se mučim da bi spravil skupaj 16f876a ter LCD z icd2-jem,a mi ne uspe! Tako da se obračam na vas. Pa me zanima če je že kdo to delal. Program sem izpisal po že obstoječem programu,ki mi je delal vendar je bil pisan za 16f84. Program usebuje inicializacijo ter en stavek ki ga ispiše,gre samo za razumevanje programa. Upošteval sem vse nastavitve ter konfiguracije ki jih potrebuje 876a a še vedno ne deluje!!
zanima me če ima ta procesor kakšno posebnost ali sem sam kaj zabluzu.?!
hvala! |
|
Nazaj na vrh |
|
 |
gumby Član


Pridružen-a: Sob 28 Apr 2007 12:32 Prispevkov: 4066 Aktiv.: 18.41
|
Objavljeno: Čet Sep 27, 2007 8:23 pm Naslov sporočila: |
|
|
Magično kroglo imam(o) na servisu, zato bi rabil(i) še načrt+program... _________________ Tule nisem več aktiven. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Čet Sep 27, 2007 9:00 pm Naslov sporočila: Re: 16f876a ter LCD |
|
|
james je napisal/a: |
zanima me če ima ta procesor kakšno posebnost ali sem sam kaj zabluzu.?!
hvala! |
Predvsem ima povsem drugačen način dela z Bank-ami in tudi pri prekinitvah moraš drugače spraviti registre.
Malo preplonkaj programe od tukaj: Sprut .
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
tibi Član

Pridružen-a: Tor 16 Dec 2003 11:08 Prispevkov: 253 Aktiv.: 1.07 Kraj: bukovje
|
Objavljeno: Pet Sep 28, 2007 12:08 pm Naslov sporočila: |
|
|
Povezava omenjnenega mikrokrmilnika in LCD-j sigurno deluje. Najprej pa se moraš prepričati če je napaka v programu ali v vezavi. |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Sep 28, 2007 12:13 pm Naslov sporočila: |
|
|
Program med '876 in '84 se razlikuje. Če drugega ne #define, #include in podobno. Prosti registri se tudi začnejo drugje. Copy/paste koda ne bo delovala. če bi pokazal kodi/programa za oba procesorja, bi se še kaj dalo pomagati. Mogoče imaš tudi hitrejši kristal, pa se zakasnitve (nujno potrebne za LCD) prekratke.
Jur |
|
Nazaj na vrh |
|
 |
james Neznanec

Pridružen-a: Čet 27 Sep 2007 18:49 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Pet Sep 28, 2007 1:09 pm Naslov sporočila: |
|
|
;***********************************************
;oscilator: RC..4 Mhz
;portC___7,6,5,4 podatkovna linija
;portC___3,2,1 RS ter E
;******************************************************
LIST p=16f876a
#include <p16f876a.inc>
__config _wdt_off & _pwrte_on & _rc_osc & _cp_off
;***********************************************************
temp1 equ 0x20
temp2 equ 0x21
;**************************************************
#define RS portc,1
#define RW portc,2
#define E portc,3
;************************************************
org 0X00
goto GLAVNI
org 0x05
;***********************************************
GLAVNI bsf status,rp0
clrf trisc
movlw b'10000001'
movwf option_reg
bcf status,rp0
clrf portc
clrf INTCON
call lcd_init
bsf RS
movlw 'A'
call lcd_pisi
KONC GOTO KONC
;*******************************************
lcd_pisi movwf temp1
movlw 0x0F
andwf PORTC,f
movf temp1,w
andlw 0xF0
iorwf PORTC,f
bsf E
bcf E
swapf temp1,f
movlw 0xF0
andwf temp1,f
movlw 0x0F
andwf PORTC,f
movf temp1,w
iorwf PORTC,f
bsf E
bcf E
call cakaj119u
return
;*******************************************************************
cakajms movwf temp2
clrf TMR0
cak1 btfss INTCON,TMR0IF
goto cak1
bcf INTCON,TMR0IF
decfsz temp2,f
goto cak1
return
;*******************************************************************
cakaj119u movlw .38
movwf temp2
se decfsz temp2,f
goto se
return
;*******************************************************************
lcd_init bcf RS
bcf RW
movlw .30
call cakajms
movlw 0x30
movwf PORTC
bsf E
bcf E
movlw 0x30
movwf PORTC
movlw .10
call cakajms
bsf E
bcf E
call cakaj119u
movlw 0x30
movwf PORTC
bsf E
bcf E
movlw 0x20
movwf PORTC
bsf E
bcf E
call cakaj119u
movlw 0x28
call lcd_pisi
movlw 0x08
call lcd_pisi
movlw 0x01
call lcd_pisi
movlw 0x06
call lcd_pisi
movlw 0x1c
call lcd_pisi
return
;*******************************************************************
end
Program je pobran iz sveta elektronike točno iz člankov pic od začetka. Samo je bil tam pisan za f84! Kot sem ze omenil sem mojega priredil za moj procesor kar uključuje (banke,lokacije,include config,timer...itd) zna bit da sem kaj pozabil?? Drugo možnost tudi nisem izključil to da je LCD slab, pa sem ga zamenjal in isto!! Ostane mi še ena,to z oscilatorjem! imam rc oscilator! nekje sem zračunal da naj bi bil 4 M. Najbolje da bi ga zamenjal z kristalom,sam se zmeraj ne vem zakaj je na f84 delal z enakim rc členom. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pet Sep 28, 2007 1:29 pm Naslov sporočila: |
|
|
Namesto
bsf E
bcf E
daj POVSOD vmes še vsaj 2 x nop
bsf E
nop
nop
bcf E
Povečj tudi .38 na vsaj .50 ali še več v zanki cakaj119u .
Časi se razlikujejo glede na uporabljen LCD. Če je aktivni čas nekega signala prekratek, se pojavijo napake.
Če je napaka v lcd_pisi ali lcd_init, je to ponavadi ravno pri trajanju signalov.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Sep 28, 2007 1:32 pm Naslov sporočila: |
|
|
Če prav razumem, naj bi izpisal na zaslon A in padel v neskončnost. Ali imaš original program za primerjavo?
Jur |
|
Nazaj na vrh |
|
 |
james Neznanec

Pridružen-a: Čet 27 Sep 2007 18:49 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Pet Sep 28, 2007 1:56 pm Naslov sporočila: |
|
|
Ja program naj bi izpisal "nekaj" in potem se zaciklal. gre le samo za razumevanje inicializacije lcd-ja ter ga usposobit za nadaljno delo.
poskusil sem tudi dodat 2x nop med E pa še vedno nič!
delujoči program za 84
pri tem programu nisem uporabil debugerja icd2 zato se sprašujem če je kakšna sprememba pri uporabi icd2ja v mojem primeru?!.
LIST P=16F84, R=HEX
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _RC_OSC
#include <P16F84.INC>
;*******************************************************************
temp1 equ 0x0C
temp2 equ 0x0D
;*******************************************************************
#define rs Portb,1
#define rw Portb,2
#define e Portb,3
;*******************************************************************
cgram equ 0x40
ddram equ 0x80
desno equ 0x1c
ORG 0X000
GOTO glavni
;*******************************************************
org 0x004
glavni
bsf status,rp0
clrf trisa
clrf trisb
movlw b'10000001'
movwf option_reg
bcf status,rp0
clrf porta
clrf portb
clrf intcon
call lcd_init
call crke
clrw
call ddram_n
;**********************************************
;**********************************************
bsf rs ;pise crke
movlw 'z'
call lcd_pisi
;*************************************************
;*************************************************
movlw 'i'
call lcd_pisi
movlw 'v'
call lcd_pisi
movlw 'j'
call lcd_pisi
movlw 'o'
call lcd_pisi
;*******************************************************
;*******************************************************
movlw 0x40 ;gresu u drugu vrsticu
call ddram_n
;*******************************************************
;*******************************************************
bsf rs
movlw 'x'
call lcd_pisi
movlw 'y'
call lcd_pisi
movlw desno
call lcd_pisi
call cakajms
call cakajms
movlw desno
call lcd_pisi
call cakajms
konec goto konec
;******************************************************************
lcd_pisi
movwf temp1
movlw 0x0f
andwf portb,f
movf temp1,w
andlw 0xf0
iorwf portb,f
bsf e
bcf e
swapf temp1,f
movlw 0xf0
andwf temp1,f
movlw 0x0f
andwf portb,f
movf temp1,w
iorwf portb,f
bsf e
bcf e
call cakaj119u
return
;**************************************************
cakaj119u
movlw .38
movwf temp2
se decfsz temp2,f
goto se
return
;***************************************************
cakajms
movwf temp2
clrf tmr0
cak1 btfss intcon,t0if
goto cak1
bcf intcon,t0if
decfsz temp2,f
goto cak1
return
;*********************************************************************
lcd_init
bcf rw
bcf rs
movlw .15
call cakajms
movlw 0x30
movwf portb
bsf e
bcf e
movlw .5
call cakajms
movlw 0x30
movwf portb
bsf e
bcf e
call cakaj119u
movlw 0x30
movwf portb
bsf e
bcf e
movlw .5
call cakajms
movlw 0x20
movwf portb
bsf e
bcf e
call cakaj119u
movlw 0x28
call lcd_pisi
movlw 0x08
call lcd_pisi
movlw 0x01
call lcd_pisi
movlw .2
call cakajms
movlw 0x06
call lcd_pisi
movlw 0x0f
call lcd_pisi
return
;*********************************************************
cgram_n
bcf rs
iorlw cgram
call lcd_pisi
return
;*******************************************************
ddram_n
bcf rs
iorlw ddram
call lcd_pisi
return
;********************************************************
crke
clrw
call cgram_n
bsf rs
clrf eeadr
delaj
bsf status,rp0
bsf eecon1,rd
bcf status,rp0
movf eedata,w
call lcd_pisi
incf eeadr,f
btfss eeadr,4
goto delaj
bcf rs
return
org 0x2100
de 0x00,0x00,0x0a,0x00,0x11,0x0e,0x00,0x00
de 0x0a,0x04,0x0e,0x11,0x10,0x11,0x0e,0x00
end |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pet Sep 28, 2007 2:40 pm Naslov sporočila: |
|
|
V zadnjem delu LCD_init ne počakaš dovolj. Primerjaj programa, pa boš videl, da moraš čakati .2ms po vpisu 0x01:
movlw 0x28
call lcd_pisi
movlw 0x08
call lcd_pisi
movlw 0x01
call lcd_pisi
movlw .2
call cakajms
movlw 0x06
call lcd_pisi
movlw 0x0f
call lcd_pisi
return
Pa par vrstic višje si tudi izpustil čakanje .5ms
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
jur Član


Pridružen-a: Pet 02 Dec 2005 14:45 Prispevkov: 5142 Aktiv.: 21.71 Kraj: [color=zelena]Ljubljana[/color]
|
Objavljeno: Pet Sep 28, 2007 2:47 pm Naslov sporočila: |
|
|
Na hitro pogledano: '876a verzija programa nima: CALL CRKE in CALL DDRAM_N za CALL LCD_INIT vrstico...
Jur |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pet Sep 28, 2007 2:48 pm Naslov sporočila: |
|
|
Vstavi tole:
Koda: |
LCD_Init
bcf LcdRS ; (R/W od LDC je priklopljen na Maso) in RS linija na 0
movlw .60 ; Parameter od CakajMs -> W
call CakajMs ; priblizno 32ms pavze za LCD
movlw 0x30
movwf PORTC ; Na D7 - D4 posljemo 0x3
nop
bsf LcdE
nop
nop
bcf LcdE ; Opozorimo LCD na nov podatek
movlw .15
call CakajMs ; Priblizno 5ms pavze
movlw 0x30
movwf PORTC ; Na D7 - D4 posljemo 0x3
nop
bsf LcdE
nop
nop
bcf LcdE ; Opozorimo LCD na nov podatek
call Cakaj119u ; 119us pavze
call Cakaj119u ; 119us pavze
movlw 0x30
movwf PORTC ; Na D7 - D4 posljemo 0x3
nop
bsf LcdE
nop
nop
bcf LcdE ; Opozorimo LCD na nov podatek
movlw .15
call CakajMs ; Priblizno 5ms pavze
movlw 0x20
movwf PORTC ; Na D7 - D4 posljemo 0x2
bsf LcdE
nop
nop
bcf LcdE ; Opozorimo LCD na nov podatek
call Cakaj119u ; 119us pavze
call Cakaj119u ; 119us pavze
; Sedaj smo v 4-bitnem nacinu
movlw 0x28 ; 2x16 znakov, 5x8 znaki, 4-bitno
call LCD_pisi ; Posljemo 0x28 na LCD
movlw 0x08 ; Izklop zaslona
call LCD_pisi ; Posljemo 0x08 na LCD
movlw 0x01 ; Brisanje DDRAM-a
call LCD_pisi ; Posljemo 0x01, izbrisemo zaslon
movlw .10
call CakajMs ; Zahtevana zakasnitev >2ms
movlw 0x06 ; pisanje v desno, brez pomikanja zaslona
call LCD_pisi ; Posljemo 0x06 na LCD
movlw Kurzor0 ; Ni kurzorja ;vklop zaslona, velik kurzor
call LCD_pisi ; Posljemo 0x0F na LCD
return ; Konec podprograma
|
Časi so prilagojeni mojemu LCDju , zato so konstante v komentarjih in v programu rzlične.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
james Neznanec

Pridružen-a: Čet 27 Sep 2007 18:49 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Pet Sep 28, 2007 3:25 pm Naslov sporočila: |
|
|
Torej sklepam da je verjetno napaka pri časih v inicializaciji?!
jur
""Na hitro pogledano: '876a verzija programa nima: CALL CRKE in CALL DDRAM_N za CALL LCD_INIT vrstico...""
moj program 876 ne vsebuje "call crke ter call ddram" ker ne potrebuje,zato nima veze! delovat bi moralo,samo da ispiše eno črko. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Pet Sep 28, 2007 5:48 pm Naslov sporočila: |
|
|
james je napisal/a: |
Torej sklepam da je verjetno napaka pri časih v inicializaciji?!
|
JA. Tam, ko pošlješ ukaz 0x01 (brisanje zaslona), moraš POČAKATI par ms.
Brisanje deluje tako, da LCD vpisuje presledke lepo po vrsti.
Ker prehitro daš naslednji ukaz, ostane nekje na pol poti in potem samo še vklopiš kurzor in izpišeš 'A' - nekam med 0x10 in 0x40 ali 0x50 in 0x80, kjer je pač ostal kurzor.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
james Neznanec

Pridružen-a: Čet 27 Sep 2007 18:49 Prispevkov: 5 Aktiv.: 0.02
|
Objavljeno: Pet Sep 28, 2007 11:32 pm Naslov sporočila: |
|
|
ok! super dela!
namesto rc oscilatorja sem dal kristal in porihtal čase in je zalawfalo.
hvala usem.
LP |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|