mikrocontroller.net

Forum: Compiler & IDEs Warum läuft dieser code nicht auf einem Mega16?


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe folgenden code, der zwar auf einem ATmega8 problemlos läuft, 
auf einem Mega16 aber nicht.
#include <avr/io.h>
#include <stdint.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <util/delay.h>


void io_init(void)
{
  DDRD |= (1<<PD5);                  // ausgang
  
  PORTD |= (1<<PD5);                 // Pullup
}

  
int main(void)
{
  io_init();
  sei();

  
  TCCR1B |= (1<<CS10) | (1<<CS12) | (1<<WGM12);            // Timer1 = Timer , Prescaler = 1024 , clear timer on compare match
  TIMSK |= (1<<OCIE1A);                        // interrupt bei compare match
  
  OCR1A = 40000;
  
  while(1)
  {
  
  }
}


ISR(TIMER1_COMPA_vect)
{
  PORTD ^= (1<<PD5);
}

Der compare match ist bei ca. 5,1 sec erreicht und da sollte PD5 
getoggelt werden (wird er auf nem Mega8 auch).
Kann mir jemand sagen woran das liegen kann? Die Register müssten ja bei 
beiden uCs gleich sein.

mfg Markus

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

Bewertung
0 lesenswert
nicht lesenswert
Ähhh, Du hast den Code aber für den Mega16 neu compiliert, oder?

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

Bewertung
0 lesenswert
nicht lesenswert
BTW: Was heißt "läuft nicht"? Passiert gar nichts oder nur nicht das, 
was passieren soll?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und du hast mal 40s gewartet?
(voreinstellung sind 1Mhz, da dauert's 40s bis zum togglen)

hth. Jörg

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, neu compilert hab ich natürlich.
Läuft nicht heißt: PD5 bleibt auf high (wie in io_init festgelegt) und 
toggelt nicht.
Ja, 40s hab ich gewartet, aber der M16 läuft mit ext. quarz auf 8mhz 
(sollten also ca. 5s sein).
Meine Fusebits sind:

BOOTSZ0 = programmed
BOOTSZ1 = programmed
SUT1 = programmed

rest = unprogrammed

Autor: Alan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim neukompilieren auch Prozessor auf Mega16 umgestellt?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendwie scheint mein Mega16 hier allgemein was gegen interrupts 
zu haben. Ein Timer1 Overflow Interrupt wird nämlich auch nicht 
ausgeführt.

Der Timer scheint allerdings zu laufen. Wenn ich nämlich die "Toggle pin 
on compare match" Funktion aktiviere (TCCR1A |= (1<<COM1A0);), wird der 
pin OC1A auch getoggelt.
Das bringt mir soweit allerdings noch nicht viel, da ich ja die ISR bei 
einem Compare Match aufgerufen haben möchte.

Autor: Der Albi (der-albi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Öhhhm.. Statustregister -> Interrups an?

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, sei(); ist drin.

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.