PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PIC18F2550 Bootloader bei externer Spannungsversorgung



stepi
05.03.2009, 21:03
Hallo zusammen,

ich versuche den Bootloader2 von sprut auf meinem PIC 18F2550 zum laufen
zu bekommen.

Vor dem Einsatz habe ich den Bootloader etwas abgeändert:
- RE3 wird als Reset verwendet -> MCLR also aktiviert
- Über RA0 == 0 wird der Bootloader aktiviert
- Eine rote LED an RA4 soll als Status-Leuchte dienen.

=> Schaltplan und Bootloader siehe Anhang.

Weiterhin soll die Stromversorgung über rein extern sein, d.h. nicht
USB-powered.

Status quo ist, dass…
1) die Lampe sofort nach Reset leuchtet
2) der PIC von Windows nicht erkannt wird.

Um die Fehlerquelle etwas einzuschränken voraus ein paar Fragen, die
unklar/ offen sind:

- wie muss ich den Pin Vusb „verkabeln“ -> momentan ist der bei mir
einfach „in der Luft“
- muss ich VRegEn auf On oder Off schalten; VRegEn On hieße, dass der
USB Voltage Generator aktiviert ist. Brauche ich den, wenn ich über
extern den PIC/ bzw. die Schaltung mit 5V versorge?
- Des weiteren habe ich den GND der USB-Buchse nicht auf GND meiner
Schaltung gelegt -> kann das der Grund sein?

Wenn sich das Problem durch die obigen Punkte nicht gelöst hat, muss
jenes wohl in der Software zu suchen sein, obwohl ich dort nicht viel
verändert habe, außer RE3 deaktiviert, den PIN für die LED und den PIN
für die Bootloader-Aktivierung geändert habe.

Was genau ist der Hintergrund bzgl. der Definitionen:
//#define USE_SELF_POWER_SENSE_IO
//#define USE_USB_BUS_SENSE_IO
Brauch ich die, wenn meine SChaltung immer self-powered ist? Bzw. kann
ich dann das entsprechende Flag immer auf 1 setzen?

Was kann ich noch messen/ testen/ nachprüfen, damit ich den Fehler
einschränken kann??
Wie kann ich zum Beispiel prüfen, ob der sprut-Treiber (USB-Treiber)
installiert ist: sehe ich das irgendwo im Gerätemanager??

Hoffe ihr könnt mir weiterhelfen!!

Grüße
Stepi

GeoBot
06.03.2009, 10:41
- wie muss ich den Pin Vusb „verkabeln“ -> momentan ist der bei mir
einfach „in der Luft“

Ich habe da 220nF gegen Masse dran. Ohne läuft da gar nichts, da der Pin mit den C zu einem Spannungsregler gehört der die Spannungen (glaube 3V oder so) für D- D- am USB-Bus erzeugt.

Wichtig wichtig also.

Spessi
06.03.2009, 13:58
Ja, der C ist wichtig. Muss hin! Muss nicht genau 220nF sein, aber halt schon in dem Bereich.

- Des weiteren habe ich den GND der USB-Buchse nicht auf GND meiner
Schaltung gelegt -> kann das der Grund sein?
Ouh. Das ist natürlich der Fehler. So ist kein Stromkreis vorhanden und die Daten könnten nicht auf Data+ und Data- "hin und herfließen".

stepi
10.03.2009, 20:56
Hallo zusammen,

erste Erfolgsmeldungen:
- habe die HW-Änderungen gemacht (USB an gnd angeschlossen; Vusb über
220nF an gnd)
- dass die rote LED immer gebrannt hat weiß ich noch nicht ganz, aber
auf alle Fälle habe ich vergessen dem RA0 als digitalen I/O zu
definieren (REgister ADCON1; bei POR ist RA0 erstmal als analog I/O
definiert).

=> d.h. mein Bootloader funkt nun

Allerdings muss ich eine Beobachtung machen, die mich etwas stutzig
macht: ich habe vor dem Bootlader mit einem Brennprogramm ein PRogramm
hochgeladen, das zwei LEDs für ca. 0,5sec anmacht (über
Delay10KTCY(500)).

Lade ich nun das gleiche Programm (Linker geändert, sonst nichts) mit
dem Bootloader in den PIC, so werden aus den 0,5sec plötzlich ca. 5ms.
Auch ein vergrößern des Delays (Delay10KTCY(5000)) hat keine Änderung
zur Folge.

Woran kann das liegen? In meinem Programm habe ich über
#pragma config FOSC = HS //CPU=8 MHz
die Oszi-Einstellung immer drin.

Grüße
Stepi

Spessi
11.03.2009, 20:37
Hallo,
die Delay10KTCY()-Funktion erwartet einen unsigned char als Parameter. Das heißt, dass du maximal nur Werte 0..255 eintragen kannst.

Wenn du eine halbe Sekunde Wartezeit haben willst, dann brauchst du Delay10KTCY(100), weil:
Die Laufzeit der Funktion ist 10000 Zyklen * Parameter. In dem Fall also 1000000 Zyklen. 1000000 Zyklen entsprechen 4000000 Takten. Bei deiner Taktfrequenz von 8MHz entspricht die Wartezeit dann genau 0,5s.

Grüße