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
Hast du schon mal nach einem Reset ins RCON Register geschaut? Nach einem Brown-Out müsste ein Flag gesetzt sein.
Möglicherweise ist der Watchdog aktiv, über die Einstellung der Konfiguration. Nennt sich "WDTE" o.ä. Gruss
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.
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
@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
> 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
@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.
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 ;-)
Ja, Layer 93 war an^^ Das löst leider das Hardwareproblem nicht...
>@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.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.