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 

Prikaz stevca na LCD preko ATMEGA32

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika za začetnike
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Ned Sep 07, 2014 2:11 pm    Naslov sporočila:  Prikaz stevca na LCD preko ATMEGA32 Odgovori s citatom

LP

Nekaj časa se že učim programiranje C++ za atmega32 AVR. Ali mi mogoče lahko pomagate kako prenesti vrednost nekega integerja v izpis na LCD,

Primer:


while (bit_is_clear(PINA,0));// Pogoj za štetje na tipki ali senzorju
stevec1++;// Povečaj števec1 za 1.


init_lcd();// vključimo LCD
lcd_cmd(0x80);// Določim naslov prikaza
lcd_send_string("stevec1:");// Izpis vrednosti integerja
lcd_cmd(0xC0);

Nikakor ne morem razvozlati kako naj prenesem neko vrednost v ta LCD zapis:

Če recimo :

while (bit_is_clear(PINA,0));// Pogoj za štetje na tipki ali senzorju
a++;// Povečaj števec1 za 1.

bo on štel integer a 1 in naprej ne potem pa bi recimo rad, da mi prikaže to vrednost v zapisu na LCD

recimo:

init_lcd();// vključimo LCD
lcd_cmd(0x80);// Določim naslov prikaza
lcd_send_string("količina: a");// Izpis vrednosti integerja
lcd_cmd(0xC0);

zelo se vam zahvaljujem za pomoč pri tej uganki.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
int47
Član
Član



Pridružen-a: Pon 15 Dec 2003 0:10
Prispevkov: 2105
Aktiv.: 8.86
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 07, 2014 2:39 pm    Naslov sporočila:   Odgovori s citatom

Ena možnost bi bila z itoa(); pretvoriš int spremenljivko v ASCII string, ki ga nato izpišeš na LCD.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5824
Aktiv.: 24.52
Kraj: Grosuplje

PrispevekObjavljeno: Ned Sep 07, 2014 3:04 pm    Naslov sporočila:   Odgovori s citatom

Kot je napisal @int47, spremenljivko stevec1 je potrebno spremeniti v string, da ti bo to spremenljivko izpisalo. Sedaj ti na LCDju napiše stevec1:.
Če bi prilepil knjižnjico za LCD, v kateri so funkcije lcd_send_string(), init_lcd(), lcd_cmd(),....., bi bilo veliko lažje.

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
pogorevc
Član
Član



Pridružen-a: Pet 16 Avg 2013 23:07
Prispevkov: 53
Aktiv.: 0.37

PrispevekObjavljeno: Ned Sep 07, 2014 4:42 pm    Naslov sporočila:   Odgovori s citatom

LP

Prilagam knjižnico za LCD:

//Function for sending commands to LCD
void lcd_cmd(unsigned char command){
//Put command on the Data Bus
PORTC = command;
//Enable LCD for command writing
PORTD = 0b10000000;
//Allow delay for LCD to read the databus
_delay_ms(2);
//Disable LCD again
PORTD = 0b00000000;
//Allow some more delay
_delay_ms(2);
}

//Function for sending Data to LCD
void lcd_data(unsigned char data){
//Put data on Data Bus
PORTC= data;
//Set R/S (Regiter Select) to High, and Enable to High
PORTD = 0b10100000;
//Allow for delay
_delay_ms(2);
//Disable LCD again
PORTD = 0b00100000;
//Allow for some more delay
_delay_ms(2);
}

//Function to send String to LCD
void lcd_send_string(char* string){
while(*string){
//Send value of pointer as data to LCD
lcd_data(*string);
//Increment string pointer
string++;
}
}

//Function to Initilise LCD by sending appropriate Commands
void init_lcd(){
//Setup both lines of LCD
lcd_cmd(0x38);
//Set Cursor off - Enable LCD
lcd_cmd(0x0E);
//Clear Screen
lcd_cmd(0x01);
//Goto first position
lcd_cmd(0x80);
}

init_lcd();
lcd_cmd(0x01);
lcd_cmd(0x80);// Določim naslov prikaza
lcd_send_string("Pozdravljeni!");// Izpiše LCD besedilo
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.: 15.96

PrispevekObjavljeno: Ned Sep 07, 2014 6:13 pm    Naslov sporočila:   Odgovori s citatom

To je vse? Saj skoraj vse manjka.

Funkcija mora vsebovati pretvorbo 16-bitne int vrednosti v 5 znakov.
Včasih bi bila blagodejna tudi izbira poravnave in število cifer za izpis da jo kličeš kot
int2lcd(vrednost, poravnava, cifre);

Ravno ta teden moram naprimer dodati desno poravnavo in izpis treh cifer (temperatura do 250"C) v Arduino UTFT knjižnico. Brez ničel ali podlage znakov spredaj. Prazna cifra samo pobriše cifro z ozadjem polja in kurzor prestavi..

_________________
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
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5824
Aktiv.: 24.52
Kraj: Grosuplje

PrispevekObjavljeno: Ned Sep 07, 2014 7:20 pm    Naslov sporočila:   Odgovori s citatom

@pogorevc: za začetek naštudiraj tole, še pred tem pa preštudiraj npr. kakšno int vrednost ima znak 1 (ali katerikoli drugi ASCII znak).
Druga varianta pa je, da si potegneš dol Arduino knjižnjico za LCD in jo preštudiraš (lahko jo tudi uporabiš Very Happy ).

_________________
Lp, Jaka
Nazaj na vrh
Skrit 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 -> Elektronika za začetnike Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
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: 9 dni


Powered by phpBB © 2001, 2005 phpBB Group