So Hier mein Programm: Ich wäre euch sehr dankbar, wenn Ihr einen Fehler
findet, da ich nach langem Ausprobieren mit meinem Latein am Ende bin
:-(.
Der Interrupt wird Zwar im GIFR angezeigt aber die ISR wird nicht
bearbeitet.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 1000000UL
#endif
uint8_t cnt = 0; // Global für Kommunikation ISR / main
//Interrupt Taster INT0
ISR(INT0_vekt)
{
if(cnt==9)
cnt=0;
else
cnt++;
}
int main (void) {
uint8_t LEDs[10] =
{0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};
DDRA = 0x7F;
MCUCR|=(1<<ISC00);
MCUCR&=~(1<<ISC01);
GICR|=(1<<INT0) ;
sei();
while (1) {
PORTA = LEDs[cnt];
}
return (0);
}
Gruß hendschu
uint8_t cnt = 0; // Global für Kommunikation ISR / main kann nicht gehen, volatile ist das stichwort. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
volatile für die Variable nicht vergessen...
Hallo,wenn du eine Variable in der ISR veränderst,muss diese als volantile eingerichtet werden,also volantile uint8_t cnt = 0; gruss andy
INT0_vekt ... Gib' uns bitte Sourcecode, der erstmal ohne Fehler und Warnungen compiliert, und nicht irgendwas nochmal abgetipptes.
Danke für die schnellen Antworten!! Habe es nun mit volatile versucht allerdings habe ich noch das gleiche Problem wie vorher auch. Durch das Volatile sind allerdings die 2 Warnungen weg gegangen die ich nicht deuten konnte( Sorry Jörg). Falls ihr noch eine andere Idee habt lasst es mich wissen :-)
Hendrik Schulten schrieb: > Durch das > Volatile sind allerdings die 2 Warnungen weg gegangen die ich nicht > deuten konnte( Sorry Jörg was waren das für warnungen?
Auftretende Errors und Warnings nicht bekanntzugeben ist immer gut. Sonst wär das Ganze ja langweilig, so ohne rumraterei.
Jörg hat sich aber explizit auf "INT0_vekt" bezogen. Das wird nicht mit "k" geschrieben, wird so also garantiert nicht kompiliert.
Klaus Dieter schrieb: > Das wird nicht mit > "k" geschrieben, wird so also garantiert nicht kompiliert. Compiliert wird es, aber es bringt halt eine Warnung. Diese wiederum sollte einem nahelegen, dass man sich da vielleicht verschrieben haben könnte …
Hendrik Schulten schrieb: > ... > #include <util/delay.h> > #include <avr/interrupt.h> > > #ifndef F_CPU > #define F_CPU 1000000UL > #endif Wie soll dein Programm korrekte Delay-Zeiten erzeugen, wenn du dem Präprozessor die F_CPU erst nach Einbindung von delay.h verrätst?
Anton B. schrieb: > Der Interrupt wird Zwar im GIFR angezeigt aber die ISR wird nicht > bearbeitet. Bist Du sicher, daß die ISR nicht bearbeitet wird? Es gibt mehrere Möglichkeiten, was schief gehen kann: 1. MCU geht nicht die ISR (z.B. wegen falscher Vektorangabe). 2. MCU geht in die ISR, aber nicht mehr heraus (z.B. weil Requestflag nicht gelöscht wird). 3. Datenübergabe zwischen ISR und main() geht nicht (z.B. wegen fehlendem volatile).
die Warnung der Art "Vektor mit diesem Namen existiert nicht", führt schlicht dazu, daß die so definierte ISR nie ausgeführt wird. Nur wenn sie den richtigen Namen hat, wird sie nämlich statt "BADISR_vect" in die Vektor-Tabelle eingetragen, der einfach nach 0 springt (fast ein Reset). Warnungen sollte man erst dann ignorieren, wenn man genau weiß, daß sie harmlos sind. Wer das genannt Problem hat, braucht da noch ein Weilchen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.