Forum: Mikrocontroller und Digitale Elektronik PIC16F884 geht, PIC16F877A nicht.


von Michael S. (misax)


Lesenswert?

hallo; meine Wenigkeit mal wieder.
Ich habe einen Programmier-Aufbau mit PICKIT3 für 884 und 877A. Der 884 
funktioniert. Beim 877A bekomme ich die Fehlermeldung:
Address: 0 Expected Value: 120a Received Value: 3fff
Failed to program device
kann sich jemand erinnern in seinen ersten PIC-Tagen diesen Fehler auch 
mal gehabt zu haben und weiß wie man ihn behebt ?
kann es mit dem Oszillator zusammenhängen : Ich habe 4MHz, 10MHz und 
16MHz ausprobiert; immer das gleiche.
mal eine Verständnisfrage: Muss ich dem PIC nicht VOR der Programmierung 
mitteilen welchen Oszillator ich drangemacht habe ? Zumindest den Typ 
des Oszillators ? Also ob HS, XT, LP oder EXTRC ? Im Programm setze ich 
FOSC auf HS, aber muss ich das nicht einen Schritt vorher machen damit 
ich das Programm überhaupt laden kann ? Und falls ja, wie mache ich das 
?
danke schonmal vorab für hilfreiche Antworten.

von Bratmaxxe (Gast)


Lesenswert?

Takteinstellungen usw. werden bei den PICs üblicherweise mit den #pragma 
Anweisungen definiert (in deinem Code). Ganz zu Beginn. Das wird 
wiederrum compiliert und die entsprechenden Fuses werden gesetzt.

von Michael S. (misax)


Lesenswert?

ja ich weiss, aber ich bekomme die Fehlermeldung zwar nicht beim 
Compilieren, aber beim Hochladen.

von Bratmaxxe (Gast)


Lesenswert?


von Bratmaxxe (Gast)


Lesenswert?

Wenn beim hochladen ein Fehler kommt ist das ein Problem zwischen PicKit 
und Device. Sicher dass du's richtig angeschlossen hast ? Auch nicht 
irgendwelche Komponenten in den Programmierleitungen ?

von Teo D. (teoderix)


Lesenswert?

Bratmaxxe schrieb:
> Siehe dazu auch:
> https://www.sprut.de/electronic/pic/c/pic_c/pic_c90_pic_spezifisches.html

Das hatten wir schon alles vor ein paar Tagen, mehrfach!
><())°>

von Michael S. (misax)


Lesenswert?

ich habe in den configs:
#pragma config FOSC = HS


Zum Aufbau: wenn ich den PIC16F884 einsetze und ein Programm für diesen 
compiliere, kann ich es einwandfrei hochladen. Tausche ich ihn gegen den 
PIC16F877A ein und compiliere ein Programm für diesen, ist das 
Compilieren fehlerfrei, aber beim Hochladen kommt die Fehlermdlung.

von usuru (Gast)


Lesenswert?

Die Konfiguration wird bei den PICs zusammen mit der Programmierung 
übermittelt, das läuft völlig anders als bei der Atmels.

Der 877a und der 884 sind doch verschiedene µC, allein die 
Konfigurationen unterscheiden sich essentiell, ich habe mal die 
entsprechenden Konfigurationsbezeichnungen angehängt

