mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AtMega128 Interrupt problem


Autor: netwalker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja.. Hallo zusammen!
Eigentlich bin ich nicht neu in der uC-Programmierung, hab allerdings 
schon laenger nichts mehr gemacht.. jetzt habe ich hier nen STK500 mit 
STK501 expansion und nem ATMega128 (interner osc auf 8MHZ+64ms) drauf.. 
die LEDs sind an Port B (funktionieren auch mit meinen anderen 
Programmen.), allerdings scheint der interrupt nicht auszuloesen.. ich 
habe hier jetzt ein 1:1 kopiertes Programm welches bei mir nicht 
laeuft.. Bin ich einfach zu daemlich den Fehler zu sehen? Eventuell kann 
mir ja einer von euch auf die Spruenge helfen!

Der Controller scheint sich die ganze zeit nur zu resetten: (durch 
trial&error 'debug' meldungen rausgefunden)
#include <avr/io.h>
#include <avr/interrupt.h>


volatile unsigned int Counter;

ISR( TIMER0_OVF_vect )       // alle 0.000128 Sekunden / 8 Mhz
{  
Counter++;
if(Counter==10) {
     PORTB = 0x0F; //andere haelfte der LEDs leuchten lassen
  }
}

int main()
{
  Counter = 0;

  DDRB = 0xFF;

  TIMSK = ( 1 << TOIE0 );         // Overflow Interrupt einschalten
  TCCR0 = ( 1 << CS00 ) | ( 1 << CS02 ); // Teiler: 1024
  sei();                       // Interrupt generell zulassen

PORTB   = 0xF0; //Eine haelfte der LEDs leuchten lassen
  while( 1 ) {
      
    }
}

gibts evtl ein Fuse-bit das ich uebersehen haben koennte oder so?

Gruesse,

netw@lker

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Der Controller scheint sich die ganze zeit nur zu resetten: (durch
> trial&error 'debug' meldungen rausgefunden)

Da solltest du mal genauer ausführen, wie du es rausgefunden hast (am 
besten incl. Code). Ich bin da nämlich skeptisch. Dass du rein optisch 
an den LEDs nicht viel siehst, liegt daran, dass der Code die eine 
Hälfte der LEDs nur kurz aufleuchten lässt, und danach nur noch die 
andere Hälfte.
Ändere den Code in der ISR mal in Folgendes:
Counter++;
if (Counter >= 30) {
    Counter = 0;
    PORTB ^= 0xFF;
}

So solltest du etwas mehr sehen.

PS: Da du Counter nur in der ISR verwendest, ist das volatile 
überflüssig.

Autor: netwalker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun, das mit dem resetten habe ich herausgefunden indem ich vor
PORTB   = 0xF0; //Eine haelfte der LEDs leuchten lassen
  while( 1 ) {

etwas wie
PORTB = 0xF0;
PORTB   = 0xFF; //Eine haelfte der LEDs leuchten lassen
  while( 1 ) {
gesetzt habe.. interessanter weise wurde "PORTB = 0xF0;" immer wieder 
ausgefuehrt (und nein, es steht nicht in der ISR).

Und ich verstehe nicht: Eigentlich sollte mein zuerst geposteter Code 
die LEDs doch einfach nur einschalten, ausgeschaltet werden sie ja 
nirgendwo anders... ergo sollten sie nachdem ersten Interrupt die ganze 
Zeit leuchten, oder?

Gruss und danke

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibts evtl ein Fuse-bit das ich uebersehen haben koennte oder so?

Den Watchdog abgeschaltet ?

Autor: netwalker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay, fehler ist gefunden! M103C... der kompatibilitaetsmodus war das 
Problem... Danke nochmal fuer eure hilfe!

Autor: Lena (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe gerade das selbe problem, jedes mal wenn ich mit sei() die 
interrupts enable, resetet mir der atmega.

netwalker, wie meinst ist der kompatibilitätsmodus???? begreif das 
nicht...

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

Bewertung
0 lesenswert
nicht lesenswert
Lena wrote:
> netwalker, wie meinst ist der kompatibilitätsmodus???? begreif das
> nicht...
Was genau begreifst Du nicht? Was es mit dem Kompatibilitätsmodus auf 
sich hat?

Der Mega128 und seine direkten Verwandten haben ein Fusebit, das im 
Auslieferungszustand gesetzt ist und das dafür sorgt, dass der 
betreffende AVR sich so verhält wie sein Vorgänger Mega103. Das führt 
dazu, dass ein ganzer Haufen Funktionen, die der Mega128 normalerweise 
hat, nicht zur Verfügung stehen. Dieses Fusebit muss man erst 
"entprogrammieren", bevor man alle Funktionen des Mega128 nutzen kann.

Autor: Lena (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
muss ich diese auch im simulater setzen? finde nix...

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.