V-USB anderer Interrupt

OP #2743571
Hallo zusammen,
ich benutze V-USB auf einem ATMega48 und habe das Teil ejtzt endlich zum 
laufen gebracht. Mein Fehler war das ich die Datenleitung D+ nicht auf 
INT0 gelegt habe sondern auf einen anderen Pin. Muss ich jetzt eine 
Brücke in meine Platine einlöten oder kann man den Interrupt von dem 
anderen Pin nehmen? Beim ATMega48 hat ja eigentlich jeder Pin einen 
Interrupt und D+ liegt auf PD1 (TXD/PCINT17). In der Konfigurationsdatei 
gibt es einen Bereich in dem man Interrupt Einstellungen vornehmen kann 
aber ich habe keine Ahnung was ich dort eintragen soll denn alles was 
ich probiert habe hat nicht funktioniert. Kann es sein das nur INT0 und 
INT1 anständig configuriert werden können und die anderen Interrupts 
nicht so viele Möglichkeiten haben? So kam es mir zumindest vor als ich 
im Datenblatt nach den Einstellungen gesucht habe, für INT0 und INT1 ist 
alles schon ausführlich erklärt und für die restlichen Interrups gibt es 
gerade mal zwei Register und kaum Einstellmöglichkeiten.


Ps: Hier noch der Teil in dem die Eintellungen gemacht werden müssen.
1
/* #define USB_INTR_CFG            MCUCR */
2
/* #define USB_INTR_CFG_SET        ((1 << ISC00) | (1 << ISC01)) */
3
/* #define USB_INTR_CFG_CLR        0 */
4
/* #define USB_INTR_ENABLE         GIMSK */
5
/* #define USB_INTR_ENABLE_BIT     INT0 */
6
/* #define USB_INTR_PENDING        GIFR */
7
/* #define USB_INTR_PENDING_BIT    INTF0 */
8
/* #define USB_INTR_VECTOR         INT0_vect */
Samuel M. schrieb:
> Muss ich jetzt eine
> Brücke in meine Platine einlöten

Ja. Der PCint lässt zwar eine Konfiguration nach "welche änderung an 
diesem und jenen Pin löst einen Interrupt aus" zu, aber du musst im 
PC-Interrupt nachher selber herausfinden, welcher Pin das war. Das 
dauert für VUSB u.U. zu lang.

Schau dir mal an wie das auf http://www.fischl.de/usbasp/ mit dem USBASP 
gemacht ist. Da braucht man auch für diese eine 2009er Version mit dem 
ATmega48 eine Brücke.

mfg mf
Gast
> ((1 << ISC00) | (1 << ISC01))
legt fest bei welcher Flanke der Interupt getriggert werden soll oder 
bei beiden Flanken.

>USB_INTR_VECTOR         INT0_vect
hier muß man dann natürlich den Pinchange Inetrupt Handler eintragen

>>USB_INTR_ENABLE         GIMSK */
>>/* #define USB_INTR_ENABLE_BIT     INT0 */
du mußt auch bescheid sagen wie er enabled wird

/* #define USB_INTR_PENDING        GIFR */
/* #define USB_INTR_PENDING_BIT    INTF0 *
und welches Flag in welchem Register gesetzt wird wenn er ansteht

Dann wäre noch zu klären ob alle Pins den selben Pinchange Interupt 
auslösen bzw. wenn nur einer aktiviert wird sollte das egal sein.
OP
Na gut schade, genau das hatte ich schon befürchtet -.-
Zum glück liegen die beiden PIN's ja neben einander und ich kann einfach 
mit ein bisschen Lötzinn eine Brücke herstellen, ist ja noch ein 
Prototype, die nächte wird dann gleich richtig gemacht :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.