AVR-USB Interrupt

Gast #1064917
Lesenswert?

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...
Gast #1064941
Lesenswert?

> 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;
Gast #1064968
Lesenswert?

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?
Gast #1064971
Lesenswert?

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?
Gast #1065188
Lesenswert?

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?
Gast #1065480
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren