VUSB - Device wird nicht erkannt.

OP #3438053
Lesenswert?

Hallo an alle.

Ich verwende den VUSB-Treiber um einen Encoder als Tastatur zu emulieren 
und diesen an einem PC als Pfeil-runter und Pfeil-rauf Taste nutzen zu 
können.
Ansich funktioniert das auch.
Mein Problem ist aber, dass das Teil nicht vom PC erkannt wird, wenn es 
am PC angeschlosen ist, wenn dieser Hochfährt. Nehme ich ihn dann wieder 
ab und stecke ihn neu ein, läuft wieder alles.

Ich habe leider noch nix gefunden, was mir bei dem Problem helfen 
kann...
Hat jemand eine Idee woran das liegen kann? Bzw. was ich dagegen machen 
kann?
Ich habe hier Windows XP an meinem Testrechner. Bei Windows7 soll es 
auch auftreten.

Gruß und schon mal danke fürs drüber nachdenken. ;-)

bpie
(Firma: guloshop.de) #3438463
Lesenswert?

Birgit Pie schrieb:
> Mein Problem ist aber, dass das Teil nicht vom PC erkannt wird, wenn es
> am PC angeschlosen ist, wenn dieser Hochfährt. Nehme ich ihn dann wieder
> ab und stecke ihn neu ein, läuft wieder alles.

Hast du mal ausprobiert, nur den ATtiny45 anzuschließen und alle 
anderen USB-Geräte abzustöpseln? Manchmal behindern die sich 
gegenseitig.
#3438473
Lesenswert?

Hi

Teo Derix schrieb:
> Mal ne Frage von nem USB-Unwissenden.
> Sollten die Z-Dioden nicht hinter R4/5 liegen?

Nein - denn die Dioden sollen das 5V Potential aus dem Mikrocontroller 
auf 3.3V reduzieren. Ohne Widerstand wuerden da theoretisch "unendliche" 
Stroeme fliessen - praktisch geht vermutlich der PIN am AVR kaputt.

Vom USB her kommen bereits 3.3V Kommunikationsspannung, welche durch die 
hohe Eingangstoleranz im AVR als korrekte Logikpegel erkannt werden.

MfG
#3438562
Lesenswert?

Hallo

Lothar Miller schrieb:
> Der geht praktisch lange nicht kaputt. So einen (einzelnen) AVR Pin
> kannst du problemlos sogar an Vcc legen und gegen Masse schalten oder
> andersrum...

Okay, gut zu wissen das die Dinger so robust sind.

Bei der Versorgung ueber USB fuhert das dann aber vermutlich dazu, das 
die Vcc absinkt und der BrownOut den AVR abschaltet.
Richtig funktionieren tut's USB dann auch nicht.

MfG
Gast #3438612
Lesenswert?

Birgit Pie schrieb:

> Ich verwende den VUSB-Treiber um einen Encoder als Tastatur zu emulieren
> und diesen an einem PC als Pfeil-runter und Pfeil-rauf Taste nutzen zu
> können.
> Ansich funktioniert das auch.
> Mein Problem ist aber, dass das Teil nicht vom PC erkannt wird, wenn es
> am PC angeschlosen ist, wenn dieser Hochfährt. Nehme ich ihn dann wieder
> ab und stecke ihn neu ein, läuft wieder alles.

Was passiert, wenn du im BIOS den "USB legacy support" abschaltest? 
(Sofern das bei deinem BIOS/UEFI überhaupt noch möglich ist)
OP #3447126
Lesenswert?

Hallo.

Zunächst danke für die vielen Antworten und sorry für meine späte 
Antwort, die Grippe hat mich erwischt...aber jetzt kann es weiter gehen.

So, dann zu euren zahlreichen Ideen:

1. Versuch mal die Z-Dioden auf 3,6V zu erhöhen.

-> Das dauert leider noch etwas, da ich diese Z-Dioden nicht da habe, 
nur 4,7V und das ist dann wohl etwas zu hoch, oder?
Sobald der Test mit den 3,6V gelaufen ist, gebe ich Bescheid.

