Hallo
Was ich erstmal vermisse ist, das den INT0 Pin als Eingang schaltest.
Der Rest sollte sich im AVR Studio leicht nachvollziehen lassen.
MFG
Dieter
Hallo mitsammen, dies ist mein erster Besuch und gleich schon mit einer Frage
Ich nutze den PORTB.
es kommt mir vor, als würde sofort nach dem Einschalten ein IRQ
auftreten, und auch danach in sehr kurzen abständen (10ms?).
Ich habe eine LED angehängt und die scheint zeitweise zu flackern (für
ein paar Sekunden) dann leuchtet sie wieder durchgehend (auch wieder
ein paar Sekunden).
der Code ist folgender:
Nun zur eigentlichen Frage: warum ist das so? Ein IRQ sollte doch erstCode:#include <avr/io.h> #include <avr/interrupt.h> // sei() #include <avr/signal.h> // SIGNAL #define XTAL 1000000 int ab = 0x00; int main(void) { // configure all PortB bits as output DDRB = 0xff; PORTB = 0x00; //configure the external interrupt GICR |= (1<<INT0); MCUCR |= (1<<ISC00) | (1<<ISC01); // enable interrupts sei(); while(1); return 0; } SIGNAL (SIG_INTERRUPT0) { if (ab == 0x00) { PORTB = 0xff; ab = 0xff; } else { PORTB = 0x00; ab = 0x00; } }
bei Überschreiten eines gewissen Pegels auftreten .. oder? - Mein
Multimeter zeigt eigentlich schöne 0,00V (Low) und 4,3V (High) an.
Das Ganze hängt an einem FT245 - kann hier das Problem liegen?
Hallo
Was ich erstmal vermisse ist, das den INT0 Pin als Eingang schaltest.
Der Rest sollte sich im AVR Studio leicht nachvollziehen lassen.
MFG
Dieter
Der INT0 ist automatisch ein Eingang wenn er als INT geschaltet wird. Du solltest die Variable "ab" direkt in der INT Schleife deklarieren oder wenn du sie auch ausserhalb brauchst, noch ein volatile davor schreiben. Also volatile int ab = 0.
Hallo
Kannst du das belegen.Wäre mir neu.Der INT0 ist automatisch ein Eingang wenn er als INT geschaltet wird.
Da hast natürlich Recht, das der Pin beim starten als Eingang geschaltet ist, womit meine Aussage nichtig ist.
Das mit dem volatile ist schon richtig, sowas sieht man doch gut mit AVR Studio.
MFG
Dieter
so .. ich erklär mal kurz worum es geht:
Es geht darum, mittels eines FT245BM im BitBang Modus die INT0 Leitung des Atmega8 auf High zu setzen. Mittels eines kleinen Programmes, welches ich in C# geschrieben habe, kann ich die 8 Data - Ports des FTDI Chips getrennt steuern.
Nun hat der FT245BM am Ausgang ca. 4,3V.
ich habe nun die Änderung (volatile) gemacht und es wird immer mysteriöser.
Wenn ich auf einem Low Signal bin (0,0) und dann auf High gehe, schaltet sich die LED ein. Wenn ich nun auf High bin, und noch des öfteren ein High auf die Ports schreibe, schaltet sich die LED irgendwann (nach dem 2ten oder 3ten mal) wieder aus .. dann noch ein paar mal 0xff auf die ports schreiben und die LED geht wieder an ...
Wohlgemerkt: Ich gehe in der Zwischenzeit nicht einmal auf Low
@Dino Dieter. Aus dem ATMega8 Datenblatt Seite 65.
@Lionic. Das Programm sieht sauber aus also denke ich es liegt an deiner Elektronik.Activity on the pin will couse an interrupt request even if INT0 is configured as an output
@kater:
Danke für die Antwort
Ich habe jetztmal einfach versucht das Signal abwechselnd direkt am Steckbrett auf Low/High zu setzen, aber keine Chance, dasselbe. Somit liegts wohl nicht am FT245er ...
Werde - wenn ich heute abend dazu komme - mal die Schaltung neu aufbauen und evtl. den uC austauschen - vielleicht passt ja damit was nicht .. ich meld mich jedenfalls wieder
Hallo
@Kater
Heißt aber nicht, das der PIN dann Eigang ist, sondern nur, das der INT auch auslöst, wenn der PIN als Ausgang geschaltet ist und ein wechsel des Signals vorkommt. Möglichkeit eines Software Int.Activity on the pin will couse an interrupt request even if INT0 is configured as an output
Kann eine böse Falle sein , das so zu deuten, das der Pin automatisch
als Eingang geschaltet wird.
MFG
Dieter
Lesezeichen