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

Pridružen-a: Pon 14 Avg 2006 2:22 Prispevkov: 64 Aktiv.: 0.28 Kraj: Nazarje
|
Objavljeno: Ned Apr 27, 2008 10:06 pm Naslov sporočila: Kako vnesti sprintf |
|
|
Zivijo!
Prosil bi za pomoc pri naslednjem problmu.
Nasel sem spodaj napisani program za pisanje po GLCD:
void LCDprintf(unsigned char y, unsigned char page, flash unsigned char *Str,...)
{
unsigned char n;
unsigned int yy;
SetColumn(y);
SetPage(page);
SetColumn(y);
for (n = 0;Str[n]!=0;n++){
yy=(*(Str+n));
yy*=8;
SendLCDData(&Character8x8[yy], 8 );
}
}
in le ta lepo deluje, ce napisem :
LCDprintf (0,0,"POZDRAV");
mi ispise na GLCD:
POZDRAV
Ce pa zelim izpisati spremenljivko :
LCDprintf (0,0,"Napetost = %d",ADC[0]); //ispise vrednost na vhodu ADC 0
pa mi ispise na GLCD naslednje:
Napetost = %d
mislim da bi moral uporabiti ukaz "sprintf" samo ne vem kam naj ga vnesem in kako!
Mi lahko kdo pomaga
lp |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Ned Apr 27, 2008 11:32 pm Naslov sporočila: |
|
|
sprintf je sorodna funkciji printf, le da sprintf zapiše formatiran niz v spremenljivko. Torej narediš nekaj takega:
Koda: |
char niz[20];
sprintf (niz, Napetost = %d",ADC[0]);
LCDprintf (0,0,niz); |
LP! |
|
Nazaj na vrh |
|
 |
damo123 Član

Pridružen-a: Pon 14 Avg 2006 2:22 Prispevkov: 64 Aktiv.: 0.28 Kraj: Nazarje
|
Objavljeno: Pon Apr 28, 2008 12:05 am Naslov sporočila: |
|
|
Hvala za navedeni primer.
Sem vnesel kakor je napisano
Vendar mi compiler Code Vision sedaj javi napako:
"pointers are to different memory classes"
Predvidevam, da oni podatki, ki pridejo od funkcije sprintf se nekako ne morejo vpisati, ko klicem funkcijo LCDprintf.
No nekaj napredka me je pripeljalo do novih tezav zato ponovno prosim se za malo pomoci.
lp
Damjan |
|
Nazaj na vrh |
|
 |
damo123 Član

Pridružen-a: Pon 14 Avg 2006 2:22 Prispevkov: 64 Aktiv.: 0.28 Kraj: Nazarje
|
Objavljeno: Pon Apr 28, 2008 12:12 am Naslov sporočila: |
|
|
Mogoce tale podatek lahko kaj pripomore k resitvi moje tezave
void sprintf(char *str, char flash *fmtstr,...);
to sem nasel pod stdio.h
lp |
|
Nazaj na vrh |
|
 |
damo123 Član

Pridružen-a: Pon 14 Avg 2006 2:22 Prispevkov: 64 Aktiv.: 0.28 Kraj: Nazarje
|
Objavljeno: Pon Apr 28, 2008 2:21 am Naslov sporočila: |
|
|
Hvala za pomoc
Primer sem ze resil
in sicer sem naredil tako, da posebej dolocis pozicijo napisa in nato vpisem se vsebino.
Glavni program zgleda nekako takole:
void main(void)
{
ADCV[1] = read_adc(1)*0.4; // *1.6 za 8 bit, 0.4 za 10 bitov
sprintf(lcd_buffer, "Napetost = %u.%02uV", ADCV[1]/100, ADCV[1]%100); //preracuna
LCD_printf_pos(0, 0); //dolocim lokacijo napisa
LCD_printf(lcd_buffer); //vsebina
}
podprogram pa zgleda takole:
void LCD_printf_pos(unsigned char y, unsigned char page)
{
SetColumn(y);
SetPage(page);
SetColumn(y);
}
void LCD_printf( char *Str)
{
unsigned char n;
unsigned int yy;
for (n = 0;Str[n]!=0;n++){
yy=(*(Str+n));
yy*=8;
SendLCDData(&Character8x8[yy], ;
}
}
Zanima pa me, ce sem kje "pihnil mimo" in naredil kako napako, kajti ni mi cisto jasno glede flash, ne vem tocno kaj pomeni in kaj naredi.
Saj res, napis izgleda takole:
Napetost = 1.72V
lp |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Pon Apr 28, 2008 8:59 am Naslov sporočila: |
|
|
V tvojem programu nikjer ne vidim predpone "flash", predvidevam, da imaš to tam kjer je definirana pisava. Predpona flash pred definicijo variable pomeni, da bo le ta zapisana v flash pomnilnik mikrokontrolerja. Uporablja se za konstante, ki zavzamejo veliko prostora, da ne trošiš rama zanje. Ne moreš pa jim spreminjaat vrednostui med delovanjem, ker so pač konstante. <-- za znalce; A se jih da spreminjat? pri lpc-jih obstaja nek način, kaj pa tukaj pri avrjih?? _________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pon Apr 28, 2008 9:16 am Naslov sporočila: |
|
|
Se znajo sami preprogramirati ? Ce da, potem jih lahko spremenis, ce ne, potem pac ne.
Vsekakor je pa to zamudno in precej nesmiselno pocetje, saj jih lahko spremenis samo v nekaj drugega, tisto "nekaj drugega" pa mora biti tudi nekje shranjeno: ali tudi v flashu (potem lahko direktno to izpises berz dodatne kode za prepis vsebine) ali pa v RAMu (potem ne potrebujes tega najprej v flashu, ce bos tako ali tako v RAMu moral zgenerirati). _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
dragoon Član


Pridružen-a: Čet 03 Maj 2007 21:51 Prispevkov: 452 Aktiv.: 2.05 Kraj: Trojane
|
Objavljeno: Pon Apr 28, 2008 10:00 am Naslov sporočila: |
|
|
Zanje obstajajo bootloaderji. Torej se znajo? Uporabno bi bilo za dataloging. Pač pišeš v flash, ki ga imajo kar dosti, eeproma hitro zmanjka.
Namene imam narest eno specialno vremensko postajo, ki bi pač shranjevala podatke en teden, dva,... potem pa enkrat ko bi prišel naokoli samo prenesel na računalnik, tam pa nadalje obdeloval (grafi pa to...) _________________ LP, Mitja |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Tor Apr 29, 2008 12:25 am Naslov sporočila: |
|
|
Zakaj bi sploh ugibal ? -> datasheet, to mora biti navedeno  _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
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
|