Forum: Mikrocontroller und Digitale Elektronik PIC18LF25Q80 läuft nur mit Programmieradapter an


von Tobias S. (herrgesangsverein)


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.

von Michael D. (Firma: indEAS) (indeas)


Lesenswert?

Stromversorgung / Reset?
Betrieb ohne PICKIT => Am ICD:
- Spannung zwischen Vcc und GND
- Spannung zwischen Vdd und GND

Vielleicht hast du die Masse vergessen, die dann beim Betrieb mit dem 
Programmer hergestellt wird...

von Tobias S. (herrgesangsverein)


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.

von Michael D. (Firma: indEAS) (indeas)


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

von Tobias S. (herrgesangsverein)


Lesenswert?

Ok, hab jetzt nur einen 10k Pull-up dran. Damit läuft es auch nicht an.
Die Messung ergibt:

Stromversorgung direkt am PIC 3.35V.

Reset gegen GND ohne PICKIT: 3.30V, mit: 3.28V.

Spannung direkt an der Versorgung des PICKIT: 3.30V

Hilft das?

von Michael D. (Firma: indEAS) (indeas)


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.

von Teo (Gast)


Lesenswert?

Michael D. schrieb:
> Schreibe ein einfaches Programm, das nichts
> anderes macht als nur einen Pin toggelt.

Hat er doch....

Wahrscheinlich "das Anderelinks" erwischt, zeig mal den Aufbau.... Na 
weil mir sonnst nix schlaues einfällt. ;)

von Tobias S. (herrgesangsverein)


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.

von Teo D. (teoderix)


Lesenswert?

Oooo... Hast du da evtl. vergessen, das in der NICHT Debug Version zu 
brennen, bevor du..... :}

von Tobias S. (herrgesangsverein)


Angehängte Dateien:

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.

von Tobias S. (herrgesangsverein)


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.

von Tobias S. (herrgesangsverein)


Lesenswert?

Teo D. schrieb:
> Oooo... Hast du da evtl. vergessen, das in der NICHT Debug Version zu
> brennen, bevor du..... :}

Daran habe ich sicher nicht gedacht! Allerdings hab ich das noch nie so 
gemacht soweit ich mich erinnere... aber das ist ein Punkt. Das probiere 
ich aus...

von Tobias S. (herrgesangsverein)


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.

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.