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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Tobias S. (herrgesangsverein)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Tobias S. (herrgesangsverein)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.