Den angehängten Code habe ich von dem Interrupt Tutorial. (http://www.mikrocontroller.net/articles/Interrupt#.28AVR-.29_Beispiele_f.C3.BCr_die_praktische_Programmierung) Ich habe eine LED am Port D5 anhängen. Die Fuses habe ich auf Werkseinstellung. Ich benutze einen ATmega8 und das AVR-Studio 4 Ich habe noch nie mit einem Timer oder Interrupt gearbeitet (Status: Anfänger :D) und wollte das mal ausprobieren aber es klappt einfach nicht. Das Interrupt Tutorial habe ich schon mehrmals durchgelesen und auch im Datenblatt den abschnitt über den Timer gelesen. Könnte mir vielleicht einer den Fehler zeigen??
Hallo ! ich du schrieb: > und wollte das mal > ausprobieren aber es klappt einfach nicht. und was klappt nicht ? Hast Du mal die Blinkfrequenz ausgerechnet ? Dazu schaut man in's Datenblatt, das gibt's bei Atmel.com Warum setzt Au ALLE Ports auf Ausgabe ?
1 | // IO konfigurieren
|
2 | |
3 | DDRA = 0xFF; |
4 | DDRB = 0xFF; |
5 | DDRC = 0xFF; |
6 | DDRD = 0xFF; |
Reichen würde doch nur das Bit 5 von Portd ?
1 | DDRD |= (1 << PD5); |
Viel Zutrauen in den Code aus dem Artikel habe ich nicht. Ein Beispiel zum Blinken einer LED an PD5 braucht keine solche IO-Konfiguration. IMHO extrem kontraproduktiv in einem Tutorial. Worst case raucht die ein oder andere Schaltung ab. > // IO konfigurieren > > DDRA = 0xFF; > DDRB = 0xFF; > DDRC = 0xFF; > DDRD = 0xFF; Deine Blinkfrequenz ist (vorausgesetzt dein unbekannter µC läft physikalisch mit 1 MHz wie im Programm vorausgesetzt): 1000000 1024 256 => LED Toggle alle 262 ms bzw. ca. 4x je Sekunde. > Ich habe eine LED am Port D5 anhängen. Nur die LED (Kenndaten? Datenblatt?), die könnte dann bereits hinüber sein, oder auch den Widerstand R z.B. so? R LED Pin PD5 o-----###----|<----o Vcc
Das Datenblatt habe ich wie oben schon geschrieben gewälzt und bin grade wieder dabei :D ich habe einen Takt von 1 MHZ und den Vorteiler 1024... Ich habe die Frequenz nicht ausgerechnet aber es müsste sichtbar sein... Uwe S. schrieb: > und was klappt nicht ? Die LED bleibt aus... wenn ich nach der while(1) schleife in der if-Verzweigung flag == 0 schreibe leuchtet die led.. das heißt es muss ab timer liegen, oder ?
Krapao schrieb: > 1000000 1024 256 => LED Toggle alle 262 ms bzw. ca. 4x je Sekunde. Nein, die Blinkfrequenz ist nicht gleich der LED Togglezeit, sondern 0,524ms ~ 1/2 Sekunde.
Bitte Code demnächst als .c posten. Dann gibt es Syntax-Highlighting
Krapao schrieb: > Nur die LED (Kenndaten? Datenblatt?), die könnte dann bereits hinüber > sein, oder auch den Widerstand R z.B. so? einen 1k-Ohm Wiederstand hab ich natürlich.. sry, vergessen zu schreiben und die LED ist auf jeden fall nicht kapput. Muss man vielleicht etwas an den fuses verstellen?? Christian F. schrieb: > Bitte Code demnächst als .c posten. Dann gibt es Syntax-Highlighting OK mach ich Christian F. schrieb: > Oben steht überall Timer2, unten aber ISR(TIMER*0*... Das hab ich vergessen zu änder.. ändert aber am Ergebnis nichts
ich du schrieb: > Ich benutze einen ATmega8 Der Code kompiliert doch gar nicht. Denn ein Atmega8 hat keinen PORTA und somit auch kein DDRA. >DDRA = 0xFF; Kompiliert es trotzdem fehlerfrei, hast du einen falschen Controller eingestellt. > Den angehängten Code habe ich von dem Interrupt Tutorial. Der Code ist für einen Atmega32. mfg.
Christian F. schrieb: > Oben steht überall Timer2, unten aber ISR(TIMER*0*. Spielt doch keine Rolle, nur der C-Code, nicht die Kommentare werden vom avr-gcc übersetzt. _
Uwe S. schrieb: > Christian F. schrieb: >> Oben steht überall Timer2, unten aber ISR(TIMER*0*. > > Spielt doch keine Rolle, nur der C-Code, nicht die Kommentare werden vom > avr-gcc übersetzt. Ach wirklich? ;) Ich dachte nur, dass die Wahrscheinlichkeit, dass TCCR0 für Timer2 zuständig ist hoch ist, wenn solche Kommentare drüber stehen. (Was im Nachhinein auch wieder Blödsinn ist, es ist ja TCCR*0*)
Thomas Eckmann schrieb: > Der Code kompiliert doch gar nicht. Denn ein Atmega8 hat keinen PORTA > und somit auch kein DDRA. Ich hab alle bis auf DDRD gelöscht ... ändert leider nix
Hi
>Ich hab alle bis auf DDRD gelöscht ... ändert leider nix
Wenn der falsche Controller eingestellt, ändert das garnichts.
MfG Spess
hänge uns doch bitte immer den gesamten Code und auch die LSS-Datei an. Dann können wir sehen, was der C Compiler daraus macht ! Hier noch ein Beispiel. _
Uwe S. schrieb: > hänge uns doch bitte immer den gesamten Code und auch die LSS-Datei an. > Dann können wir sehen, was der C Compiler daraus macht ! Ok
Hä?
> 4: 0c 94 65 00 jmp 0xca ; 0xca <__bad_interrupt>
Du hast ganz sicher keinen Mega8 in den Project Settings eingetragen.
Der Mega8 kann doch gar keine JMP Instruktion, sonder nur einen RJMP.
Und der ist dann auch nicht 4 Bytes sondern nur 2 Bytes groß.
Hi Das lss-File dürfte zu einem ATMega128 passen. Auf keinen Fall für einen ATMega8. MfG Spess
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.