877a:
1
;==========================================================================
2
3
; The following is an assignment of address values for all of the
4
; configuration registers for the purpose of table reads
5
_CONFIG          EQU  H'2007'
6
7
;----- CONFIG Options --------------------------------------------------
8
_FOSC_LP             EQU  H'3FFC'    ; LP oscillator
9
_LP_OSC              EQU  H'3FFC'    ; LP oscillator
10
_FOSC_XT             EQU  H'3FFD'    ; XT oscillator
11
_XT_OSC              EQU  H'3FFD'    ; XT oscillator
12
_FOSC_HS             EQU  H'3FFE'    ; HS oscillator
13
_HS_OSC              EQU  H'3FFE'    ; HS oscillator
14
_FOSC_EXTRC          EQU  H'3FFF'    ; RC oscillator
15
_RC_OSC              EQU  H'3FFF'    ; RC oscillator
16
17
_WDTE_OFF            EQU  H'3FFB'    ; WDT disabled
18
_WDT_OFF             EQU  H'3FFB'    ; WDT disabled
19
_WDTE_ON             EQU  H'3FFF'    ; WDT enabled
20
_WDT_ON              EQU  H'3FFF'    ; WDT enabled
21
22
_PWRTE_ON            EQU  H'3FF7'    ; PWRT enabled
23
_PWRTE_OFF           EQU  H'3FFF'    ; PWRT disabled
24
25
_BOREN_OFF           EQU  H'3FBF'    ; BOR disabled
26
_BODEN_OFF           EQU  H'3FBF'    ; BOR disabled
27
_BOREN_ON            EQU  H'3FFF'    ; BOR enabled
28
_BODEN_ON            EQU  H'3FFF'    ; BOR enabled
29
30
_LVP_OFF             EQU  H'3F7F'    ; RB3 is digital I/O, HV on MCLR must be used for programming
31
_LVP_ON              EQU  H'3FFF'    ; RB3/PGM pin has PGM function; low-voltage programming enabled
32
33
_CPD_ON              EQU  H'3EFF'    ; Data EEPROM code-protected
34
_CPD_OFF             EQU  H'3FFF'    ; Data EEPROM code protection off
35
36
_WRT_HALF            EQU  H'39FF'    ; 0000h to 0FFFh write-protected; 1000h to 1FFFh may be written to by EECON control
37
_WRT_1FOURTH         EQU  H'3BFF'    ; 0000h to 07FFh write-protected; 0800h to 1FFFh may be written to by EECON control
38
_WRT_256             EQU  H'3DFF'    ; 0000h to 00FFh write-protected; 0100h to 1FFFh may be written to by EECON control
39
_WRT_OFF             EQU  H'3FFF'    ; Write protection off; all program memory may be written to by EECON control
40
41
_DEBUG_ON            EQU  H'37FF'    ; In-Circuit Debugger enabled, RB6 and RB7 are dedicated to the debugger
42
_DEBUG_OFF           EQU  H'3FFF'    ; In-Circuit Debugger disabled, RB6 and RB7 are general purpose I/O pins
43
44
_CP_ON               EQU  H'1FFF'    ; All program memory code-protected
45
_CP_ALL              EQU  H'1FFF'    ; All program memory code-protected
46
_CP_OFF              EQU  H'3FFF'    ; Code protection off
.

.

.