2. Bei der Gelegenheit sollte auch der USB-Shield auf GND "gebandpasst"
werden. 1MOhm und 4.7nF sind wohl dafuer empfohlen.

-> Das brachte bei dem aktuellen Problem keine Besserung, war aber wohl 
auch eher "allgemein" gemeint.

3. Wenn Hardwareanmerkungen bisher nichts bringen, koenntest du 
vielleicht
fuer uns einmal kurz Linux (Knoppix?) per LIVE-CD auf dem betreffenden
Rechner booten?
Dann den Stick reinstecken und uns das Log posten?

-> Dazu muss ich sagen, dass ich mit Linux bisher noch nicht so viel 
gemacht habe...die Live-CD kann ich mir vermutlich downloaden...aber wie 
komme ich dann zu dem Log?
Ich habe in einer VM Linux (Ubuntu) installiert. Das sollte doch auch 
als Test funktionieren, oder? Wenn ja, kann mir jmd. sagen, wie ich zu 
dem Log komme?


4. Hast du mal ausprobiert, nur den ATtiny45 anzuschließen und alle
anderen USB-Geräte abzustöpseln? Manchmal behindern die sich
gegenseitig.

-> Ja. Sowohl an dem ersten Testrechner (Laptop) als auch an dem zweiten 
(normaler PC auch mit Windows XP) waren nur der ATMEGA angeschlossen, 
mit dem gleichen Ergebnis, dass er nicht gefunden wurde.

5. Was passiert, wenn du im BIOS den "USB legacy support" abschaltest?
(Sofern das bei deinem BIOS/UEFI überhaupt noch möglich ist)

-> Beim Laptop gibt es diese Einstellung im BIOS nicht. Beim PC war es 
bereits abgeschaltet. Habe es versuchsweise mal angeschaltet, brachte 
aber auch nichts.

Ich bin echt ratlos, hoffe, dass die 3,6V Z-Dioden helfen…
(Firma: guloshop.de) #3447270
Lesenswert?

Birgit Pie schrieb:
> -> Das dauert leider noch etwas, da ich diese Z-Dioden nicht da habe,
> nur 4,7V und das ist dann wohl etwas zu hoch, oder?
> Sobald der Test mit den 3,6V gelaufen ist, gebe ich Bescheid.

Falls du auch "normale" Dioden da hast, könntest du jeweils eine Z-Diode 
und eine normale in Reihe schalten (entgegengesetzte Polung natürlich). 
Damit kommst du auf ca. 3,9 Volt, was wahrscheinlich auch ok ist.
#3447280
Lesenswert?

Markus Weber schrieb:
> Birgit Pie schrieb:
>> -> Das dauert leider noch etwas, da ich diese Z-Dioden nicht da habe,
>> nur 4,7V und das ist dann wohl etwas zu hoch, oder?
>> Sobald der Test mit den 3,6V gelaufen ist, gebe ich Bescheid.
>
> Falls du auch "normale" Dioden da hast, könntest du jeweils eine Z-Diode
> und eine normale in Reihe schalten (entgegengesetzte Polung natürlich).
> Damit kommst du auf ca. 3,9 Volt, was wahrscheinlich auch ok ist.

Da waere ich vorsichtig! Fuer Details lese bitte: 
http://forums.obdev.at/viewtopic.php?f=8&t=8751&sid=6a19b063a258fd8271fe62f46af5f646

MfG
OP #3450487
Lesenswert?

So, die Z-Diode ist da, getauscht...das gleiche Ergebnis, Problem also 
nicht behoben.

Ich habe das ganze mal noch an einem anderen Rechner probiert, auf dem 
Windows7 installiert ist. Da hat es erstaunlicherweise funktioniert. 
Allerdings muss ich dazu sagen, dass alle 3 Rechner unterschiedliche 
Hardware haben.


>Wenn Hardwareanmerkungen bisher nichts bringen, koenntest du vielleicht
>fuer uns einmal kurz Linux (Knoppix?) per LIVE-CD auf dem betreffenden
>Rechner booten?
>Dann den Stick reinstecken und uns das Log posten?

