Problem mit Laufvariable Atmel XMEGA8

Gast #2380696
Lesenswert?
• ▲
▼
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
Gast #2380709
Lesenswert?
• ▲
▼
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.
Gast #2380725
Lesenswert?
• ▲
▼
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
Gast #2380796
Lesenswert?
• ▲
▼
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
Gast #2380872
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.