884:
1
;==========================================================================
2
3
; The following is an assignment of address values for all of the
4
; configuration registers for the purpose of table reads
5
_CONFIG1         EQU  H'2007'
6
_CONFIG2         EQU  H'2008'
7
8
;----- CONFIG1 Options --------------------------------------------------
9
_FOSC_LP             EQU  H'3FF8'    ; LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
10
_LP_OSC              EQU  H'3FF8'    ; LP oscillator: Low-power crystal on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
11
_FOSC_XT             EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
12
_XT_OSC              EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
13
_FOSC_HS             EQU  H'3FFA'    ; HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
14
_HS_OSC              EQU  H'3FFA'    ; HS oscillator: High-speed crystal/resonator on RA6/OSC2/CLKOUT and RA7/OSC1/CLKIN
15
_FOSC_EC             EQU  H'3FFB'    ; EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
16
_EC_OSC              EQU  H'3FFB'    ; EC: I/O function on RA6/OSC2/CLKOUT pin, CLKIN on RA7/OSC1/CLKIN
17
_FOSC_INTRC_NOCLKOUT EQU  H'3FFC'    ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
18
_INTRC_OSC_NOCLKOUT  EQU  H'3FFC'    ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
19
_INTOSCIO            EQU  H'3FFC'    ; INTOSCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
20
_FOSC_INTRC_CLKOUT   EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
21
_INTRC_OSC_CLKOUT    EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
22
_INTOSC              EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN
23
_FOSC_EXTRC_NOCLKOUT EQU  H'3FFE'    ; RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
24
_EXTRC_OSC_NOCLKOUT  EQU  H'3FFE'    ; RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
25
_EXTRCIO             EQU  H'3FFE'    ; RCIO oscillator: I/O function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
26
_FOSC_EXTRC_CLKOUT   EQU  H'3FFF'    ; RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
27
_EXTRC_OSC_CLKOUT    EQU  H'3FFF'    ; RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
28
_EXTRC               EQU  H'3FFF'    ; RC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, RC on RA7/OSC1/CLKIN
29
30
_WDTE_OFF            EQU  H'3FF7'    ; WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
31
_WDT_OFF             EQU  H'3FF7'    ; WDT disabled and can be enabled by SWDTEN bit of the WDTCON register
32
_WDTE_ON             EQU  H'3FFF'    ; WDT enabled
33
_WDT_ON              EQU  H'3FFF'    ; WDT enabled
34
35
_PWRTE_ON            EQU  H'3FEF'    ; PWRT enabled
36
_PWRTE_OFF           EQU  H'3FFF'    ; PWRT disabled
37
38
_MCLRE_OFF           EQU  H'3FDF'    ; RE3/MCLR pin function is digital input, MCLR internally tied to VDD
39
_MCLRE_ON            EQU  H'3FFF'    ; RE3/MCLR pin function is MCLR
40
41
_CP_ON               EQU  H'3FBF'    ; Program memory code protection is enabled
42
_CP_OFF              EQU  H'3FFF'    ; Program memory code protection is disabled
43
44
_CPD_ON              EQU  H'3F7F'    ; Data memory code protection is enabled
45
_CPD_OFF             EQU  H'3FFF'    ; Data memory code protection is disabled
46
47
_BOREN_OFF           EQU  H'3CFF'    ; BOR disabled
48
_BOR_OFF             EQU  H'3CFF'    ; BOR disabled
49
_BOREN_SBODEN        EQU  H'3DFF'    ; BOR controlled by SBOREN bit of the PCON register
50
_BOR_SBODEN          EQU  H'3DFF'    ; BOR controlled by SBOREN bit of the PCON register
51
_BOREN_NSLEEP        EQU  H'3EFF'    ; BOR enabled during operation and disabled in Sleep
52
_BOR_NSLEEP          EQU  H'3EFF'    ; BOR enabled during operation and disabled in Sleep
53
_BOREN_ON            EQU  H'3FFF'    ; BOR enabled
54
_BOR_ON              EQU  H'3FFF'    ; BOR enabled
55
56
_IESO_OFF            EQU  H'3BFF'    ; Internal/External Switchover mode is disabled
57
_IESO_ON             EQU  H'3FFF'    ; Internal/External Switchover mode is enabled
58
59
_FCMEN_OFF           EQU  H'37FF'    ; Fail-Safe Clock Monitor is disabled
60
_FCMEN_ON            EQU  H'3FFF'    ; Fail-Safe Clock Monitor is enabled
61
62
_LVP_OFF             EQU  H'2FFF'    ; RB3 pin has digital I/O, HV on MCLR must be used for programming
63
_LVP_ON              EQU  H'3FFF'    ; RB3/PGM pin has PGM function, low voltage programming enabled
64
65
_DEBUG_ON            EQU  H'1FFF'    ; In_Circuit Debugger enabled, RB6/ICSPCLK and RB7/ICSPDAT are dedicated to the debugger
66
_DEBUG_OFF           EQU  H'3FFF'    ; In-Circuit Debugger disabled, RB6/ICSPCLK and RB7/ICSPDAT are general purpose I/O pins
67
68
;----- CONFIG2 Options --------------------------------------------------
69
_BOR4V_BOR21V        EQU  H'3EFF'    ; Brown-out Reset set to 2.1V
70
_BOR21V              EQU  H'3EFF'    ; Brown-out Reset set to 2.1V
71
_BOR4V_BOR40V        EQU  H'3FFF'    ; Brown-out Reset set to 4.0V
72
_BOR40V              EQU  H'3FFF'    ; Brown-out Reset set to 4.0V
73
74
_WRT_HALF            EQU  H'39FF'    ; 0000h to 07FFh write protected, 0800h to 0FFFh may be modified by EECON control
75
_WRT_1FOURTH         EQU  H'3BFF'    ; 0000h to 03FFh write protected, 0400h to 0FFFh may be modified by EECON control
76
_WRT_256             EQU  H'3DFF'    ; 0000h to 00FFh write protected, 0100h to 0FFFh may be modified by EECON control
77
_WRT_OFF             EQU  H'3FFF'    ; Write protection off