Wenn mir hierzu jemand sagen kann, wie ich an das Log komme und ob das 
ganze auch mit Linux in der VR-Umgebung funktioniert (denke schon), 
würde ich auch diese Infos gern noch bereit stellen.

Danke.
(Firma: guloshop.de) #3450650
Lesenswert?

Birgit Pie schrieb:
> So, die Z-Diode ist da, getauscht...das gleiche Ergebnis, Problem also
> nicht behoben.

:-(

> Allerdings muss ich dazu sagen, dass alle 3 Rechner unterschiedliche
> Hardware haben.

100 µF an USB zu hängen, hab ich mich bisher nicht getraut, aber das 
sollte eigentlich trotzdem gehen.

> Wenn mir hierzu jemand sagen kann, wie ich an das Log komme und ob das
> ganze auch mit Linux in der VR-Umgebung funktioniert (denke schon),
> würde ich auch diese Infos gern noch bereit stellen.

Aus einer VR-Umgebung ist der Zugriff auf die Hardware immer nicht so 
einfach – oder er wird gar umgeleitet, und man nutzt dann die Treiber 
des Wirts-Systems, was dir dann natürlich nicht viel nützt.

Warum erzeugst du dir nicht einfach eine Linux-DVD (Ubuntu oder Knoppix 
oder Debian) und bootest den Windows-PC von dieser?
Linux ist sehr flexibel, man muss es gar nicht installieren, man kann es 
auch von einer DVD aus oder von einem USB-Stick aus verwenden. Dann 
läuft es natürlich langsamer, aber in diesem Fall stört das sicher 
nicht.

Und vielleicht gefällt es dir am Schluss doch so gut, dass du umsteigst. 
;-)
#3450816
Lesenswert?

Es gibt da noch etwas an das es liegen könnte ... hänge das V-USB-Gerät 
mal nicht direkt an den USB-Port des Rechners sondern hänge einen Hub 
dazwischen.
Wenn du noch einen USB 1.1 Hub hast wäre das natürlich ideal.

Was ich auch noch machen würde:
Versorgungsspannung auf 3.3V reduzieren (Z-Dioden entfernen)
-> R9 von 1.5k Ohm auf 1k Ohm verkleinern
(Firma: guloshop.de) #3450919
Lesenswert?

Hans Jelt schrieb:
> Es gibt da noch etwas an das es liegen könnte ... hänge das V-USB-Gerät
> mal nicht direkt an den USB-Port des Rechners sondern hänge einen Hub
> dazwischen.
> Wenn du noch einen USB 1.1 Hub hast wäre das natürlich ideal.

Gute Idee, finde ich.

> Was ich auch noch machen würde:
> Versorgungsspannung auf 3.3V reduzieren (Z-Dioden entfernen)
> -> R9 von 1.5k Ohm auf 1k Ohm verkleinern

Hmmm... aber prüfen, ob der ATtiny45 dann noch läuft. Für V-USB ohne 
eigenem Quarz wird meist eine Taktfrequenz von 16,5 MHz verwendet 
(interner RC-Oszillator). Dafür könnten 3,3 Volt dann zu wenig sein. 
Muss man probieren.
OP #3574081
Lesenswert?

Hallo.

Nach längerer Pause "muss" ich mich nun wieder mit diesem Problem 
beschäftigen. ;-)
Das heißt, es ist leider noch nicht erledigt.

> Es gibt da noch etwas an das es liegen könnte ... hänge das V-USB-Gerät
> mal nicht direkt an den USB-Port des Rechners sondern hänge einen Hub
> dazwischen.
> Wenn du noch einen USB 1.1 Hub hast wäre das natürlich ideal.

Das habe ich getestet, leider nur mit einem 2.0 Hub. Der Fehler ist 
genau der gleiche.


>Wenn Hardwareanmerkungen bisher nichts bringen, koenntest du vielleicht
>fuer uns einmal kurz Linux (Knoppix?) per LIVE-CD auf dem betreffenden
>Rechner booten?
>Dann den Stick reinstecken und uns das Log posten?

