Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

LCD 2*16 in C
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 3:04 pm    Naslov sporočila: LCD 2*16 in C Odgovori s citatom

Lep pozdrav!
Imam en problem. V C-ju sem naredil svojo knjižnico, za pisanje na alfanumerični display. Med drugim, vsebuje tudi funkcijo, ki izpiše na prikazovalniku nek string (besedo). Funkcija zgleda takole:
lcd-string("beseda");.
Sedaj me pa zanima, kako naj na prikazovalnik izpišem vrednost kakšne spremenljivke, kajti če v mojo funkcijo namesto "beseda" napišem ime spremenljivke, se bo na lcd-ju prikazalo to ime, ne pa njena vrednost?
Uporabljam pa winavr in atmega16

_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Čet Nov 01, 2007 3:25 pm    Naslov sporočila: Odgovori s citatom

sprintf(), preberi help.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 3:44 pm    Naslov sporočila: Odgovori s citatom

hvala za odgovor
_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Čet Nov 01, 2007 6:07 pm    Naslov sporočila: Odgovori s citatom

Gustav, a lahko malo bolo natančno prosim poveš, kako naj to funkcijo uporabim. Sem mislil, da bom lahko sam ugotovil s pomočjo helpa, vendar mi ni parav dosti jasno to, kar tam piše.
_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Pet Nov 02, 2007 12:16 am    Naslov sporočila: Odgovori s citatom

Ta funkcija obdela niz znakov, v katerem so lahko vstavljene razne spremenljivke (razlicnih tipov), glede na prednastavljene parametre (od zamika, stevila mest, paddinga nicel, itd.). Rezultat - za razliko od printf() - "zapise" v ciljno spremenljivko, sicer je pa delovanje identicno. Printf zagotovo poznas ... ce ne, pa je to tako zelo osnovna stvar, da je na siroko obrazlozena v vsakem tutorialu za C Wink

Uporabis jo tako, da ji kot parameter podas niz za formatiranje ter parametre za oblikovanje, rezultat, ki je ze v dokoncni obliki pa potem podas tvoji funkciji za izpis (lcd-string()), ki ga spravi na zaslon.

P.S. vezaj je slab znak za vkljucitev v ime funkcije, saj nekateri ljudje prisejo kodo tako nepregledno, da pred in za operatorji ne dajo presledkov in je zato koda precej manj berljiva ce se v njej znajdejo tudi funkcije z '-' v imenu.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Pet Nov 02, 2007 9:14 am    Naslov sporočila: Odgovori s citatom

Kaj pa je ta parameter za oblikovanje? V helpu piše, da rabi funkcija dva parametra(__s, __fmt). Najberš je ta __s string, ki ga podamo, samo kaj pa je potem __fmt.

Nisem prepričan, če ste me prav razumeli. Jaz imam neko spremenljivko, ki ima svojo vrednost (npr. a=150). Sedaj pa bi rad poklical mojo funkcijo za pisanje po lcd-ju, vendar bi rad da se izpiše 150 in na a. Se pravi, moral bi iz enaga integerja ali char-a naredeti string s tremi mesti:
string[0]=<ascii koda za št.1>
string[1]=<ascii koda za št.5>
itd.
To funkcijo bi sicer lahko šel sam pisati, vendar se stvari zakomplicirajo, če mora biti funkcija taka, da bi delovala v vseh primerih, saj bi najprej morala določiti število mest, število decimalnih mest, zbrisati vse nepotrebne ničle...

Upam, da sem malo bolje razložil moj problem. Ali še vedno mislite, da bi ga lahko raešil s sprintf funkcijo?

_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Pet Nov 02, 2007 9:18 am    Naslov sporočila: Odgovori s citatom

Mi smo te super razumeli, bojim pa se, da nas ti nisi - oblikovanje je povsem identicno ukazu printf(), ki je opisan v vsakem C tutorialu, katerih je na Internetu malo morje.

buffer = sprintf("%d", a);
lcd-string(buffer);
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Pet Nov 02, 2007 9:14 pm    Naslov sporočila: Odgovori s citatom

Sem sprobal, pa še vedno ne dela Sad . Lcd izpiše kar neke čudne znake. Sem pa malo pogledal tisti tutorial, pa mi ni jasno, če naj bi sprintf() izpisal znake v neko spremenljivko, kak naj to naredi, če spremenljivka ni definirana kot string, ampak npr. navaden char.
Moje drugo vprašanje pa je, kaj naj bi bil tisti "%d"?
Še zadnje vprašanje pa se glasi, ali se vsega tega ne bi dalo narediti tako, da bi malo prihranil na flash pomnilniku, saj samo že prokram, ki izpiše neko spremenljivko na LCD zasede cca 2,3 kB pomnilnika. Pri atmega16 to ni problem, če bi pa isti program hotel vpisati v npr. attiny2313, pa to ne bi šlo, saj ima "samo" 2 kB flasha.
p.s. Moja funkcija za izpis stringa prispeva pribljižno 600 B k zasedenosti pomnilnika. Ali je to veliko za takšno funkcijo in ali bi jo lahko kako zmanjšal?