von Michael S. (misax)


Lesenswert?

ja, aber die Fehlermeldung kommt doch schon BEVOR die Programmierung und 
damit das Setzen der Konfiguration überhaupt erfolgen kann. Anscheinend 
braucht doch der 877A beim Programmieraufbau was anderes als der 884. 
Was könnte das sein ?

von W.S. (Gast)


Lesenswert?

Michael S. schrieb:
> kann es mit dem Oszillator zusammenhängen : Ich habe 4MHz, 10MHz und
> 16MHz ausprobiert; immer das gleiche.

Das hat auch nichts miteinander zu tun.
So ein PIC hat ein Konfigurationswort, so etwa vergleichbar mit den 
Fuses beim AVR, wo drinsteht, was für ein Oszillator, ob und welcher 
Code auslesegeschützt sein soll, ob der Prescaler dem Timer0 oder dem 
Watchdog zugeordnet werden soll und so weiter. Sowas ist komplett 
außerhalb der Adreßräume des PIC und wird auch separat für sich 
programmiert.

Es gibt da eine Konvention, um die Werte für User-ID, Konfiguration und 
ggf. EEPROM im Hexfile unterzubringen. Sie werden dort einfach außerhalb 
des adressierbaren Adreßbereiches angeordnet. Beim PIC16F88xx wimre 
Config auf 2007h und EEPROM auf 2100h..21ffh.

Sowas weiß man, wenn man diese Dinger in Assembler programmiert. Ob da 
dein C-Compiler dieses richtig tut oder nicht, mußt du selber 
herausfinden. Vielleicht ist da bloß irgend ein Kringel in einem 
Konfigurationsfile verkehrt.

Ansonsten gibt es da noch etwas zu bemerken, wenn dein Chip einen 
internen RC-Oszillator hat. Dann sollte beim Programmieren Vpp vor Vcc 
eingeschaltet werden, damit der interne Oszillator nicht bereits den 
Adreßzähler weitergestellt hat, bevor Vpp die zum Umschalten in den 
Programmiermodus erforderliche Höhe erreicht hat.

W.S.

von Teo D. (teoderix)


Lesenswert?

OK, einen noch.

Der PicKit3 erwartet einen anderen µC.
Hast du da zwei Projekte angelegt oder was stellst du da in MPLAB um?

von Vorname N. (mcu32)


Lesenswert?

Kann auch sein das der µC nicht vom PicKit unterstützt wird. Oder die 
passende Firmware dazu nicht auf dein PicKit geladen ist.

von W.S. (Gast)


Angehängte Dateien:

Lesenswert?

usuru schrieb:
> ;----- CONFIG Options --------------------------------------------------
> _FOSC_LP             EQU  H'3FFC'    ; LP oscillator

Tja, immer wieder die Leiden der jungen C-Programmierer mit endlosen 
Wüsten aus nur jeweils einmal zu brauchenden Konfigurationsbezeichnern. 
Da kommt Konfusion auf, weil offenbar niemand mal ins Manual guckt, um 
herauszufinden, was da wofür gut ist. Für den PIC16F877A siehe Bild.

Vielleicht hilft's.

W.S.

von usuru (Gast)


Lesenswert?

Zeig doch mal Deine beiden Konfigurationen für den 877a und den 884

von Teo D. (teoderix)


Angehängte Dateien:

