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


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Tor Jul 22, 2008 1:37 am Naslov sporočila: CodeVision, mega16, LCD? |
|
|
Pri oživljanju LCD-ja sem naletel na problemček. Uporabljam CodeVision, ko skompajla ne javi nobene napake, ko pa naložim programček na mego16, pa LCD kaže v prvi vrstici same črne kvadratke(se pravi vsi piksli so aktivni).Na PORTA pa sta drugi in tretji bit 1,kjer je tudi lcd. Knjižnici sta vključeni,lcd inicijaliziran(2x16)...Na testni plati Easy AVR5.
Ali je možno, da je LCD skurjen? oz, zakaj ne dela?
Koda: |
while (1)
{ lcd_clear();
lcd_putsf("hello world");
delay_ms(1000);
};
|
|
|
Nazaj na vrh |
|
 |
clownfish Član

Pridružen-a: Pet 05 Avg 2005 13:05 Prispevkov: 765 Aktiv.: 3.23 Kraj: Povir / Ljubljana
|
Objavljeno: Tor Jul 22, 2008 10:26 am Naslov sporočila: Re: CodeVision, mega16, LCD? |
|
|
- Si preveril če sam kontroler deluje (kakšen program kjer utripa ledica v takih primerih prav pride)
- Si preveril ali vsi pini ki gredo na LCD delujejo in lai so pravilno incializirani?
- Si preveril, da na teh pinih nimaš vključenih kakšnih nepotrebnih funcij (JTAG in podobno)
- Si preveri kako je z kontrastom LCD-ja?
- Če LCD brišeš in nanj spet kaj napišeš... se na LCD-ju kaj spreminja ali ne?
- Nikjer v programu ne vidim inicializacije LCD-ja. Potrebno ga ja najprej inicializirat, da ve kako delat (4 ali 8 bitni način in podobne nastavitve) |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Tor Jul 22, 2008 5:47 pm Naslov sporočila: |
|
|
Probaj spremeniti register,ter uporabi namesto PORTA,PORTB. Poveži ga na protoboardu,če ti plošča ne omogoča spreminjanja registrov.Ali pa isti register s tem da spremeniš fuse bite. _________________ Denis |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Tor Jul 22, 2008 9:04 pm Naslov sporočila: |
|
|
če kaže črne kvadratke potem lcd dela. pravilna je tudi nastavitev kontrasta. težava je v inicializaciji ali pa v povezavah. preveri. _________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
fricky Član


Pridružen-a: Pon 22 Sep 2003 15:37 Prispevkov: 260 Aktiv.: 1.10 Kraj: Ribniško Pohorje
|
Objavljeno: Tor Jul 22, 2008 10:29 pm Naslov sporočila: |
|
|
Najlažje je pomagat če prilepiš celo kodo |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Pet Jul 25, 2008 12:53 am Naslov sporočila: |
|
|
LCD ni skurjen, je bil kolega tako prijazen, da mi je spisal v bascomu testen programček.
Kako naj spremenim fuse bite?V CVAVR imam nastavljeno "program fuse bits"
odgovor za teslo
-kontroler dela, sem naredil preprosto el. ključavnico...dela super
-pini so uredu, ne vem, če so prav inicijalizirani
-jtag ni vključen na teh pinih
-na lcd ne morem pisati(beri ne znam), kaže črne kvadratke
-lcd, naj bi bil inicijaliziran
Koda: |
*****************************************************
This program was produced by the
CodeWizardAVR V2.03.3 Evaluation
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 22.7.2008
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega16
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <lcd.h>
#include<delay.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xff;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// LCD module initialization
lcd_init(16);
while (1)
{ lcd_clear();
lcd_putsf("hello world");
delay_ms(1100);
};
}
|
tiso prej je naredil čarovnik...izbral sem, da je na portu A, to je pa to.
pa ne mi zamerit če se ta teden ne javim, ker grem na morje:) |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Pet Avg 01, 2008 2:58 am Naslov sporočila: |
|
|
A se je našel že kakšen junak, ki je našel napako? Bil bi zelo hvaležen. |
|
Nazaj na vrh |
|
 |
dkone Član

Pridružen-a: Sre 07 Mar 2007 18:53 Prispevkov: 2116 Aktiv.: 9.51 Kraj: Krško
|
Objavljeno: Pet Avg 01, 2008 8:33 am Naslov sporočila: |
|
|
Za foro prestavi LCD na PORTB. _________________ Denis |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Pet Avg 01, 2008 7:50 pm Naslov sporočila: |
|
|
Aha... plata mi to ne omogoča, bom precinil. Samo toliko, a sintaksa naj bi bila pravilna? |
|
Nazaj na vrh |
|
 |
