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 

Kako vnesti sprintf

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja AVR-jev
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
damo123
Član
Član



Pridružen-a: Pon 14 Avg 2006 2:22
Prispevkov: 64
Aktiv.: 0.28
Kraj: Nazarje

PrispevekObjavljeno: Ned Apr 27, 2008 10:06 pm    Naslov sporočila:  Kako vnesti sprintf Odgovori s citatom

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



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Ned Apr 27, 2008 11:32 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pon 14 Avg 2006 2:22
Prispevkov: 64
Aktiv.: 0.28
Kraj: Nazarje

PrispevekObjavljeno: Pon Apr 28, 2008 12:05 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pon 14 Avg 2006 2:22
Prispevkov: 64
Aktiv.: 0.28
Kraj: Nazarje

PrispevekObjavljeno: Pon Apr 28, 2008 12:12 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pon 14 Avg 2006 2:22
Prispevkov: 64
Aktiv.: 0.28
Kraj: Nazarje

PrispevekObjavljeno: Pon Apr 28, 2008 2:21 am    Naslov sporočila:   Odgovori s citatom

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], Cool;
}
}


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



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.05
Kraj: Trojane

PrispevekObjavljeno: Pon Apr 28, 2008 8:59 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Pon Apr 28, 2008 9:16 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 03 Maj 2007 21:51
Prispevkov: 452
Aktiv.: 2.05
Kraj: Trojane

PrispevekObjavljeno: Pon Apr 28, 2008 10:00 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.57

PrispevekObjavljeno: Tor Apr 29, 2008 12:25 am    Naslov sporočila:   Odgovori s citatom

Zakaj bi sploh ugibal ? -> datasheet, to mora biti navedeno Wink
_________________
Ka ti bo pa torba ce si kupu kolo ?
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 -> Osnove programiranja AVR-jev Č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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group