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.
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...
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.
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).
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?
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.
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. ;)
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.
Oooo... Hast du da evtl. vergessen, das in der NICHT Debug Version zu brennen, bevor du..... :}
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.
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.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.