Ich habe das mit einer Ubuntu (12.04) Live CD probiert. Nun ist es so, 
dass an dem einen Laptop prinzipiell das gleiche Verhalten zu sehen war, 
wie bisher. Davon habe ich die 2 LogFiles bei getan. Eins nach dem 
Hochfahren, wo es nicht funktioniert hat.
Das zweite nachdem ich das Gerät nochmal abgezogen und wieder angesteckt 
habe und es dann funktionierte.

An einem anderen Laptop funktioniert es im Ubuntu auch direkt nach dem 
Hochfahren.
Aber bei beiden Laptops funktioniert es nicht im Windows.

Von der Windows-Variante habe ich gestern mal noch ein paar Screenshots 
der Datensignale gemacht. Vielleicht sagt das jemandem etwas.

USB-Gerät wird NACH dem Hochfahren angeschlossen:
VUSB_3.PNG: ständige Signalwechsel

USB-Gerät wird VOR dem Hochfahren angeschlossen:
VUSB_1.PNG: zu Beginn noch ein paar korrekte(?) Signalwechsel
VUSB_2.PNG: Dauersignal, Gerät wird nicht erkannt

Danke an alle, die drüber nachdenken.

Gruß.
bpie
Angehängte Dateien:
Gast #3574815
Lesenswert?

Hängen da 100 µF am USB? Also, ich habe ähnliche Probleme oft mit einem 
USBASP. Wenn ich den an den PC stecke und danach eine Platine zum 
Programmieren anschließe, kackt der USB-Kram oft erstmal ab (durch den 
Ladevorgang am Elko). Da half dann nur rausziehen und neu anstecken...
bis ich der Firmware von USBASP mal eine kleine Änderung verpasst und 
außerdem den Brownout Detektor aktiviert habe. Jetzt passiert folgendes 
ganz am Anfang:

- Watchdog aktivieren
- usbDeviceDisconnect() aufrufen, wichtig, damit das Gerät bei einem 
Fehler (-> Reset) definiert getrennt wird
- dann die ganzen Port-Inits
- 500 ms Wartezeit
- dann erst usbDeviceConnect()
- ...
Gast #3575045
Lesenswert?

Ich könnte mir vorstellen, dass V-USB den vom Host ausgelösten 
Device-Reset nicht korrekt implementiert hat (ich kenne V-USB zwar 
nicht, aber das USB-Protokoll dafür etwas mehr). Beim Starten eines 
kompletten PCs ist es durchaus wahrscheinlich, dass der USB-Bus mehrfach 
neu enummeriert wird, obwohl die USB-Versorgungsspannung die ganz Zeit 
eingeschaltet bleibt. Das ist aus Sicht des USB-Devices eine vollkommen 
andere Situation als das anstecken an den Bus.

