Halli Hallo, Benutze Atmega16 Ich hab ein großes Problem, bitte helft mir. Ich bekomm das mit den Interrupts nicht auf die Reihe. Ich erhalte beim compilieren Warnungen, kann also das Hex-file draufladen aber es tut sich nix. Ich will die Variable Sek hochzählen und auf ein LCD schreiben, wie schnell ist mir vorerst mal egal. Laut den Warnungen kennt er die ISR nicht (no prototype), benutze ich ein fasches interrupt.h? #include <avr\io.h> #include <avr\interrupt.h> #include "xlcd16.h" void initPortsMC(void); volatile int Sek; //---------------------------------------------------------------------- -- ISR(SIG_OVERFLOW0) { Sek++; } //---------------------------------------------------------------------- -- //---------------------------------------------------------------------- -- int main( void ) { Sek = 0; initPortsMC(); lcd_port_init16(); lcd_init16(); // Display-Hintergundbeleuchtung BelDisHintergrund(1); TIMSK = ( 1 << TOIE0 ); // Timer Overflow Interrupts zulassen TCCR0 = ( 1 << CS01 ); // Vorteiler von 8 sei(); while(1) { lcd_gotoxy16(1,1); lcd_show_intvalue16(Sek); } } //---------------------------------------------------------------------- -- //---------------------------------------------------------------------- -- void initPortsMC(void) { DDRA |= 0b11110000; PORTA |= 0b11110000; DDRB = 0b11111000; PORTB = 0b11111111; DDRC = 0b11111111; PORTC = 0b11111111; } //---------------------------------------------------------------------- -----
while(1) { lcd_gotoxy16(1,1); lcd_show_intvalue16(Sek); } Das ist auf jeden Fall schon mal ein dicker Klops. Damit bist du ununterbrochen am LCD beschreiben, das kann sich durchaus so äussern, dass du gar nichts mehr siehst. Brauchst ja nur zu schreiben, wenn sich was ändert. Oder in sinnvollen Zeitabständen (>200ms). Dafür gibts ganz viele Lösungen.
> Laut den Warnungen kennt er die ISR nicht (no prototype), benutze ich > ein fasches interrupt.h? Hmm. Das passt eigentlich schon. Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser TIMER0_OVF_vect benutzt. Die SIGxxx sind alte Sachen und sind nur noch aus Kompatibilitätsgründen vorhanden. Hast du den richtigen Prozessor eingestellt? > Das ist auf jeden Fall schon mal ein dicker Klops. Im Prinzip hat crazy horse schon recht. Allerdings ist das jetzt noch nicht so schlimm. Die Einer und mgl. Zehnerstelle wird flackern wie wild. Aber was solls.
Es heißt auch #include<avr/io.h> ... ... und nicht #include<avr\io.h> Gruß Sebastian
> Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser > TIMER0_OVF_vect benutzt. Woher hast du das?
Aufreger deluxe wrote: >> Das einzige ist, dass du anstatt SIG_OVERFLOW0 besser >> TIMER0_OVF_vect benutzt. > > Woher hast du das? zb. aus dem Tutorial http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Veraltete_Funktionen_zur_Deklaration_von_Interrupt-Routinen
> Es heißt auch > > #include<avr/io.h> > ... > ... > > und nicht > #include<avr\io.h> Wie Pfadangaben geschrieben werden ist in C selbst nicht geregelt, sondern hängt vom Betriebssystem ab, auf dem der Compiler läuft. Windows akzeptiert beides, wobei die Schreibweise mit dem \ die Windows-übliche-Nicht-C Schreibweise ist. Wenn man die Entwicklung nicht auf ein anderes Host-System verlagert, spielt es keine Rolle welche Version man benutzt. Ansonsten fährt man mit der / Schreibweise besser, da die meisten C Compiler diese Version zusätzlich zu der auf dem Hostsystem üblichen unterstützen. Ansonsten: Wenn der Compiler das File nicht gefunden hätte, hätte er das schon in Form eines Errors mitgeteilt.
@Karl-Heinz, Hmm liegt wohl daran, daß ich nicht an einem Windowsrechner arbeite, sorry. Dachte nur, daß es vielleicht daran liegt. Gruß Sebastian
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.