Forum: Mikrocontroller und Digitale Elektronik V-USB anderer Interrupt


von Samuel M. (samuel_m)


Lesenswert?

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 */

von Achim M. (minifloat)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

> ((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.

von Samuel M. (samuel_m)


Lesenswert?

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 :-)

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
Noch kein Account? Hier anmelden.