Forum: Mikrocontroller und Digitale Elektronik PIC16LF1454 nicht programmierbar


von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe eine Schaltung entwickelt nach Vorbild des 
http://www.microchip.com/DevelopmentTools/ProductDetails.aspx?PartNO=dv164139-2 
Entwicklungsboards . Leider kriege ich jedoch mein Testprogramm per 
MPLABX IDE über das PICKIT 3 nicht Programmiert.

Es taucht folgende Fehlermeldung auf "Target Device ID (0x0) does not 
match expected Device ID (0x3024)." Ich habe das ganze mit externen 
Spannungsversorgung von 3,3V versucht und mit Versorgung direkt über das 
PICKIT 3, beides mit dem selben Ergebnis.

Der Controller ist Brandneu und wurde nie zuvor programmiert. Daher 
schließe ich einen Fehler aufgrund von Programmierung aus. Desweiteren 
habe ich mehrere dieser Boards herstellen lassen, alle weisen den selben 
Fehler auf. Die Pinbelegung der Programmierschnittselle habe ich 
ebenfalls mit dem Durchgangsprüfer getestet.

So sieht meine confg.h header File aus für die Konfigurationsbits aus
1
// PIC16LF1454 Configuration Bit Settings
2
3
// 'C' source line config statements
4
5
#include <xc.h>
6
7
// #pragma config statements should precede project file includes.
8
// Use project enums instead of #define for ON and OFF.
9
10
// CONFIG1
11
#pragma config FOSC = INTOSC    // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
12
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled)
13
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
14
#pragma config MCLRE = ON       // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)
15
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
16
#pragma config BOREN = OFF      // Brown-out Reset Enable (Brown-out Reset disabled)
17
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
18
#pragma config IESO = ON        // Internal/External Switchover Mode (Internal/External Switchover Mode is enabled)
19
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)
20
21
// CONFIG2
22
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
23
#pragma config CPUDIV = CLKDIV6 // CPU System Clock Selection Bit (CPU system clock divided by 6)
24
#pragma config USBLSCLK = 48MHz // USB Low SPeed Clock Selection bit (System clock expects 48 MHz, FS/LS USB CLKENs divide-by is set to 8.)
25
#pragma config PLLMULT = 3x     // PLL Multipler Selection Bit (3x Output Frequency Selected)
26
#pragma config PLLEN = ENABLED  // PLL Enable Bit (3x or 4x PLL Enabled)
27
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
28
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
29
#pragma config LPBOR = OFF      // Low-Power Brown Out Reset (Low-Power BOR is disabled)
30
#pragma config LVP = ON         // Low-Voltage Programming Enable (Low-voltage programming enabled)

Die main.c ist nahezu leer bis auf die Einbindung der confg.h etc. das 
Programmieren sollte ja trotzdem funktionieren.
1
/* 
2
 * File:   main.c
3
 * Author: Martin
4
 *
5
 * Created on 4. November 2015, 09:00
6
 */
7
8
#include <stdio.h>
9
#include <stdlib.h>
10
#include "confg.h"
11
/*
12
 * 
13
 */
14
int main(int argc, char** argv) {
15
16
    return (EXIT_SUCCESS);
17
}

Ich stehe leider total auf dem Schlauch.

Gruß Martin

von Nico (nico123)


Lesenswert?

Gehen die ICSP-Leitungen noch irgendwo ran?
Hast Du mal versucht den primären ICSP-Port (Pin9+10) zu nutzen?

von Schalter (Gast)


Lesenswert?

Nico .. schrieb:
> Gehen die ICSP-Leitungen noch irgendwo ran?

Das sieht man doch. An die USB-Buchse.

von Martin (Gast)


Lesenswert?

Wie Schalter schon geschrieben hat gehen die Kontakte noch an die USB 
Buchse. Ansonsten sind die beiden Leitungen mit nichts verbunden. Bisher 
habe ich nicht versucht den anderen  Port zu benutzen da in allen 
Anleitungen sowie dem Entwicklungsboard die Pins 12+13 Genutzt werden. 
Dank der SMD Bauform ist das umändern der Schaltung auch nicht ganz 
einfach. Evtl könnte ich mit Fädeldraht was machen.

Der zweite Port wird aktuell für die Verbindung zu einem RFM12B und 
einem Wiznet W5500 genutzt.

von Nico (nico123)


Lesenswert?

Schalter schrieb:
> Nico .. schrieb:
>> Gehen die ICSP-Leitungen noch irgendwo ran?
>
> Das sieht man doch. An die USB-Buchse.

Ich meine ob die Signale noch irgendwo hin gehen!?
Es gibt im Schaltplan ja auch noch SPI-Signale die nirgendwo hinführen. 
Ich denke das ist nicht der komplette Schaltplan!

von Schalter (Gast)


Lesenswert?

Interessant wäre noch zu wissen, ob an der USB-Buchse beim Programmieren 
etwas dranhängt.

von Dirk W. (Gast)


Lesenswert?

Schalter schrieb:
> Interessant wäre noch zu wissen, ob an der USB-Buchse beim Programmieren
> etwas dranhängt.