Dein VUSB_2.JPG zeigt schön das Reset-Signalling ... allerdings sind die 
Phasen mit High-Signal an der D- Leitung (ich nehme mal an Ch1 ist D-) 
zu kurz. Die Reset-Recovery-Time sollte eigentlich mindestens 10ms sein. 
( siehe USB2.0 Spec, 7.1.7.5 Reset Signaling, 
http://www.usb.org/developers/docs/usb20_docs/ )

Dazu passt dann auch gut die Linux-Fehlermeldung:
hub 2-0:1.0: connect-debounce failed, port 1 disabled

Du könntest mal schauen, ob V-USB den Tiny in dieser Situation auch alle 
ca. 20ms resettet? Dann würde evtl. schon helfen, vorm ersten 
usbDeviceDisconnect() etwas länger zu warten.
#3575124
Lesenswert?

Markus Weber schrieb:
> Hmmm... aber prüfen, ob der ATtiny45 dann noch läuft. Für V-USB ohne
> eigenem Quarz wird meist eine Taktfrequenz von 16,5 MHz verwendet
> (interner RC-Oszillator). Dafür könnten 3,3 Volt dann zu wenig sein.
> Muss man probieren.

@ Birgit Pie (bpie)
Vielleicht könntest du den ATTiny45 mal mit einem 12MHz Quarz bestücken 
und probieren ob es so besser läuft.
#3575198
Lesenswert?

Lass mal die Z-Dioden weg! Ich arbeite schon mehreren Jahren mit dieser 
Schaltung und die Funktioniert ohne Probleme. Es gibt 3 Arten der 
Beschaltung . Hatte das gleiche Problem mit einem ATMega 8. Außerdem 
sollte man einen ATMega verwenden der eine eigenen Quartz benutzt. Dann 
ist man auf der sicheren Seite. Habe so mehrere usbisp aufgebaut und 
eine Schaltung
mit der man einen Atmega 32 als Schnittstelle für den i2c Bus verwenden 
kann.
Angehängte Dateien:
Gast #3575215
Lesenswert?

Nein. Wenn der AVR mit 5 Volt betrieben wird, müssen die Z-Dioden rein. 
Der Standard sieht vor, dass gewisse Pegel eingehalten werden müssen. Es 
gibt auch Systeme, bei denen die Geräte sonst nicht erkannt werden 
(selbst getestet und stundenlang nach dem Fehler gesucht!)
#3575220
Lesenswert?

Chris schrieb:
> Ich könnte mir vorstellen, dass V-USB den vom Host ausgelösten
> Device-Reset nicht korrekt implementiert hat (ich kenne V-USB zwar
> nicht, aber das USB-Protokoll dafür etwas mehr). Beim Starten eines
> kompletten PCs ist es durchaus wahrscheinlich, dass der USB-Bus mehrfach
> neu enummeriert wird, obwohl die USB-Versorgungsspannung die ganz Zeit
> eingeschaltet bleibt. Das ist aus Sicht des USB-Devices eine vollkommen
> andere Situation als das anstecken an den Bus.

Der erste Beitrag, der ein tatsächliches Problem anspricht! Die ganzen 
Vermutungen zur Beschaltung passen nicht zur Reproduzierbarkeit des 
Problems.

Meine Vermutung wäre auch, dass der Reset nicht erkannt wird. Bisher 
wurde noch nichts über die Software gesagt? In V-USB wird der Reset 
"manuell" über usbpoll() gepollt. Wenn diese Funktion nicht häufig genug 
aufgerufen wurden, wird ein Reset nicht erkannt und die Enumeration 
funktioniert nur direkt nach dem Kaltstart des Controllers.

Kannst Du die Hauptschleife Deines Codes posten?
OP #3578529
Lesenswert?

Hallo.


Der Code der Hauptschleife ist folgender:
1
int main(void)
2
{
3
uchar   i;
4
uchar   calibrationValue;
5

6
    calibrationValue = eeprom_read_byte(0); /* calibration value from last time */
7
    if(calibrationValue != 0xff){
8
        OSCCAL = calibrationValue;
9
    }
10
    odDebugInit();
11
    usbDeviceDisconnect();
12
    for(i=0;i<20;i++){  /* 300 ms disconnect */
13
        _delay_ms(10); 
14
    }
15
    usbDeviceConnect();
16
    DDRB |= 1 << BIT_LED;   /* output for LED */
17
    PORTB |= 1 << BIT_KEY;  /* pull-up on key input */
18
    PORTB |= 1 << BIT_ENC_DIR;  /* pull-up on "key" input */
19
    wdt_enable(WDTO_1S);
20
    timerInit();
21
  init_encInt(); //Initialisierung Encoder
22
    usbInit();
23
    sei();
24
    for(;;){    /* main event loop */
25
        wdt_reset();
26
        usbPoll();
27
    
28
        if(usbInterruptIsReady() && nextDigit != NULL){ /* we can send another key */
29
            buildReport();
30
            usbSetInterrupt(reportBuffer, sizeof(reportBuffer));
31
            if(*++nextDigit == 0xff)    /* this was terminator character */
32
                nextDigit = NULL;
33
        }
34
        timerPoll();//Drucktaster des Encoders abfragen
35
  if(enc_changed) { evaluateENC(); enc_changed=0; }//oo
36
  
37
    }
38
    return 0;
39
}

Ich habe testweise nach "odDebugInit();" ein "_delay_ms()" mit 
verschiedenen Zeiten eingefügt. So, dass am Oszi ca. 10ms zu sehen 
waren, leider hat auch dann das Erkennen nicht funktioniert.
#3578756
Lesenswert?

Birgit Pie schrieb:
> Der Code der Hauptschleife ist folgender:

Sieht soweit eigentlich ok aus, so lange nicht einer der 
Funktionsaufrufe hängen bleibt. Ich würde das Problem jetzt weiter 
angehen, in dem ich mir einen Debugausgang schaffe, z.B. ein pin mit 
soft-UART, und mir anzeigen lasse, wann ein Reset erkannt wird. Den Bus 
mit dem Oszi zu beobachten ist schwierig, da ist ein Logikanalyzer 
besser geeignet.

Bla schrieb:
> Eventuell läuft ja auch deine Oszillatorkalibrierung Amok, wenn der PC

Könnte man auch gleich über den Debugausgang ausgeben.
Gast #3578810
Lesenswert?

usbDeviceDisconnect() und usbDeviceConnect() vor dem usbInit() kommt mir 
persönlich seltsam vor, steht allerdings auch so in diesem Wiki: 
http://vusb.wikidot.com/driver-api  Man könnte mal im V-USB sourcecode 
nachschauen, ob das ernst gemeint oder ein Versehen ist.

Was soll das Programm bei einem Bus-Reset machen? Die Neukalibrierung 
wie bei http://vusb.wikidot.com/examples unter "Clocking the AVR from 
the RC oscillator with auto-calibration" beschrieben? Dann würde ich mal 
in der USB-Spec und mit dem Scope schauen, ob die Annahme mit dem 
Frame-Clock auch wirklich stimmt, oder ob das nur beim ersten mal 
anstecken passiert.

Ansonsten musst Du Dich an den Fehler herantasten. Debug-Ausgang wie von 
Tim vorgeschlagen wär natürlich klasse. Als Vorstufe dazu könnte man 
auch erstmal die Pins für den Encoder vorübergehend als Status-Anzeigen 
verwenden.
#3578824
Lesenswert?

Chris schrieb:
> usbDeviceDisconnect() und usbDeviceConnect() vor dem usbInit() kommt mir
> persönlich seltsam vor, steht allerdings auch so in diesem Wiki:
> http://vusb.wikidot.com/driver-api  Man könnte mal im V-USB sourcecode
> nachschauen, ob das ernst gemeint oder ein Versehen ist.

Die Reihenfolge ist ziemlich egal, da die Macros fast nichts machen :)

