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.
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.
ja ich weiss, aber ich bekomme die Fehlermeldung zwar nicht beim Compilieren, aber beim Hochladen.
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 ?
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! ><())°>
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.
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 |
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 ?
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.
OK, einen noch. Der PicKit3 erwartet einen anderen µC. Hast du da zwei Projekte angelegt oder was stellst du da in MPLAB um?
Kann auch sein das der µC nicht vom PicKit unterstützt wird. Oder die passende Firmware dazu nicht auf dein PicKit geladen ist.
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.
Zeig doch mal Deine beiden Konfigurationen für den 877a und den 884
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%
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....
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.