PIC18LF25Q80 läuft nur mit Programmieradapter an

OP #6572499
Lesenswert?

Hallo,

Ich habe eine Schaltung auf dem Steckbrett aus einem PIC18LF25K80 
(Master) und einem PIC18F26Q43 (slave).
Ich habe mich an die jeweilige Reset-Schaltung (RC-Glied) am ~MCLR 
Eingang gehalten.
Beide nutzen den internen Oszillator mit PLL um auf 64MHz zu kommen.

Nun das Problem: Beide PICs laufen nur an, wenn der Programmieradapter 
(PICKIT3 bzw. 4) dran ist, sonst nicht. Jedenfalls gehe ich davon aus, 
dass sie nicht anlaufen, denn ich schalte direkt nach dem 
SYSTEM_Initialize() des Code Generators einen Ausgang mit LED. Ohne 
Adpater keine LED, mit Adapter ja.

Ich habe schon andere zugegeben einfachere Schaltungen mit dieser 
Reset-Beschaltung als auch internem Oszillator aufgebaut, die immer 
geklappt haben.
Liegt es daran, dass diese Schaltung nur mit 3,3V versorgt wird?

Vielen Dank für jeden Tip.
OP #6572563
Lesenswert?

Die Antwort ist etwas knapp für mich.
Ich versuche mal zu antworten:
Jeder PIC hat zwei Masseanschlüsse und einen Vdd Anschluss, diese sind 
aus einem Labornetzteil mit 3,3V versorgt. Die 3.3V liegen mit und ohne 
Programmer an.

Der Programmer erhält aus derselben Schiene ebenfalls 3.3V und Masse.
Aktuell verbraucht die Schaltung 130mA bei 3.3V. Das Netzteil kann 4A 
liefern. Desweiteren gibt es am Programmer noch 2 Programmierleitungen 
und eben die Resetleitung: Ein RC-Glied 100nF nach Masse verbunden mit 
über R=1k nach Vdd, zwischen R und C noch ein Strombegrenzer R=4,7k in 
den ~MCLR-Eingang.
(Firma: indEAS) #6572578
Lesenswert?

Lass mal den RC am Reset weg. Ein einfacher Pull-Up reicht in der Regel.
Also 10k zwischen Vdd und Vpp - sonst nichts.
Jetzt miss mit den zwei Spitzen des DVMs direkt am Programmierinterface 
deiner Platine (ICD) zwischen Pin 1 (Vpp) und Pin 3 (GND). Dort sollten 
3,3V sein. Das gleiche gilt für Pin 2 (Vcc) und Pin 3 (GND).
(Firma: indEAS) #6573176
Lesenswert?

Soweit so gut. Die Hardware scheint erstmal OK.
Was ist mit der Software? Schreibe ein einfaches Programm, das nichts 
anderes macht als nur einen Pin toggelt.
Nimm am besten den PGC-Pin oder den den PGD-Pin. An diese Pins kommt man 
über die ICD-Schnittstelle und: da diese Pins zum Programmieren 
verwendet werden, weiss man, dass diese Pins OK auch sind.
OP #6573631
Lesenswert?

Ok. Ich brenne mal ein einfaches Programm drauf. Ich wollte nur noch 
sagen, dass ziemlich viele Pins etc. ok sind. Mein Programm funktioniert 
ja, wenn der Programmer dran ist, d. h. auch PGC und PGD müssen dann ja 
gehen. Ich benutze sonst noch SPI, eine Reihe von Pins für Chip Select 
und Chip Ready und natürlich noch zwei für Status LED.
Wenn er läuft, stimmt auch die Taktrate des SPI. Alles läuft wunderbar, 
aber der Chip läuft nicht los, wenn der Programmer ab ist.

Ich hatte mal gelesen, dass es Probleme geben kann, wenn durch die IOs 
zuviel Strom fließt, bevor diese richtig konfiguriert sind. Konnte das 
aber nicht ergründen.
OP #6573669
Lesenswert?

Hier der Aufbau. In der Mitte ist der PIC18LF25K80, oben der PIC18F26Q43 
unten ein Wiznet-Modul. Die unterhalten sich über SPI.
Bei dem mittleren habe ich die empfohlene Reset-Schaltung durch den 
Pull-Up ersetzt. An die Stiftleisten kommen die Programmieradapter. Ich 
habe einen PICKIT3 und einen 4. Bei beiden ist das Verhalten gleich bzw. 
ohne.
Angehängte Dateien:
OP #6573682
Lesenswert?

Hier noch die ersten Zeilen des Codes:
1
void main(void)
2
{
3
    unsigned short len;
4
    unsigned short slaveTransfer;
5
    unsigned long mqttKeepAlive;
6
    char i;
7
     
8
    // Initialize the device
9
    SYSTEM_Initialize();
10
       
11
    dataInit();  // fetch data from EEPROM
12
    
13
    // LED
14
    TRISC0=0;
15
    TRISC1=0;
16
    TRISC6=0;
17
    
18
    ledInit(&ledCnct,0);
19
    LEDCNCT=ledOn(&ledCnct);  
20
    ledInit(&ledMqtt,0);    
21
    ledSetFlashTime(&ledMqtt,1000);
22
    LEDMQTT=ledOn(&ledMqtt);
23
    ledInit(&ledSlaves,0);
24
    LEDSLAVES=ledOn(&ledSlaves);
25
    
26
    __delay_ms(1000);
27
    LEDCNCT=ledOff(&ledCnct);  
28
    LEDMQTT=ledOff(&ledMqtt);   
29
    LEDSLAVES=ledOff(&ledSlaves);    
30
    
31
    __delay_ms(1000);

SYSTEM_Initialize() kommt vom MCC
dataInit() holt nur Daten aus dem EEPROM
Dann kommen schon die LED. Die ganzen Methoden mit led...() verwalten 
mir nur den Zustand der LED. LEDCNCT und LEDMQTT sind defines für LATC0 
und LATC1.
Ich erwarte nach dem einschalten wenigstens, dass die beiden LED einmal 
für 1s leuchten.
OP #6573696
Lesenswert?

Oh, mein Gott, bin ich blöd!

Ja, so geht es gleich viel besser... ;)

Sonst hatte ich immer Schaltungen mit nur einem PIC und den Programmer 
immer dran bzw. wenn die Schaltung auf der Leiterkarte war, habe ich 
normal programmiert. Jetzt habe ich zum ersten Mal zwei PICs im Einsatz 
und hatte erst nur einen Programmer, den ich umgestöpselt habe. Dann 
geht es natürlich nicht mehr.

Vielen Dank für die Lösung.

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