Stimmt, in dem Fall könnte es Probleme geben. Auch gut möglich: ICSPCLK 
und ICSPDAT vertauscht.

von Nico (nico123)


Lesenswert?

Übrigens wird auf dem von dir erwähnten Entwicklungsboard für den PIC16 
RC0+RC1 als ICSP genutzt, nicht RA0+RA1!
Trotzdem sollten laut Datenblatt aber beide Ports funktionieren.

von Andi (Gast)


Lesenswert?

Über die ICSP Leitungen am USB Port kannst den Chip nur im LV Modus 
programmieren. Ich hoffe das kann man beim PIKKIT 3 irgendwie 
einstellen.

Wenn du im HighVoltage Modus programmieren willst musst du die anderen 
ICSP Leitungen (Pin 9 + 10) benutzen. Nur im HV Modus kannst zum 
Beispiel den MCLR Pin als IO-Port programmieren.

Andy

von Dirk W. (Gast)


Lesenswert?

Nico .. schrieb:
> Trotzdem sollten laut Datenblatt aber beide Ports funktionieren.

Ja, aber Andi hat auch recht: Im Datenblatt steht auf Seite 127 unten, 
dass RA0 und RA1 "LVP only" sind. Bei diesem PIC hier wird der LVP-Modus 
durch einen 32-Bit-Key über ICSPDAT eingeschaltet, nicht über einen 
LVP-Pin. Das User's Guide des PICkit3 schweigt sich aber leider darüber 
aus, ob diese Methode unterstützt wird :-(

von Martin (Gast)


Lesenswert?

Danke für die zahlreichen Antworten.

Die beiden Kontakte die ich für die ICSP programmierung benutze, gehen 
nur auf auf die Schnittstelle fürs PICkit3 und auf die Anschlüsse der 
USB Buchse.

Die andere Schnittstelle ist wie schon erwähnt für SPI verwendet. Dort 
ist das RFM12B angeschlossen sowie der W5500 Ethernet Controller.

Ich habe auf folgende Weisen probiert das Board zu programmieren:

- Spannungsversorgung (3,3V) per PICkit 3
- Spannungsversorgung per MicroUSB Netzteil
- Spannungsversorgung per MicroUSB Netzteil und per PICkit 3

Keine Methode hat funktioniert, alle haben das selbe Fehlerbild 
aufgezeigt. Die Spannung aus dem Regler habe ich überprüft, sie ist wie 
gewünscht 3,3V.

Aktuell stehe ich echt kurz davor die zweite SPI schnittstelle einfach 
mit nem Dremel aufzutrennen, evtl. sogar dort mit Fädeldraht oder 
ähnlichem den Kontakt aufzubauen für das PICkit um die schnittstelle zum 
programmieren zu testen

von tut nichts zu Sache (Gast)


Lesenswert?

...mal ne ganz dumme Frage: Den richtigen Controller hast du im MPLAB 
unter Configure/Select Device ausgewählt?

von Martin (Gast)


Angehängte Dateien:

Lesenswert?

Ja hab ich. Selbst wenn ich den falschen ausgewählt hätte, würde er ja 
zumindest eine andere Target Device ID im Return anstatt 0x0 anzeigen.

"Target Device ID (0x0) does not
match expected Device ID (0x3024)."

von Nico (nico123)


Lesenswert?

Die Versorgung über ein Micro-USB-Netzteil könnte problematisch sein, da 
diese meist zu Laden von Smartphones gedacht sind und dabei die 
Datenleitungen gebrückt oder mit diversen Spannungsteilern belegt sind! 
Das würde Probleme machen für die Takt- und Datenleitung der 
ICSP-Schnittstelle.

Aber wenn Du schon mit externen 3,3V eingespeist hast, dann liegt das 
Problem noch woanders!
Zeig doch mal dein Layout oder ein Foto vom Aufbau, vielleicht fällt uns 
dann noch was ein!

von Frank K. (fchk)


Lesenswert?

Martin schrieb:
> Ja hab ich. Selbst wenn ich den falschen ausgewählt hätte, würde er ja
> zumindest eine andere Target Device ID im Return anstatt 0x0 anzeigen.
>
> "Target Device ID (0x0) does not
> match expected Device ID (0x3024)."

Du hast Doch schon die Info bekommen, dass Du über die USB-Pins NUR per 
LVP programmieren kannst. Default ist HVP. Heißt also: Gehe in den 
Einstellungen auf PICKIT3, dann rechts auf "Program Options", und da 
gibts einen Punkt "Enable Low Voltage Programming" Da musst Du dann Dein 
Kreuz setzen, und dann sollte es funktionieren, wenn es daran lag.

fchk

von Martin (Gast)


Lesenswert?

Wahnsinn,

wie ich solche trivialen Fehler hasse. Vielen Dank für das Feedback das 
Problem ist damit gelöst. Jetzt muss ich mich dran begeben den Rest 
meiner Platine durchzutesten. Ein Programmierbarer Controller heißt noch 
nicht, dass er auch funktionieren wird.

Ich halte euch auf dem laufenden.

Vielen Dank an alle

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.