_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Pet Nov 02, 2007 9:30 pm    Naslov sporočila: Odgovori s citatom

Ni char, je niz znakov (najbrz pointer tipa char, ki kaze na niz znakov ... seveda je potrebno prostor zanj alocirati, da kaj kar tretjega ne pregazi). Jaz za take primere uporabim kar staticen niz znakov, torej prealociran in fiksne dolzine.

%d je parameter za oblikovanje znakovnega niza, ki pove, da je potrebno vrednost spremenljivke interpretirati kot celo stevilo, kar je lepo razlozeno vseh v tutorialih za C, na katere sem ti dal povezavo vceraj in katere bi res moral prebrati, saj ti delajo tezave cisto osnovni konstrukti jezika in njegova verjetno najpogosteje uporabljana funkcija (tudi pri MCUjih !).

Vcasih je bilo potrebno za to kupiti oz. si izposoditi knjigo, danes pa imas vse na Internetu ZASTONJ Idea
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
sandi
Profesionalec


Pridružen/-a: Pet Nov 2006 20:36
Prispevkov: 55

PrispevekObjavljeno: Čet Jan 24, 2008 1:17 pm    Naslov sporočila: Odgovori s citatom

Kar nekaj časa se vrtim okrog kode:

lcd_clear();
stanje= lcd_sprintf("%d",x);
lcd_string(stanje);

vedno mi napiše undefined symbol `lcd_sprintf`
Kje sem naredil napako.
Delam s CodeVisionAVR.

_________________
vsak začetek je težak-hvala za pomoč!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Gustav
Profesionalec


Pridružen/-a: Pon Jun 2005 17:19
Prispevkov: 768

PrispevekObjavljeno: Pet Jan 25, 2008 8:28 pm    Naslov sporočila: Odgovori s citatom

Kaj pa naj bi bilo to lcd_sprintf() ? V C-ju obstaja funkcija sprinf(), brez prefiksa "lcd_". Pobrisi to pa bo delovalo (ce je preostanek programa pravilen).
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
sandi
Profesionalec


Pridružen/-a: Pet Nov 2006 20:36
Prispevkov: 55

PrispevekObjavljeno: Sob Jan 26, 2008 8:40 pm    Naslov sporočila: Odgovori s citatom

Poskušal sem tudi to vendar ni uspešno. Prilagam kodo celega programa pri katerem javi napako v zgoraj omenjenem ukazu.

#include <tiny26>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd>

#define tipka PINB.0
#define led PORTB.1
unsigned char a;
unsigned int stanje;
unsigned int x;

void main(void)
{
Func0=In
State0=T
PORTA=0x00;
DDRA=0x00;

Func0=In
PORTB=0x02;
DDRB=0x02;


TCCR0=0x00;
TCNT0=0x00;
PLLCSR=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;
GIMSK=0x00;
MCUCR=0x00;
TIMSK=0x00;
USICR=0x00;
ACSR=0x80;
lcd_init(16);
lcd_putsf("dela") ;
a=1; stanje=0;
while (1)
{
led=tipka;
if ((a=0)&(tipka==0))
{stanje++;
lcd_clear();
stanje= sprintf("%d",x);
lcd_string(stanje);
a=1;
}
if ((tipka==1)&(a=1))
{
a=0;

};


};
}

_________________
vsak začetek je težak-hvala za pomoč!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Domenius
Profesionalec


Pridružen/-a: Čet Feb 2005 15:58
Prispevkov: 75
Kraj: Trbovlje

PrispevekObjavljeno: Ned Jan 27, 2008 12:53 pm    Naslov sporočila: Odgovori s citatom

Mogoče javlja napako ker nimaš .h na koncu header datotek pri #include.
_________________
It's electric!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
sandi
Profesionalec


Pridružen/-a: Pet Nov 2006 20:36
Prispevkov: 55

PrispevekObjavljeno: Ned Jan 27, 2008 7:59 pm    Naslov sporočila: Odgovori s citatom

to si čarovnik sam postavi in mi je do sedaj bilo vse ok.
_________________
vsak začetek je težak-hvala za pomoč!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
sandi
Profesionalec


Pridružen/-a: Pet Nov 2006 20:36
Prispevkov: 55

PrispevekObjavljeno: Ned Jan 27, 2008 8:08 pm    Naslov sporočila: Odgovori s citatom

sem poskusil dodati #include.h in zamenjat #include <tiny26> z prejšnjim ukazom pa javi še več napak.
_________________
vsak začetek je težak-hvala za pomoč!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski č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
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group