www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-USB Interrupt


Autor: Marc08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Marc08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marc08 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß zufällig jemand wo der Rücksprungbefehl von der INT0-ISR im 
Assemblerfile (des AVR-USB) ist?

Autor: Hmm... (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.