mucek Član


 
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5529 Aktiv.: 24.06 Kraj: Domzale
|
Objavljeno: Sob Avg 02, 2008 8:36 am Naslov sporočila: |
|
|
Dvomim, da bi bil kriv port.a, če s programom, napisanim v Bascomu display dela. Tudi fuse biti so potemtakem nastavljeni pravilno in očitno je problem v samem programu. Mislim, da je prestavljanje na drug port izguba časa.
Lp, Grega |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Sob Avg 02, 2008 12:04 pm Naslov sporočila: |
|
|
katero plato uporabljaš? preveri če imaš povezano na prave bite porta
Koda: |
The LCD module must be connected to the port bits as follows:
[LCD] [AVR Port]
RS (pin4) ------ bit 0
RD (pin 5) ------ bit 1
EN (pin 6) ------ bit 2
DB4 (pin 11) --- bit 4
DB5 (pin 12) --- bit 5
DB6 (pin 13) --- bit 6
DB7 (pin 14) --- bit 7
|
inicializacija mislim da je prava, probaj oz primerjaj še primer iz helpa. brezglavo menjanje porta je brezveze, razen če nimaš defektnih pinov. tudi to se dogaja, da crkne samo en pin na portu. _________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Sob Avg 16, 2008 1:34 am Naslov sporočila: |
|
|
Aha, hvala Mitja, mi je že volkd predlagal naj pogledam v knjižnico, enable in rd sta na drugih pinih, kot je napisano v knjižnici. Uporabljam easy avr5,kjer so pini malo pomešani. |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Ned Avg 17, 2008 11:45 am Naslov sporočila: |
|
|
Ja...tole sem spremenil
Koda: |
PREJ
#asm
.equ __lcd_direction=__lcd_port-1
.equ __lcd_pin=__lcd_port-2
.equ __lcd_rs=0
.equ __lcd_rd=1
.equ __lcd_enable=2
.equ __lcd_busy_flag=7
#endasm
*/
ZDAJ
#asm
.equ __lcd_direction=__lcd_port-1
.equ __lcd_pin=__lcd_port-2
.equ __lcd_rs=2
.equ __lcd_rd=1
.equ __lcd_enable=3
.equ __lcd_busy_flag=7
#endasm |
rs bit je na pinu2,e pa na 3
ampak stvar še vedno ne oživi. Koda je pa še vedno taka:
Koda: |
lcd_gotoxy(0,0);
lcd_putsf("se vedno ne delam!!!");
while (1);
|
Ali sem dovolj spremenil knjižnico, meni se zdi, da naj bi zdaj moglo delat. Vsak predlog bo v veliko pomoč |
|
Nazaj na vrh |
|
 |
VolkD Član


 
Pridružen-a: Pet 24 Sep 2004 21:58 Prispevkov: 14228 Aktiv.: 60.06 Kraj: Divača (Kačiče)
|
Objavljeno: Ned Avg 17, 2008 2:07 pm Naslov sporočila: |
|
|
Hmmm..
ali si dovolj ali ne spremenil ne vem. Vem pa, da ko so problemi jih je dobro razdelit na več delov..
Predlagam, da najprej narediš začasni vmesnik med ploščo in LCD-jem in uporabiš nespremenjeno knjižnico. Če ti uspe to pognat korektno, potem nadaljuj z spreminjanjem knjižnice. _________________ Dokler bodo ljudje mislili, da živali ne čutijo, bodo živali čutile, da ljudje ne mislijo. |
|
Nazaj na vrh |
|
 |
Noordung Član


Pridružen-a: Tor 22 Jan 2008 18:07 Prispevkov: 23 Aktiv.: 0.11 Kraj: Škofja Loka
|
Objavljeno: Tor Okt 07, 2008 8:45 pm Naslov sporočila: |
|
|
No takole, končno sem si spet uzel čas za mojo plato tako, da je bil res volkov predlog izmed boljših.
Naj razložim: Knjižnica je skoraj vsa napisana v asemblerju zato sem si prebral celoten datasheet od hitacija. Potem sem šel v knjižnico od CVAVR in si vsako vrstico raztolmačil in napisal zraven komentar. Tako sem prišel do pomembne ugotovitve. Plata EasyAVR ima bit R/W vezan na maso, tako da mora biti knjižnica napisana tako, da nič ne uporablja tega bita. Po večini pa sem našel v drugih knjižnicah in tudi v te od CVAVR-ja, da kontroler tudi bere iz lcd-ja, se pravi spreminja vrednost R/W bita, in gleda, če je hitaci kontroller že sprejel dani ukaz, potem dadaljuje z naslednjim ukazom. Kontroler je čakal, da bo sprejel hitacijev povratni ukaz pa tega ni nikoli dočakal...zato je štrajkal.
Pred tem sem trdno verjel, da je ta bit nepomemben, saj samo pišemo na display.
Vmes sem si naredil prekonektor in stvar deluje, malo sem na začetku premešal knjižnice E,R/W,RS pine in definiral port
Še enkrat pa hvala volku in ostalim....sedaj pa novim dogodivščinam naproti!! |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|