mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten des INT1 beim Atmega48


Autor: Steven Wetzel (steven)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche einen 2-Axen Beschleunigungssensor mit dem AT48 auszulesen. 
Der Sensor gibt den Wert als PWM aus. X-Achse ist am INT0, y-Achse am 
INT1. INT0 funktioniert super, INT1 macht dagegen Probleme:
Gekürzte Version:
if (PW_Y_SUM_CNT >= 4)
      {
         PWM_Y_SENSOR = PWM_Y_SUM/4;
         PW_Y_SUM_CNT = 0;
         PWM_Y_SUM = 0;
         OLD_TIMER_VALUE = 0;
         ACT_TIMER_VALUE = 0;
         printf("|PWM_Y_SENSOR:%d|PWM_Y_SUM:%d\n\r",PWM_Y_SENSOR,PWM_Y_SUM);
      } 
printf dient der Debugausgabbe.
Obwohl in der Anweisung PWM_Y_SUM = 0; steht, werden seltsame Werte 
ausgegeben. Alle variablen sind als unsigned int bzw. long deklariert:
PWM_Y_SENSOR:15404   PWM_Y_SUM:0
PWM_Y_SENSOR:199     PWM_Y_SUM:0
PWM_Y_SENSOR:970     PWM_Y_SUM:0
PWM_Y_SENSOR:200     PWM_Y_SUM:0
PWM_Y_SENSOR:2821    PWM_Y_SUM:0
PWM_Y_SENSOR:199     PWM_Y_SUM:18100
PWM_Y_SENSOR:4674    PWM_Y_SUM:0
PWM_Y_SENSOR:5745    PWM_Y_SUM:0
PWM_Y_SENSOR:6720    PWM_Y_SUM:0
PWM_Y_SENSOR:198     PWM_Y_SUM:0 
und
PWM_Y_SENSOR:199    PWM_Y_SUM:0
PWM_Y_SENSOR:4538   PWM_Y_SUM:0
PWM_Y_SENSOR:199    PWM_Y_SUM:0
PWM_Y_SENSOR:200    PWM_Y_SUM:0
PWM_Y_SENSOR:7364   PWM_Y_SUM:0
PWM_Y_SENSOR:200    PWM_Y_SUM:-29260
PWM_Y_SENSOR:9218   PWM_Y_SUM:0
PWM_Y_SENSOR:200    PWM_Y_SUM:0
PWM_Y_SENSOR:11263  PWM_Y_SUM:0
PWM_Y_SENSOR:199    PWM_Y_SUM:0
PWM_Y_SENSOR:13212  PWM_Y_SUM:0 

Der korrekte ausgelesene Wert sollte um die 200 sein. Die 
Interruptroutinen sind für beide exakt gleich. Ich vermute, dass es eine 
Eigenart des INT1 gibt. Seltsam ist vor allem, dass obwohl PWM_Y_SUM als 
unsigned deklariert wurde, ein negativer Wert erzeugt wird.

Es ist immer nur ein Interrupt freigeschalten, also alternierend INT0 
und INT1. Es kommt also nicht vor, dass innerhalb eines Interrupts ein 
zweiter aufgerufen wird. Ich habe auch INT1 alleine laufen lassen, bekam 
jedoch das gleiche Ergebnis.

Autor: Marvin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf ist es bei der Option %d reichlich egal, ob die Variable signed 
oder unsigned definiert wurde...

Ich würde bei diesem Problem eher einen Seiteneffekt vermuten. Der 
Zugriff auf 16-Bit ist nicht atomar, wenn also ein Zugriff des 
Hauptprogramms durch einen Interrupt unterbrochen wird, krachts.

Autor: Steven Wetzel (steven)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marvin wrote:
> printf ist es bei der Option %d reichlich egal, ob die Variable signed
> oder unsigned definiert wurde...
>
> Ich würde bei diesem Problem eher einen Seiteneffekt vermuten. Der
> Zugriff auf 16-Bit ist nicht atomar, wenn also ein Zugriff des
> Hauptprogramms durch einen Interrupt unterbrochen wird, krachts.

Während der Auswertung werden weitere Interrupts verhindert. Diese 
beiden Zeilen wurden aus obiger if-Anweisung der Übersicht wegen 
entfernt. Ich werde aber mal ein Kontrollflag in die ISR setzen, um das 
mal zu kontrollieren.

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.