Hallo Leudz, hab mal ein "kleines" Problem mit meinem PIC. Hab ihm erfolgreich mit dem ART2003 NoPower ParallelPort-Programmer den Sprut Bootloader aufgezwungen. Hat alles einwandfrei funktioniert. Habe auch den passenden Treiber in WinXP installiert. Allerdings muss ich den PIC ein paar mal ein- und ausstecken, damit USBOOT den überhaupt erkennt (auch zu sehen an der Boot-LED). Hab dann nach einigen Ein- Aussteckversuchen ein einfaches LED-Blink Programm draufgespielt. Bootloader per DIP-Schalter deaktiviert und wieder an den USB-Port. LED 1 blinkt, wie auch programmiert, im Sekundentakt. Allerdings hörte diese nach etwa einer halben Minute kurz (etwa 3 Sekunden) auf, dann blinkt sie wieder. Die Blinkdauer verringert sich mit jedem "Neustart". Am Ende blinkt sie etwa 4 mal und startet neu, blinkt 4 mal und Neustart... Manchmal blinkt sie auch 1-2 Minuten durch, bis zum "Neustart". Gleiches Spiel auch mit Holgi's- und HID-Bootloader. Über ein USB-Ladegerät tut sich am PIC überhaupt nichts, auch Bootloader nicht. Hab mal beide Spannungen gemessen: am USB-Port des Rechners liegen (im Blink- oder Bootloaderbetrieb) ziemlich genau 5 Volt an, wobei am Ladegerät 5,4 Volt liegen. Vielleicht hats damit zu tun. Der Witz an dem Ganzen ist: vor etwa 3 Jahren habe ich schon einmal den gleichen PIC auf die gleiche "Programmierweise" und der gleichen Grundschaltung erfolgreich ohne Probleme programmiert um einen 4x4 LED-Cube mit Schieberegistern zu betreiben. Das sogar an dem selben Ladegerät, als Stromversorgung, angeklemmt und damit keinerlei Probleme gehabt. Kann es sein, dass der aus irgend einem Grund immer resetet, oder hat der einfach nen Hau? Macht mir den Eindruck, als würde sich etwas auf- oder entladen, da die "Neustartzyklen" mit der Zeit immer kürzer werden. Hat da jemand ne Erklärung für? Schaltplan liegt oben an! Der PIC im Schaltplan ist allerdings von den Pinbezeichnungen nicht identisch mit dem 2550, aber die Verdrahtung stimmt. Hatte keinen 2550 bei Eagle gefunden. Achso: 20Mhz-Quarz #pragma config PLLDIV = 5 #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2 #pragma config FOSC = HSPLL_HS #pragma config MCLRE = OFF LG Armin
Armin R. schrieb: > Hatte keinen 2550 bei Eagle gefunden. Sowas lässt sich in ein paar wenigen Minuten auch selber zeichnen. Falls du interesse an dem korrekten Symbol hast, schreib mir eine Nachricht, habe diesen für ein Projekt mal gezeichnet. Kann dir die Lib gerne schicken. Armin R. schrieb: > Hat da jemand ne Erklärung für? Wie stehts mit deinen Fuse-Bits? Watchdog & Brown-Out Reset deaktiviert?
Hi San Lue, das korrekte Symbol ist mir ansich nicht soo wichtig. Hauptsache der Chip ist aufm Platinenlayout richtig angeschlossen. Hatte das gleiche Problem auch mit nem SMD-Spannugsregler, hab einfach ein anderes Teil genommen und im Schaltplan "falsch" verkabelt. Kannst mir die 2550-Lib aber trotzdem gerne mal zukommen lassen. Wie schreibe ich denn ne PN? Zum Thema Fuse-Bits, siehe Code unten! Ändert aber auch nichts, wenn ich BOR und WDT auf ON stelle... Ich denke auch nicht, dass es was damit zu tun hat. Ich hab ja die selben Config-Einstellungen wie vor 3 Jahren genommen. Ausserdem hampelt der ja auch mit dem Bootloader so rum: mal an, mal aus... Allerdings ist mir beim erneuten Spannungsmessen aufgefallen, dass die Spannung "beim Blinken" auf 4,98 Volt absinkt und "beim reset" wieder auf 5,01 Volt hochgeht (am USB vom Laptop). Hier noch meine "main.c" für die Blink-LED
1 | #include <p18cxxx.h> |
2 | #include "C:\Programme\Microchip\MCC18\h\delays.h" |
3 | |
4 | /**********************************************************************************************/
|
5 | // Konfiguration
|
6 | /**********************************************************************************************/
|
7 | #pragma code _RESET_INTERRUPT_VECTOR = 0x000800
|
8 | #pragma config PLLDIV = 5
|
9 | #pragma config CPUDIV = OSC1_PLL2
|
10 | #pragma config USBDIV = 2
|
11 | #pragma config FOSC = HSPLL_HS
|
12 | #pragma config MCLRE = OFF
|
13 | #pragma config PWRT = ON
|
14 | #pragma config BOR = OFF
|
15 | #pragma config WDT = OFF
|
16 | #pragma config LVP = OFF
|
17 | |
18 | /**********************************************************************************************/
|
19 | // Definitionen
|
20 | /**********************************************************************************************/
|
21 | #define mInitAllLEDs() TRISBbits.TRISB7 = 0;
|
22 | #define LED LATBbits.LATB7
|
23 | //Delay
|
24 | #define FOSC 24000000L
|
25 | #define _delay_us(x) { unsigned char us; \ us = (x)/(12000000/FOSC)|1; \ while(--us != 0) continue; }
|
26 | //Delay
|
27 | |
28 | /**********************************************************************************************/
|
29 | // Funktions-Prototypen
|
30 | /**********************************************************************************************/
|
31 | void Delay(unsigned int ms); |
32 | |
33 | /**********************************************************************************************/
|
34 | // Hauptprogramm
|
35 | /**********************************************************************************************/
|
36 | void main(void) |
37 | {
|
38 | mInitAllLEDs(); |
39 | while(1) |
40 | {
|
41 | LED = 0; |
42 | Delay(1000); |
43 | LED = 1; |
44 | Delay(1000); |
45 | }
|
46 | }
|
47 | |
48 | /**********************************************************************************************/
|
49 | // Funktionen
|
50 | /**********************************************************************************************/
|
51 | void Delay(unsigned int ms) |
52 | {
|
53 | unsigned char i; |
54 | if(ms!=0) |
55 | {
|
56 | do
|
57 | {
|
58 | i = 4; |
59 | do
|
60 | {
|
61 | _delay_us(164); |
62 | }
|
63 | while(--i); |
64 | }
|
65 | while(--ms); |
66 | }
|
67 | }
|
Gruss Armin
Hallo, schau dir mal die Lockbits der beiden PLL an (SLOCK und ULOCK) oder so ähnlich. Oder alternativ das Programm vom FRC ohne PLL laufen lassen, ohne USB. Eventuell ist es ein "EMV"-Problem, so das sich die PLL aufstellt? Ich hatte das mit einem PIC24 auf dem Breadboard schon einmal. Die Spannung bei den LED hört sich erst einmal normal an, das sind ja nur 3mV. Bei einem LED-Strom von 10mA wären das 300mOhm Innenwiderstand des Ports. Das ist normal - so in dem Bereich liegen die üblichen USB-Strombegrenzer (mit Stecker, Kabel dazu etc). Es wäre aber sinnvoll, die Versorgung mit dem Oszi zu oprüfen.
Hilfreich wäre, wenn du einen Debugger hättest. Hast Du? Nur so am Rande, wegen solchem "Delay Gewurschtle" hat man dem PIC Timer verpasst. Ist alles viel eleganter dann. ;-)
Hi. Sorry, meine Frau wollte kurzfristig mal eben übers Wochenende wegfahren :-( Hab den PIC aber endlich ans Laufen bekommen. USB-Kabel hatte offensichtlich ne Macke. Hab mal einfach ein anderes Kabel genommen und siehe da, er läuft rund. Allerdings ist mir aufgefallen, dass mir jedesmal der Bootloader überschrieben wird, wenn ich meinen Code mit dem PICDEM-Tool da reinhau. Hab auch schon folgenden Code und das entsprechende lnk-File ausprobiert, ändert aber nichts. Haut mir immer noch den Bootloader raus:
1 | extern void _startup (void); |
2 | #pragma code _RESET_INTERRUPT_VECTOR = 0x000800
|
3 | void _reset (void) |
4 | {
|
5 | _asm goto _startup _endasm |
6 | }
|
7 | #pragma code
|
8 | |
9 | #pragma code _HIGH_INTERRUPT_VECTOR = 0x000808
|
10 | void _high_ISR (void) |
11 | {
|
12 | ;
|
13 | }
|
14 | |
15 | #pragma code _LOW_INTERRUPT_VECTOR = 0x000818
|
16 | void _low_ISR (void) |
17 | {
|
18 | ;
|
19 | }
|
20 | #pragma code
|
Gibts da nen anderen Trick? Komischerweise hatte ich dieses Problem vor 3 Jahren auch nicht. Ausserdem wird RB5 nicht als (LED)Ausgang geschaltet (keine Spannung am Port selbst), obwohl sie laut Code an- und ausgeschaltet wird und LVP=OFF ist. Oder muss das an sein? Habt ihr vielleicht auch noch nen Tip? ACHSO: @Somebody123 Externen 7805 hab ich probiert, aber auch da hat der PIC keinen Mucks gemacht. Nur über Rechner-USB und dabei gesponnen. Oszi hab ich leider keins. @Carsten M. Debugger hab ich leider auch keinen und mit den Timern hab ich mich bisher noch nicht beschäftigt, wäre ja mal an der Zeit ;-) Gruss Armin
Armin R. schrieb: > Ausserdem wird RB5 nicht als (LED)Ausgang geschaltet (keine Spannung am > Port selbst), obwohl sie laut Code an- und ausgeschaltet wird und > LVP=OFF ist. Oder muss das an sein? > Habt ihr vielleicht auch noch nen Tip? Wo wird denn bitte in deinem Code RB5 benutzt? Der einzige PIN der laut deinem Code verwendet wird ist Pin 7 des PORTB.
Oh, hatte ich vergessen zu erwähnen... San Lue schrieb: > Wo wird denn bitte in deinem Code RB5 benutzt? Ich habe mittlerweile mal ein kleines Lauflicht auf den B-Ports programmiert. Die LEDs sind wie im Schaltplan ganz oben angeklemmt! Nur die LED an RB5 will nicht leuchten, sie ist aber in Ordnung. Es kommt gar keine Spannung am Pin an. Deswegen meine Vermutung, dass es was mit dem LVP zu tun hat.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.