Ich habe 2 Fragen: 1. Ist es richtig, dass PCINT-Interrupt immer dann auslösen, wenn der Pin eine steigende oder fallende Flanke hat? Solange mein Pin immer auf logisch 1 oder 0 bleibet wird dieser Interrupt nicht ausgelöst, oder? 2. Ich habe das Problem, dass (wie ich bisher nur vermute) mit AVR-USB den PCINT-Interrupt nachdem Daten an den Computer gesand wurden aktiviert wird. Wie kann ich das abstellen? Das Signal das an dem Pin anliegt bleibt kontinuierlich auf 1 (nachgemessen mit dem Oszi) und leider wird trotzdem die PCINT-ISR aufgerufen, ich weiß halt nicht wie ich das mit dem AVR-USB überprüfen sollte...
> Ist es richtig, dass PCINT-Interrupt immer dann auslösen, wenn der > Pin eine steigende oder fallende Flanke hat? Solange mein Pin immer auf > logisch 1 oder 0 bleibet wird dieser Interrupt nicht ausgelöst, oder? Jap, falls du den Pin-Change Interrupt der AVRs meinst ist das richtig. Der Interrupt erfolgt wenn die Funktion aktiviert ist und ein Flanke detektiert wird. Zitat aus den Datenblatt des ATtiny2313: "The pin change interrupt PCIF will trigger if any enabled PCINT7..0 pin toggles. The PCMSK Register control which pins contribute to the pin change interrupts. Pin change interrupts on PCINT7..0 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode." > Ich habe das Problem, dass (wie ich bisher nur vermute) mit AVR-USB > den PCINT-Interrupt nachdem Daten an den Computer gesand wurden > aktiviert wird. Ähm, was? Anscheinend ist die Kristallkugel etwas beschlagen... > Wie kann ich das abstellen? Beim Attiny2313 geht das in dem man die Pinchange-Interrupts deaktiviert: PCMSK = 0x00;
Beim ATTiny24 auch, oder? Ich will nur sagen, dass ich AVR-USB auf dem TINY24 an ebenfalls an dem PortA habe, wie auch das Signal, dass es zu decodieren gilt... Pinbelegung: USB: PINA6 und PINA7 Signal: PINA0 SFR-Register: PCMSK0 |= (1 << PCINT0); GIMSK |= (1 << PCIE0); Somit müsste er doch nur in die ISR springen, wenn am PINA0 ein Flankenwechsel passiert, oder?
Was ich auch nicht verstehe im Datenblatt: Initalwerte der Interruptflags sind 0, aber es steht auch drin, dass ich diese zum manuell Löschen auf logisch 1 setzen muss, was macht denn das für ein Sinn? Heißt das dass erst mal alle Interrupts beim aktivieren aus dem Initialzustand ausgelöst werden?
Habe jetzt nochmal alles ausführlichst getestet. Ich glaube dass mir sobald der INT0-Interrupt (USB-Kommunikation) auslöst irgendwas mit den DDRA und PORTA-Registern passiert, dass danach der Timer auslöst... Ein löschen nach dem Abschluss der Übertragung des PCIF0-Flags würde mir ja dann reichen, aber die INT0-ISR wurde in Assembler geschrieben und kann also nicht nochmal die ISR im C-Programm aufrufen, oder?
Kann ich dem entnehmen, dass du versuchst einen Software USB-Stack (obdev?) auf einem ATtiny24 zum laufen zu bekommen? Vielleicht solltest du dich zunächst etwas näher mit USB beschäftigen. Dein Problem ist nunmal die für einen AVR nicht unerhebliche Geschwindigkeit, es müssen immerhin runde 1.1 Mhz abgetastet werden, von dem knappem Megabyte Daten das im Extremfall pro Sekunde auseinander gebastelt werden muss ganz zu schweigen. Das ist schon mit dem Pinchange-Interrupt ein hartes Stück Arbeit für den AVR, ohne ist es gänzlich unmöglich. Vorschlag: 1. Poste deine Schaltung 2. Poste deine Quellen. 3. Formuliere bitte dein Problem mal ordentlich aus, so dass klar wird - wie dein System aussieht - was es tun soll - wie dein Problem aussieht
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.