Chris schrieb:
> Was soll das Programm bei einem Bus-Reset machen? Die Neukalibrierung
> wie bei http://vusb.wikidot.com/examples unter "Clocking the AVR from
> the RC oscillator with auto-calibration" beschrieben? Dann würde ich mal
> in der USB-Spec und mit dem Scope schauen, ob die Annahme mit dem
> Frame-Clock auch wirklich stimmt, oder ob das nur beim ersten mal
> anstecken passiert.

Wenn am Bus ein Reset ohne anschließendes Keepalive/Framsignal ausgelost 
wird, wird calibrateosc den RC-Oscillator komplett dekalibrieren, da die 
Routine keinen Sanity-Check hat.

Edit: Es ist sogar noch schlimmer: Die mitgelieferte Routine hat einen 
Timeout, verabeitet diesen aber nicht. Evtl. funktioniert meine 
Alternative in Assembler besser - die hängt einfach so lange, bis wieder 
ein Keepalive kommt:

https://github.com/micronucleus/micronucleus/blob/master/firmware/osccalASM.S
Gast #3578893
Lesenswert?

Die Fehlermeldung deutet auf irgentwelche Lowlevel-Probleme hin, der 
USB-Port an der Maschine ist wohl nicht tolerant wie an den anderen 
Maschinen.

Ändere dein Design auf 3,3V mit Quartz und dann taste dich an dein 
Zieldesign ran.
OP #3579431
Lesenswert?

