mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Studio Simulator Timer ???


Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da meine Harware noch nicht fertig ist, arbeite ich zur Zeit mit dem AVR
Studio 4 Simulator. Controller ist der ATMEGA2561.
Ich habe einen 16Bit Timer zur PWM erzeugung Initialisiert und er zählt
auch und zum Compare Match wird der PIN auf High gesetzt. Wie es auch
sein sollte. Erreciht der Timer jedoch das TOP Level wird der PIN nicht
wieder auf LOW gesetzt. Ist das ein BUG im Smulator? Kennt das jemand,
oder ist da einfach ein Fehler, den ich nicht blicke?
Compiler ist der CodeVison AVR 1.25.1.

Hier der C-Code

#include <mega2561.h>

void main()

{
    #asm("sei");

    GTCCR=0x00;

    //Timer für Soundausgabe über PWM
    // PB6 OC1 SIG_PWM 16BIT
    TCCR1A= 0b00110011;     //Fast PWM Mode, Set OC1B on Compare Match,
clear on TOP. OC1A/C not active
    TCCR1B= 0b00011000;     //No Clock, Timer Stoped. Fast PWM Mode
    TCCR1C= 0b00000000;     //only active if "non PWM Mode"

    OCR1AH= 0x00;           //Define TOP Value
    OCR1AL= 0x7A;           //
    OCR1BH= 0x00;           //Define Compare Level
    OCR1BL= 0x56;
    TIMSK1= 0b00000000;     //Timer Overflow Interrupt enabled

    TCCR1B|=0x01;           //Starts the timer

    while(1)
    {
    #asm ("nop");
    }
}

Vielen Dank,

Tobias

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fehler finde ich im Code jetzt nicht. Der Timer scheint nach Abgleich
mit dem Datenblatt korrekt initialisiert zu sein. Ein Bug im
AVRStudio-Simulator ist durchaus denkbar. Wäre nicht der erste.

Es wäre (für die Zukunft) sinnvoll, wenn Du die Steuerregister nicht
mit binären Bitmasken beschreibst sondern die Namen der Steuerbits
verwendest. Das macht den Code wesentlich leichter lesbar. Also z.B.

TCCR1B = (1 << WGM13) | (1 << WGM12);
statt
TCCR1B= 0b00011000;


> TIMSK1= 0b00000000;     //Timer Overflow Interrupt enabled

Vielleicht auch drauf achten, dass der Kommentar zum Code passt, und
nicht wie hier Verwirrung stiftet...

BTW:
Hinter Präprozessor-Direktiven kommt kein Semikolon (in diesem Fall
hieße es #asm("nop")). Ist hier nicht schlimm, aber es kann, wenn man
nicht drauf achtet, zu Fehlern führen, v.a. bei #define.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke erst mal für die Tips. Das mit dem Kommentar kommt durch das
ständige Probieren und Ändern.
Der Code ist echt viel besser lesbar wenn man das so macht.
Also lass ich mich dadurch erst mal nicht beirren und warte auf die
Hardware.

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ja manchmal gibt es Fehler im Simulator. Bei mir trat kein Interrupt
auf obwohl einer auftreten sollte.
Wollte es testen ging aber nicht in meinem AVR-Studio.

daniel

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht es Sinn den BUG Jemanden mitzuteilen, damit da im nächsten Update
geändert wird, oder kümmert sich da eh keiner drum?

Autor: Cathrel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, es macht Sinn, denn die Fehler (auch in Datenblätter) werden
korrigiert. Du musst einfach zuerst in der "known errors" des
Programm schauen ob er bereits gelistet ist.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Über den Timer 1 steht nichts unter 'Known Issues'.
Wenn es Probleme mit AVRStudio gibt, schreibt man sinnvollerweise
direkt eine EMail an avrbeta@atmel.com
Das kommt dann gleich an der richtigen Stelle an. Der Support für
AVRStudio läuft über ATMEL Norwegen:
http://www.atmel.no/beta_ware/
Da gibts auch immer die neuesten Updates.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du auch den vom Compiler/Wizzard erzeugten Code mit dem Datenblatt
verglichen, insbesondere TCCR1? Auch da könnte natürlich schon ein
Fehler vorliegen, noch dazu, da der support für den 2561 noch recht neu
ist?

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Adressen im Header stimmen mit dem im Datenblatt überein. Es
Funktioniert ja auch ein Mode, bei dem der Ausgangspin im Compara Match
Toggelt. Es könnte nun noch am Compiler liegen, dass der bei der
Umsetzung von C in Assembler was falsches macht, aber davon gehe ich
nicht aus, oder sollte man das auch überprüfen?

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich ja im Simulator auch alle Register ansehen und die
Initialisierung des Timers stimmt mit meiner in C Code überein.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
darum gehts doch gar nicht, sondern darum, was der code-wizzard aus der
von dir gewünschten Funktion gemacht hat. Diese Zuordnung
Funktion->TCCR1A,TCCR1B kann durchaus Fehler enthalten. Entweder
Unachtsamkeit beim Compilerbauer oder Benutzung von vorläufigen
Datenblättern.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab den Code-Wizzard garnicht genutzt. Hab die Register nach den
Vorgaben im Datenblatt beschrieben.

Autor: Tobias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der MEGA2561 ist außerdem garnicht im Code-Wizzard vorhanden

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, dann ist das was anderes.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Hatte gleichen Fehler im Simulator. Hat mich ein paar Stunden Suche
gekostet. Trotzdem lief hardwareseitig alles korrekt. Am besten mit
Oszi anschauen, spart viel Zeit.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.