Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 spinnt


von Armin R. (ironlayer)


Angehängte Dateien:

Lesenswert?

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

von San L. (zwillingsfreunde)


Lesenswert?

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?

von Armin R. (ironlayer)


Lesenswert?

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

von Somebody123 (Gast)


Lesenswert?

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.

von Carsten M. (ccp1con)


Lesenswert?

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. ;-)

von Armin R. (ironlayer)


Lesenswert?

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

von San L. (zwillingsfreunde)


Lesenswert?

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.

von Armin R. (ironlayer)


Lesenswert?

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.

von Carsten M. (ccp1con)


Lesenswert?

Dann schalte doch LVP mal aus!?
1
#pragma config LVP   = OFF           // Low Voltage ICSP

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.