mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR- Studio- Simulator, startet neu


Autor: Student (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe folgendes Problem, wenn ich im AVR- Studio simuliere, 
startet es den den Controller neu, sprich er beginnt wieder in Main, 
allerdings werden die Werte im TCNT0- Register nicht resetet. Ich 
programmiere mit dem aktuellsten WinAVR in C, der Controller ist ein 
ATMEGA 162, mit der Quarzfrequenz 3.6864 MHz, welche auch im Debugger 
eingestellt ist, dürfte aber eigentlich nichts zur Sache tun, weil das 
selbige Problem auch bei 4.00 MHz auftritt. Der Neustart passiert 
meistens, bei der Folgenden Code- Sequenz:
void init_measurment ()
{
  //sicherstellen, dass kein Interrupt stört
  //PCINT 0 deaktivieren
  GICR&=~(1<<PCIE0);
  //TC2 Overflow interrupt deaktivieren
  TIMSK&=~(1<<TOIE2);
  //TC2 OC interrupt aktivieren
  TIMSK|=(1<<OCIE2);
  //TC2, prescaler 8
  TCCR2&=0x00;;
  TCCR2|=(1<<CS21);  
}
 die Funktion rufe ich folgendermaßen auf:
init_measurment();
 allerdings habe ich Funktionen bisher immer so aufgerufen, wenn die 
Parameterliste leer ist. Vielleicht hat noch jemand einen Link zum 
nachlesen, wie man Funktionen aufruft, weil ich entsinne mich dunkel, 
dass manche in der Parameterliste auch void Funktion (*variable) stehen 
haben...

Schon mal danke für Eure Hilfe

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An dem Funktionsaufruf ist zunächst mal nichts verwerfliches. Der Fehler 
wird vermutlich in dem Teil des Programms liegen, den Du nicht zeigst, 
bzw. in den Einstellungen in Makefile und Simulator.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  //TC2 OC interrupt aktivieren
  TIMSK|=(1<<OCIE2);

Hast du auch eine Interruptroutine dazu geschrieben?

Autor: Student (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hilfe, ich bin am Verzeifeln, warum will das nicht gehen, mein Code ist 
nicht geheim, dachte nur, dass der Fehler vermutlich in diesem 
Ausschnitt liegen wird, also hier nocheinmal der komplette Code, im 
Anhang, vielleicht findet ja jemand das Problem, ich tue es leider 
nicht. Ein Makefile besitze ich nicht, bzw. besitzen schon, allerding 
verwende ich das vom AVR- Studio automatisch generierte.

Autor: Student (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Magnus, nein das habe ich nicht, weil ich eigentlich nur das 
OutputCompare- Flag benötige. Ist es erforderlich, dass ich die 
InterruptRoutine dazu schreibe?
Wenn ja, reicht es aus einfach eine leere Routine zu schreiben?

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Student wrote:
> Hallo Magnus, nein das habe ich nicht, weil ich eigentlich nur das
> OutputCompare- Flag benötige. Ist es erforderlich, dass ich die
> InterruptRoutine dazu schreibe?
> Wenn ja, reicht es aus einfach eine leere Routine zu schreiben?

Wenn du nur das OC-Flag benötigst, musst du nicht extra den Interrupt 
freigeben. Schlimmer noch: wenn du den Interrupt frei gibst, dann wird 
der Controller beim Auftreten des Interrupts den entsprechenden 
Interruptvektor anspringen. In diesem Falle gibt es dann 3 
Möglichkeiten:

1) Du hast einen entsprechenden Interrupthandler implementiert. Dieser
   Handler wird auch angesprungen und abgearbeitet --> OK

2) Du hast keinen entsprechenden Interrupthandler implementiert. Der
   Compiler setzt für diesen Interrupt ggf. einen Sprung auf den Pro-
   grammanfang --> sieht aus wie ein Reset --> nicht schön --> schlecht

3) Du hast keinen entsprechenden Interrupthandler implementiert. Der
   Compiler setzt für diesen Interrupt ggf. ein RETI ein, was bewirkt,
   dass der Controller nach einer "Pause" von wenigen Taktzyklen wieder
   seinen normalen Aufgaben nachgeht... --> wäre dann nicht ganz soo
   schlimm ;)

Ich werde an dieser Stelle bestimmt noch von anderen Forenmitgliedern 
korrigiert (die Ausführungen sind wahrscheinlich nicht gaaanz korrekt), 
aber im Prinzip dürfte Punkt 2 auf dein Programm zutreffen.

Gruß,
Magnetus

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.