Lesenswert?

W.S. schrieb:
> Tja, immer wieder die Leiden der jungen C-Programmierer mit endlosen
> Wüsten aus nur jeweils einmal zu brauchenden Konfigurationsbezeichnern.
> Da kommt Konfusion auf, weil offenbar niemand mal ins Manual guckt, um
> herauszufinden, was da wofür gut ist. Für den PIC16F877A siehe Bild.
>
> Vielleicht hilft's.

Viel schlimmer, MPLAB generiert dir diesen Scheiß. Hab den TO schon 
letzte Woche x mal drauf hingewiesen, Dabla, Tutorial (Sprut) ... Nix, 
er will die Leckerlis zugeworfen bekommen!


usuru schrieb:
> Zeig doch mal Deine beiden Konfigurationen für den 877a und den 884

Das hat nichts mit der Configuration zu tun! Der PicKit3 meldet bereits, 
das ein falscher µC angeschlossen ist und verweigert die Mitarbeit. Kann 
auch von Kontaktproblemen herrühren. Dieses Problem hatten wir letzte 
Woche bereits gelöst.
Er hat nur das Project nicht auf den neuen Processor umgestellt..... 99%

von Herbert B. (herba)


Lesenswert?

Teo D. schrieb:
> letzte Woche x mal drauf hingewiesen, Dabla, Tutorial (Sprut) ... Nix,
> er will die Leckerlis zugeworfen bekommen!

Na, hier werden sie ihm auch immer wieder nachgeworfen....

von Michael S. (misax)


Lesenswert?

hier die vom 884:
1
//#pragma config FOSC = INTRC_CLKOUT // Oscillator Selection bits (INTOSC oscillator: CLKOUT function on RA6/OSC2/CLKOUT pin, I/O function on RA7/OSC1/CLKIN)
2
3
#pragma config FOSC = HS
4
5
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
6
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
7
#pragma config MCLRE = ON       // RE3/MCLR pin function select bit (RE3/MCLR pin function is MCLR)}
8
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
9
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
10
#pragma config BOREN = ON       // Brown Out Reset Selection bits (BOR enabled)
11
#pragma config IESO = ON        // Internal External Switchover bit (Internal/External Switchover mode is enabled)
12
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)
13
#pragma config LVP = OFF         // Low Voltage Programming Enable bit (RB3/PGM pin has PGM function, low voltage programming enabled)
14
15
// CONFIG2
16
#pragma config BOR4V = BOR40V   // Brown-out Reset Selection bit (Brown-out Reset set to 4.0V)
17
#pragma config WRT = OFF        // Flash Program Memory Self Write Enable bits (Write protection off)
und hier die vom 877a:
1
// CONFIG
2
#pragma config FOSC = HS     // Oscillator Selection bits (RC oscillator)
3
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
4
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
5
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
6
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
7
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
8
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
9
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
10
11
// #pragma config statements should precede project file includes.
12
// Use project enums instead of #define for ON and OFF.

aber ich verstehe nicht wieso das an den Configs liegen könnte denn 
MPLAB kann ja das C-Programm und die Configs gar nicht erst hochladen ?

und der Aufbau ist immer der gleiche, ich tausche nur den Chip aus, der 
eine geht, der andere nicht.

: Bearbeitet durch User
von Michael S. (misax)


Angehängte Dateien:

Lesenswert?

Ich tausche lediglich den Chip aus (und natürlich das Projekt in der 
IDE). Denn 884 kann ich programmieren und der 877A bringt:
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x7ff
configuration memory
program memory
Address: 0 Expected Value: 120a Received Value: 3fff
Failed to program device

von Teo D. (teoderix)


Lesenswert?

Hmmm, hast noch nen zweiten 877A....
MPLABx hat(te) schon so seine Macken. Starte die mal nach dem Wechsel 
auf den 877er neu!???
...
Sitzt der evtl. etwas anders im Breadboard, die Pins.... Das kann auf 
solchen Teilen, manchmal auf Kleinigkeiten ankommen.

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.