Forum: Mikrocontroller und Digitale Elektronik PIC18-Projekt restartet unerklärlich


von Björn P. (bjrn_g)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich habe mir eine Platine gefertigt und nach anfänglichen Erfolgen, bin 
ich nun auf ein interessantes Verhalten gestoßen.

Zuerst einmal zur Erklärung meiner Schaltung:
Ein PIC18F23k20 steuert 4xTLC5947 an, wobei an jeder eine weiße LED 
hängt (über Flachbandkabel). Soweit funktioniert die Steuerung auch ganz 
gut, wenn ich allerdings mehrere LEDs aufleuchten lasse, fangen die LEDs 
an zu Blinken bzw. das Programm startet von vorn (früher als gewollt) 
udn der Watchdog-Timer ist deaktiviert.

Beispiel: wenn ich nur 1 LED über alle der möglichen 4*24 TLC-Ports 
ansteuere, funktioniert es einwandfrei. 16 LEDs an einem TLC 
funktionieren auch noch (die anderen LEDs der 3 TLCs sind aus). Über den 
16 LEDs hinaus funktioniert nichts mehr.

Es macht den Anschein, als wenn ein Spannungseinbruch auf der 
3,3V-Leitung verursacht wird, dieser ist jedoch nicht messbar (Voltmeter 
zeigt mindestens 3,29V an, wenn 16LEDs an sind) und kommt mir auch nicht 
wirklich realistisch vor.

Wenn es kein Schaltungsproblem sein sollte, könnte es vielleicht an 
meiner Config liegen? So ganz sicher bin ich mir bei ihr nicht.

Ich wäre für jeden Hinweis dankbar.

LG

von Kein Name (Gast)


Lesenswert?

Hast du schon mal nach einem Reset ins RCON Register geschaut? Nach 
einem Brown-Out müsste ein Flag gesetzt sein.

von Erich (Gast)


Lesenswert?

Möglicherweise ist der Watchdog aktiv, über die Einstellung der 
Konfiguration.
Nennt sich "WDTE" o.ä.
Gruss

von Kein Name (Gast)


Lesenswert?

Und noch ein Punkt...
High- und Low-Interrupt brauchen unterschiedliche Return Statements. 
Solltest mal kontrollieren, ob das "goto InterruptHandler" einen 
Stackoverflow oder ähnliches Chaos erzeugt.

von Dirk F (Gast)


Lesenswert?

Hallo, eine typische Falle, die ich gestern erst hatte:
In den Config Bits muss die LVICSP (Low voltage in circuit serial 
programming) disabled werden.
Ansonsten springt der Chip immer in den Programmiermodus, sobald man 
z.B. einen Finger aufs Gehäuse legt....
LG Dirk

von Björn P. (bjrn_g)


Lesenswert?

@kein Name:
stimmt, das RCON-Register könnte ich mal mit dem PicKit3 checken.

@Erich:
der WatchDog-Timer ist deaktiviert und auch die unterschiedliche Dauer 
der Programmausführung, bzw. dass es je nach Anzahl der LEDs auch 
dauerhaft läuft, spricht dagegen...

@Dirk F:
verdammt, sry, hab einen Test-code eingefügt...
die eiegntliche Config lautet:

#pragma config FOSC = INTIO67, PLLCFG = OFF, PRICLKEN = ON, FCMEN = OFF, 
IESO = OFF
#pragma config PWRTEN = ON, BOREN = OFF
#pragma config WDTEN = OFF
#pragma config MCLRE = EXTMCLR
#pragma config STVREN = ON
#pragma config LVP = OFF, DEBUG = OFF

von holger (Gast)


Lesenswert?

> bzw. dass es je nach Anzahl der LEDs auch
>dauerhaft läuft, spricht dagegen...

Und das deutet darauf hin das deine Spannungsversorgung
die Grätsche macht und schlicht und ergreifend zusammenbricht.
Das kann ein sehr kurzer Zusammenbruch sein den du mit einem
Multimeter nicht messen kannst. Er reicht aber den uC
neu zu starten oder in einen instabilen Zustand zu bringen.

Ändere das:

#pragma config PWRTEN = ON, BOREN = OFF

auf

#pragma config PWRTEN = ON, BOREN = ON

von Björn P. (bjrn_g)


Lesenswert?

@kein Name:
Hm, also wenn ich mit den folgen Zeilen:

if (RCONbits.BOR == 0)
  {
    RCONbits.BOR = 1;
  }

den PIC debugge, springt er nach der 16. LED (also wenn alle wieder 
ausgehen) in diese Zeile, was ja bedeutet, dass die Spannung 
eingebrochen ist.

Wenn ich mit Step-Into weiter laufe, springt er nach ein paar Schritten 
immer wieder zu dieser Abfrage zurück. Erst nach einem Reset gehts 
wieder von vorne los.

So wirklich schlüssig ist das für mich aber nicht. Es handelt sich um um 
einen Strom von gerademal 285mA (laut meinem PeakTech 1890-Netzteil). 
Bei der 17. LED wären es dann also ein bisschen mehr als 310mA. Die 
Flächen für die Versorgungsspannung und GND auf der Platine sind auch 
mehr als Großzügig angelegt...

@holger:
die Config-Änderung ergab leider keine Lösung. Selbst wenn ich die 
Brown-Out-Resetspannung auf 1,9V stelle, restartet der PIC.

von Schaltplanleser (Gast)


Lesenswert?

Björn G. schrieb:
> TLC_Board.png

Der Strom ist durch die vielen grünen Kringel an den Pins ganz kirre. 
Wie soll da das Programm richtig laufen ;-)

von Björn P. (bjrn_g)


Lesenswert?

Ja, Layer 93 war an^^
Das löst leider das Hardwareproblem nicht...

von holger (Gast)


Lesenswert?

>@holger:
>die Config-Änderung ergab leider keine Lösung. Selbst wenn ich die
>Brown-Out-Resetspannung auf 1,9V stelle, restartet der PIC.

Natürlich ist das keine Lösung. Du siehst jetzt aber das der PIC
neu startet. Spannung komplett zusamengebrochen.

Ein 100nF Kondensator am IC reicht für 16 LEDs bei weitem nicht aus.
Da könntest du mal 1uF oder 10uF keramische Kondensatoren
pro IC versuchen. Elko könnte da evtl. auch gehen, aber
ist nicht wirklich optimal.

von Björn P. (bjrn_g)


Lesenswert?

@holger:

das war der Fehler... ich hab wohl die Anzahl der LEDs mit ihren Strömen 
unterschätzt. Mit einem 10uF Keramikkondensator parallel zum 100nF 
Kondensator läuft die Schaltung jetzt einwandfrei =)

Danke für den Hinweis

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.