Hi Forum,
ich bereite mich immer noch auf eine Klausur im Fach
Microprozessortechnik vor.
Ich habe mir die Aufgabe gestellt, 20 Impule in einer bestimmten
Frequenz auszugeben.
Mein Problem liegt dabei in dem Zählen der Impulse.
Ach übrigens: Da ich erstaml was lauffähiges Zaubern will habe ich es
erstmal ohne ISR zu machen.
Ich habe also ein Endlosschleife laufen:
U8 i=0; //Laufvariable
for(;;)
{
If (TCF0.CNT == 0)
{
i++;
if(i<40)
{
PORTE.OUTTGL = Ledx;
}
}
}
Nur zum Problem:
Das das Progi nicht läuft habe ich die Laufvariable untersucht und auf
PORTE.OUTCLR = i; ausgegeben.
Und da sieht man das die scheinbar mit dem ersten cnt-impuls LED0 bis
LED6 angehen und anschließenden (beim nächsten cnt-takt) geht noch LED7
an.
Die wertzuweisung bei U8 i=0; hat überhaupt keinen einfluss.
Wertzuweisung inerhalb der endlosschleife funktioniert zwar, aber ist
nicht sinnvoll da diese ja bei jedem schleifendurchlauf wieder auf 0
gesetzt wird.
Habt Ihr da ne Idee was man machen kann???
Danke
TT
TT schrieb: > for(;;) > { > If (TCF0.CNT == 0) > { > i++; > if(i<40) > { > PORTE.OUTTGL = Ledx; > } > } > } Schrecklich formatiert. So als Tip: Wie lange wird die Bedingung TCF0.CNT == 0 wahr sein? Mit Sicherheit mehrere Programmdurchläufe. Also wird pro "Nullsein" mehrmals hocgezählt.
Ja, soory wegen der Formatierung. Ich habe es einfach nur abgetippt. Warum aber funktioniert das Toogln? Ich habe Vorteiler = 1024 und PER = 2000. Das Toogeln ergibt ca. 1hz. Meinst du da etwa das CNT==0 für 1024x (System)Takte High ergibt? Das würde ich bedeuten wenn ich VT runterschraube und PER richtig hoch könnte es was werden? Ich mach mal nen Versuch. Danke für den Tipp. TT
TT schrieb: > Das würde ich bedeuten wenn ich VT runterschraube und PER richtig hoch > könnte es was werden? nein, du darst nur bei einem Wechsel von 0 auf 1 deine Variable hochzählen. Also den Alten wert merken und dann vergleichen.
Leuchtet mit ein. Der VT hält CNT auf 0 und die endlosschleife fragt jedes mal ab und adddiert 1 dazu. Die Wert verändern hatte übrigens nur zur Folge das beim start LED0 bis Led5 angingen. Kannst du mir noch nen Tip geben wie ich vom TCF0.CNT ne Flankenauswertung mache? Dabei habe ich jetzt echt Probleme :-( Danke TT
TT schrieb: > Kannst du mir noch nen Tip geben wie ich vom TCF0.CNT ne > Flankenauswertung mache? Tipp steht doch schon da: > Also den alten wert merken und dann vergleichen.
Wer lesen kann.... Ihr wisst schon!
Auf jeden Fall läuft es: freu!!!
hier nun die Endlosschleife
for(;;)
{
//Endsloschleife
if((TCF0.CNT==0) && (i==r1))
{r1=i;
if(i<=19)
{
PORTE.OUTTGL = O0;
}
i++;
}
if(TCF0.CNT==2000)
{
r1=i;
}
}
Ich lasse meine LED (O0) nun 10x blinken und dann bleibt sie aus.
Sicherlich müsste man jetzt noch was für den überlauf von i machen.
aber das ist ne andere Baustelle.
Vielen Dank nochmals für die Hilfe.
By
Toni
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.