PIC18-Projekt restartet unerklärlich

OP #3014582
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
Angehängte Dateien:
Gast #3014726
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.
Gast #3014731
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
OP #3014779
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
Gast #3014798
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
OP #3014841
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.
Gast #3014875
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.

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