Ich habe mal nach "usbDeviceDisconnect();" und vor "for(i=0;i<20;i++)" 
ein LED_TOGGLE eingefügt. Wenn man diese dann mit dem Osci beobachtet, 
sieht man das der Pin ständig toggelt. Also wird anscheinend ständig ein 
Reset ausgeführt...aber warum?
Der Watchdog? Ganz am Anfang der Routine habe ich anschließend ein 
"wdt_disable()" eingefügt...ohne Erfolg. Willkürlich gesetzte 
"wdt_reset()" brachten auch keinen Erfolg.
Wenn ich die Datenleitung D- aus dem USB-Kabel raus nehme erfolgt zwar 
logischerweise keine Kommunikation, aber die LED toggelt auch nicht. 
Kann es sein, das der Reset vom PC ausgeführt wird?
#3579512
Lesenswert?

Dein Gerät bekommt keinen richtigen Kontakt zum PC.

Wie sieht denn die Resetbeschaltung bei dir aus?
Im Schaltplan ist das scheinbar eine LED, ist nicht wirklich passend.
Ein 10k bis 100k Ohm Widerstand nach Vcc und ein 100nF Kondensator nach 
Masse sind die Standardbeschaltung.
Wenn alles okay ist liegt während des Betriebs am Reset-Pin die 
Versorgungsspannung an.

Es könnte auch an der Methode "buildReport()" liegen, aber an deiner 
Stelle würde ich erst mal nicht bei der Software suchen, sondern bei der 
Hardware.

Kopiere dein Projekt, schreibe die Software so um dass zwei oder ein Pin 
frei sind und nutze den 12MHz Takt.
Da das bei 3.3V läuft könntest du vielleicht auch die Spannung auf 3.3V 
stellen.

Du versuchst weiter bei der Software obwohl der Fehler woanders liegt.
#3579767
Lesenswert?

Birgit Pie schrieb:
> Ich habe mal nach "usbDeviceDisconnect();" und vor "for(i=0;i<20;i++)"
> ein LED_TOGGLE eingefügt. Wenn man diese dann mit dem Osci beobachtet,
> sieht man das der Pin ständig toggelt. Also wird anscheinend ständig ein
> Reset ausgeführt...aber warum?

Auf welchem Pegel liegt denn der Reset-Pin? Ist die Spannungsversorung 
stabil, oder cycled der PC diese beim hochfahren? Kannst Du den Watchdog 
auch einfach ausbauen?
Gast #3580190
Lesenswert?

Birgit Pie schrieb:
> Also wird anscheinend ständig ein Reset ausgeführt...aber warum?

Nun, wir können da nur in die Glaskugel schauen, während Du alle 
Möglichkeiten hast das herauszubekommen. ;-)  Auch der Tiny selbst kann 
Dir dabei helfen: Siehe MCU Status Register (MCUSR).

Möglichkeiten gibt es sooo viele ... ich tippe ja eher auf 
Softwarefehler, da die Schaltung beim normalen Anstecken an den Bus ja 
funktioniert. Man kann den RC-Oszillator auch so übel oder so schnell 
verstimmen, dass die CPU des Tiny hängen bleibt und dann vom Watchdog 
resettet werden muss. (siehe Oscillator Calibration Register (OSCCAL) 
aus dem Tiny45 Datenblatt)



Tim schrieb:
> Ist die Spannungsversorung stabil, oder cycled der PC diese
> beim hochfahren?

Embedded Hosts machen sowas manchmal um ein vollkommen abgestürztes 
USB-Device wiederzubeleben, aber bei einem PC habe ich sowas noch nie 
gesehen. Nachmessen schadet aber nie und ein Scope ist ja auch 
vorhanden.
Gast #3580212
Lesenswert?

Mich überrascht, wie groß der Anteil der "Herumprobierer" hier ist. Ich 
finde es nicht zielgerichtet bei einem Problem einfach mal die Schaltung 
zu verändern, ohne das Problem vorher analysiert zu haben.

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