www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

16f876a ter LCD
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
james
Neznanec
Neznanec



Pridružen-a: Čet 27 Sep 2007 18:49
Prispevkov: 5
Aktiv.: 0.02

PrispevekObjavljeno: Čet Sep 27, 2007 7:28 pm    Naslov sporočila:  16f876a ter LCD Odgovori s citatom

Ž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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 18.41

PrispevekObjavljeno: Čet Sep 27, 2007 8:23 pm    Naslov sporočila:   Odgovori s citatom

Magično kroglo imam(o) na servisu, zato bi rabil(i) še načrt+program...
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Čet Sep 27, 2007 9:00 pm    Naslov sporočila:  Re: 16f876a ter LCD Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
tibi
Član
Član



Pridružen-a: Tor 16 Dec 2003 11:08
Prispevkov: 253
Aktiv.: 1.07
Kraj: bukovje

PrispevekObjavljeno: Pet Sep 28, 2007 12:08 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Sep 28, 2007 12:13 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
james
Neznanec
Neznanec



Pridružen-a: Čet 27 Sep 2007 18:49
Prispevkov: 5
Aktiv.: 0.02

PrispevekObjavljeno: Pet Sep 28, 2007 1:09 pm    Naslov sporočila:   Odgovori s citatom

;***********************************************
;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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Pet Sep 28, 2007 1:29 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Sep 28, 2007 1:32 pm    Naslov sporočila:   Odgovori s citatom

Če prav razumem, naj bi izpisal na zaslon A in padel v neskončnost. Ali imaš original program za primerjavo?

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
james
Neznanec
Neznanec



Pridružen-a: Čet 27 Sep 2007 18:49
Prispevkov: 5
Aktiv.: 0.02

PrispevekObjavljeno: Pet Sep 28, 2007 1:56 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Pet Sep 28, 2007 2:40 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
jur
Član
Član



Pridružen-a: Pet 02 Dec 2005 14:45
Prispevkov: 5142
Aktiv.: 21.71
Kraj: [color=zelena]Ljubljana[/color]

PrispevekObjavljeno: Pet Sep 28, 2007 2:47 pm    Naslov sporočila:   Odgovori s citatom

Na hitro pogledano: '876a verzija programa nima: CALL CRKE in CALL DDRAM_N za CALL LCD_INIT vrstico...

Jur
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Pet Sep 28, 2007 2:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
james
Neznanec
Neznanec



Pridružen-a: Čet 27 Sep 2007 18:49
Prispevkov: 5
Aktiv.: 0.02

PrispevekObjavljeno: Pet Sep 28, 2007 3:25 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Pet Sep 28, 2007 5:48 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
james
Neznanec
Neznanec



Pridružen-a: Čet 27 Sep 2007 18:49
Prispevkov: 5
Aktiv.: 0.02

PrispevekObjavljeno: Pet Sep 28, 2007 11:32 pm    Naslov sporočila:   Odgovori s citatom

ok! super dela!
namesto rc oscilatorja sem dal kristal in porihtal čase in je zalawfalo.
hvala usem.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Microchip PIC Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
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