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


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Sre Dec 22, 2010 5:41 pm Naslov sporočila: Atmega16 in GLcd |
|
|
Pozdrav !
Pri pisanju programa sem naletel na težavo, ki je sledeča: pri izpisu na grafični lcd 128x64, se opazi hitro utripanje (osveževanje) zaslona. Kako se to lahko odpravi ? Del programa, kjer se to opazi:
Koda: |
void meritev()
{
SREG_I_bit=1 ; // vklop prekinitve
Glcd_Fill(0x00);
Glcd_Set_Font(Font5x7,5,7,32);
Glcd_Write_Text("Povrsina:",1,5,2);
Glcd_Set_Font(Character8x7, 8, 7, 32);
Glcd_Write_Text("Hektar meter", 12, 0, 2);
while(1)
{
Glcd_Fill(0x00);
A=((dolzina*sirina)/prehod); // izračun površine
IntToStr(A,Astr); // pretvorba iz int. v string za izpis
Glcd_Set_Font(Font5x7,5,7,32);
Glcd_Write_Text("Povrsina:",1,5,2);
Glcd_Set_Font(Character8x7, 8, 7, 32);
Glcd_Write_Text("Hektar meter", 12, 0, 2);
Glcd_Set_Font(Font5x7,5,7,32);
Glcd_Write_Text(Astr,50,5,2);
}
} |
Torej, ko pride do prekinitve, se nek števec poveča za ena oz. nastavljeno vrednost, potem pa se izračuna površina.
Ker nisem še vešč programiranja bi vas vprašal, ali se da kako odpraviti to "blinkanje" zaslona.
Poizkusil sem kvarc zamenjati s hitrejšim (prej 8Mhz, sedaj pa je 16 Mhz), pa se stvar še vedno opazi.
Aja če koga zanima, program je pisan v MikroC. |
|
Nazaj na vrh |
|
 |
infernal Član


Pridružen-a: Pet 29 Jun 2007 0:46 Prispevkov: 239 Aktiv.: 1.09 Kraj: Maribor
|
Objavljeno: Sre Dec 22, 2010 6:36 pm Naslov sporočila: |
|
|
Blinka zaradi ukaza:
|
|
Nazaj na vrh |
|
 |
RUros Član


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Sre Dec 22, 2010 7:00 pm Naslov sporočila: |
|
|
Ja to vem, samo če ne pobrišem zaslona potem mi prepisuje vrednost, ki jo izpisujem na LCD in tako se nič ne vidi, ker je eno čez drugo . |
|
Nazaj na vrh |
|
 |
chaos Član


Pridružen-a: Sob 16 Sep 2006 22:12 Prispevkov: 1063 Aktiv.: 4.66 Kraj: Zagorje ob Savi
|
Objavljeno: Sre Dec 22, 2010 7:12 pm Naslov sporočila: |
|
|
To se ponavadi naredi tako, da se piše samo na lokacije, ki so bile spremenjene - lahko si npr. v pomnilnik shraniš dve kopiji bufferja, in jih pred pisanjem v glcd primerjaš. Ali si pa narediš novo spremenljivko, v kateri vsak bit pomeni en blok (ponavadi 1x8 ali 8x1), ki ga je treba prepisati.
LP! |
|
Nazaj na vrh |
|
 |
RUros Član


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Sre Dec 22, 2010 8:50 pm Naslov sporočila: |
|
|
Sedaj sem naredil takole pa še vedno miglja tam kjer prepišem. Uporabil sem eno for zanko v kateri pobrišem mesta v vrstici tam kjer prikazujem številko.
Pa mi ni jasno zakaj, manj kot je za pobrisat, bolj utripa . Če npr. brišem celo vrstico, potem se ne opazi toliko, kot pa če brišem samo 4 cifre.
Koda: |
while(1)
{
A=((dolzina*sirina)/prehod); // izračun površine
IntToStr(A,Astr); // pretvorba iz int. v string za izpis
Glcd_Set_Font(Font5x7,5,7,32);
Glcd_Write_Text(Astr,50,5,2);
for(i=55;i<95;i++)
{
Glcd_Set_Side(i);
Glcd_Set_Page(5);
Glcd_Set_X(i);
Glcd_Write_Data(0);
}
} |
EDIT: No sem nekako po svoje rešil . Pred zanko sem dodal 100ms delay, ki zamrzne sliko, za ta čas, tako da je sedaj utripanje na 100 ms komaj opazno . Ker v programu ne pričakujem velikih hitrih sprememb tega prikazovanja, mislim da ta zakasnitev ne bo tako moteča.
Če pa kdo pozna kakšno drugo rešitev pa se priporočam . |
|
Nazaj na vrh |
|
 |
nakamichi Član

Pridružen-a: Pon 21 Avg 2006 18:51 Prispevkov: 845 Aktiv.: 3.69 Kraj: Nova Gorica
|
Objavljeno: Čet Dec 23, 2010 9:34 am Naslov sporočila: |
|
|
Funkcija GoTo(x, y); ne pomaga?
L.P.,
Miha |
|
Nazaj na vrh |
|
 |
RUros Član


Pridružen-a: Čet 09 Mar 2006 22:26 Prispevkov: 1031 Aktiv.: 4.39
|
Objavljeno: Čet Dec 23, 2010 9:54 am Naslov sporočila: |
|
|
Nisem še sprobal, sem uporabil kar to, ker se mi zdi, da je še najenostavneje. Pobrišem celo vrstico oz. približno tam, kjer se prikaz spreminja. Z GoTo pa bi moral verjetno vedeti katere pixle pobrisati, in preden bi ugotovil kateri so ti pixli . Ker sem vedel v katero vrstico pišem sem pobrisal kar vrstico. |
|
Nazaj na vrh |
|
 |
jvolk Član



Pridružen-a: Ned 05 Mar 2006 1:14 Prispevkov: 737 Aktiv.: 3.14 Kraj: okolica Divače
|
Objavljeno: Čet Dec 23, 2010 3:30 pm Naslov sporočila: |
|
|
V while zanko dodaj 40ms delay. |
|
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: 494 dni
Powered by phpBB © 2001, 2005 phpBB Group
|