avr lebegopontos muveletek -frekimero-
Moczik Gabor
pm at progzmaster.hu
Sun Sep 17 19:22:11 CEST 2006
Pal Lukacs wrote:
SIGNAL (SIG_OVERFLOW1)
> {
> cli (); //int ki
> TCCR1B &= 0xF8; //a timer 1 ki
>
> lcd_cls ();
> lcd_putstr ("Freq > 65,636 mHz");
Ez megszakitas?
Az LCD kezelo cuccokat vedd innen ki, nagyon huzza az idot, ilyenkor a proci
nem kaphat masik megszakitast...
> for (;;) //main-loop
> {
> /* timer1 idonkenti jelzes */
>
> if (i == 0) // timer1 ovf.1s -kent
> {
> cnt1_threshold = 1; // timer1- tol kert ido 1s
> }
Ugy nezem, az i es a cnt1_threshold redundans, tovabba ez a kodreszlet
minden ciklusban (valszeg az ido nagy reszeben feleslegesen) lefut.
Hagy el az i valtozot, helyette a cnt1_threshold-ot hasznald.
Tovabba amikor a cnt1_threshold-ot 1000-rol 1-re allitod, a cnt1-et is
nullazni kell.
(mert pl. 317-nel jar amikor 1-re allitod a threshold-ot, ilyenkor elszamol
65535-ig, tulcsordul es utana lesz csak 1 az erteke. De ezt valoszinuleg nem
vartad meg, mert jo sokaig tart)
> sprintf (buf, "%s%d%c%03d%s", "Freq: ", imp / 1000, '.',
> imp % 1000, " KHz");
Miert nem jo igy:
sprintf(buf,"Freq: %d.%03d kHz",imp/1000,imp%1000);
Kevesebb parametert kell atadni, szinte 100% hogy ez hatekonyabb kodot
eredmenyez.
> if (i == 0 && imp > 10000)
> {
> i = 1; //0.001S (1ms)idoalap
Ide ...
> i = 0; //1S idoalap
> // elooszto 128
Es ide kellene a cnt1=0, valamint az i-t kicsereled cnt1_threshold=0 es
=1000-re, meg feljebb az osszes feltetelt ami az i-t hasznalja...
--
((( Móczik Gábor )))--((( pm -> @ -> progzmaster -> . -> hu )))
((( Skype: moczik )))--((( Website: http://www.progzmaster.hu )))
More information about the Elektro
mailing list