Hi,
ich versuche gerade "kurz" eine Kleinigkeit mit einem PIC16F88 zu
erledigen und der Controller wird vom MPLABX nicht aus dem Reset
gelassen.
Ich habe ein PICKIT3 und die Platine ist ein SERLCD von Sparkfun.
Ich benutze MPLABX 3.05 und XC8.
Zum Testen habe ich gerade ein komplett frisches Projekt angelegt mit
dem unten stehenden Code.
Compiliert, flasht, läuft nicht.
Sobald ich den PICKIT3 abziehe läuft das Programm los.
Was mache ich falsch?
1
#include<xc.h>
2
3
// CONFIG1
4
#pragma config FOSC = HS // HS Oscillator Selection bits (EXTRC oscillator; CLKO function on RA6/OSC2/CLKO)
5
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
6
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled)
7
#pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit (RA5/MCLR/VPP pin function is MCLR)
8
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR enabled)
9
#pragma config LVP = ON // Low-Voltage Programming Enable bit (RB3/PGM pin has PGM function, Low-Voltage Programming enabled)
10
#pragma config CPD = OFF // Data EE Memory Code Protection bit (Code protection off)
11
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off)
12
#pragma config CCPMX = RB0 // CCP1 Pin Selection bit (CCP1 function on RB0)
13
#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)
14
15
// CONFIG2
16
#pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor enabled)
17
#pragma config IESO = ON // Internal External Switchover bit (Internal External Switchover mode enabled)
Volker S. schrieb:> Willst du im Debug Modus testen oder gleich endgültig programmieren?
Ich möchte das einfach nur programmieren und das soll dann gleich
laufen.
Den PICKIT3 kann ich zwar jedesmal abziehen, das ist aber sehr lästig.
> Ist "Hold in Reset" in der Menüleiste gedrückt?
Nein, da habe ich aber auch schon drauf geklickt und auch "Release from
Reset" dann benutzt.
Den Controller kümmert das nur wenig, der bleibt im Reset.
Rudolph schrieb:> Ich möchte das einfach nur programmieren und das soll dann gleich> laufen.> Den PICKIT3 kann ich zwar jedesmal abziehen, das ist aber sehr lästig.
Wenn du es schon programmiert hast, wieso willst du dann das PICKIT
überhaupt dran hängen lassen?
Volker S. schrieb:> Wenn du es schon programmiert hast, wieso willst du dann das PICKIT> überhaupt dran hängen lassen?
Weil das Programm noch nicht fertig ist.
Rudolph schrieb:> Weil das Programm noch nicht fertig ist.
Warum bleibst du denn dann nicht im Debug-Mode?
Da läuft das Programm doch genau gleich. Wenn nicht, dann bekommst du
sogar Hinweise wo das Problem sein könnte.
Wenn es nicht das tut was du denkst, kannst du es anhalten und rein
schauen.
Rudolph schrieb:> die Platine ist ein SERLCD von SparkfunRudolph schrieb:> #pragma config MCLRE = ON // RA5/MCLR/VPP Pin Function Select bit> (RA5/MCLR/VPP pin function is MCLR)
Wenn es sich um diese Platine handelt
https://www.sparkfun.com/products/9395 dann solltest du den MCLR lieber
abschalten!
Volker S. schrieb:> Wenn es sich um diese Platine handelt> https://www.sparkfun.com/products/9395 dann solltest du den MCLR lieber> abschalten!
Exakt. Die PICs kommen manchmal nicht aus dem Quark, wenn am MCLR pin
der Pullup fehlt, und der wurde hier offenbar vergessen. Also wenn Du
keinen externen Reset brauchst, solltest Du ihn abschalten oder einen
Pullup laut Datenblatt einlöten (ich glaube 3k3).
Volker S. schrieb:> Wenn es sich um diese Platine handelt> https://www.sparkfun.com/products/9395 dann solltest du den MCLR lieber> abschalten!
Es ist zwar nur die hier:
https://www.sparkfun.com/products/258
Aber MCLRE = OFF hat geholfen, danke.
Das Setup habe ich aus der IDE gezogen, man kann sich ja die
Einstellungen anzeigen lassen und daraus C-Code generieren.
Ich habe ja gedacht das wenn das schon "Memory Views" dran steht, dann
auch der Controller der dran hängt ausgelesen wird, das scheint aber gar
nicht der Fall zu sein.
Und die Unterlagen von Sparkfun sind nicht witzig.
Die Schaltungen passt nicht zur Platine und die veröffentlichte Software
passt überhaupt nicht zur Hardware.
Eigentlich wollte ich da nur "kurz" was dran fixen,
jetzt mache ich die Software neu.
Aus dem veröffentlichen Archiv:
//Hardware port definitions
#define RS PORTB.4
#define R_W PORTB.1
#define BL_Control PORTA.4
#define E PORTB.0
#define D4 PORTA.0
#define D5 PORTA.1
#define D6 PORTA.2
#define D7 PORTA.3
Wie ich es nach Durchklingeln jetzt habe:
#define LCD_E PORTAbits.RA0
#define LCD_RS PORTAbits.RA1
#define LCD_RW PORTAbits.RA3
#define BL_Control PORTAbits.RA2
#define D4 PORTBbits.RB0
#define D5 PORTBbits.RB1
#define D6 PORTBbits.RB3
#define D7 PORTBbits.RB4
Ach ja, MPLABX und XC8 war das natürlich auch nicht.
Rudolph schrieb:> Ich habe ja gedacht das wenn das schon "Memory Views" dran steht, dann> auch der Controller der dran hängt ausgelesen wird,
Das Denken wird in diesen Fällen oft überbewertet. Nachschauen geht
meistens auch schneller.
Rudolph schrieb:> Wie ich es nach Durchklingeln jetzt habe:>> #define LCD_E PORTAbits.RA0> ...
Ist doch genau wie auf dem Schaltplan ;-)
Hier sieht man auch ganz gut, was man mit dem MCLRE tun sollte.
Volker S. schrieb:>> Ich habe ja gedacht das wenn das schon "Memory Views" dran steht, dann>> auch der Controller der dran hängt ausgelesen wird,>> Das Denken wird in diesen Fällen oft überbewertet. Nachschauen geht> meistens auch schneller.
Ja was denn, warum heisst es "PIC Memory Views" wenn man sich damit eben
nicht den Speicher des angeschlossenen Controllers ansehen kann?
Ach so ja, weil es von Microchip ist? :-)
Mal ne andere Frage: "Hast du den PIC überhaupt ausgelesen?"
(z.B. mit dem grünen Pfeil der nach oben zeigt in der Menüleiste)
Wenn du das nicht gemacht hast...
Volker S. schrieb:> Mal ne andere Frage: "Hast du den PIC überhaupt ausgelesen?"
Ich bin nicht mehr sicher weil ich das Projekt im Juni angefangen und
dann wieder zur Seite gelegt hatte.
Im Zweifel, nein. :-)
Ich würde auch nicht auf die Idee kommen zu behaupten, dass ich mich mit
MPLABX oder PIC auskenne, ich spiele das erste Mal damit rum.
Und zumindest das OLED läuft inzwischen einwandfrei auch bei 3,3V. :-)
Rudolph schrieb:> Ich würde auch nicht auf die Idee kommen zu behaupten, dass ich mich mit> MPLABX oder PIC auskenne, ich spiele das erste Mal damit rum.
Ich könnte mir vorstellen, dass das nicht nur bei PICs und MPLAB-X so
läuft. Wenn man den Inhalt von von einem Controller anschauen will, dann
muss man diesen zuerst "lesen". Ein Automatismus macht hier nicht viel
Sinn. Da würden doch alle wieder nur schreien: "völlige
Zeitverschwendung, das brauch ich doch nie und die IDE macht den Scheiß
jedes Mal ..."
Volker S. schrieb:> Wenn man den Inhalt von von einem Controller anschauen will, dann> muss man diesen zuerst "lesen".
Kein Grund Beleidigungen reinzustreuen, es gibt eine Option sich was
anzusehen, die wählt man aus und es wird was angezeigt.
Um da was anzuzeigen könnte die IDE auch kurz im Hintergrund die beiden
Bytes vom Controller lesen.
Nicht automatisch dauernd, sondern wenn man es anfordert.
Schön, dass Du die Beschränkungen der IDE inzwischen so
selbstverständlich hin nimmst, das müsste aber nicht so sein wie es ist.
Rudolph schrieb:> Schön, dass Du die Beschränkungen der IDE inzwischen so> selbstverständlich hin nimmst, das müsste aber nicht so sein wie es ist.
Weißt du, nach fünf Jahren (so lange benutze ich MPLAB-X) kann man das
entweder hinnehmen oder es ganz sein lassen und sich mit dem Mist eines
anderen Herstellers herum ärgern ;-)
Wenn man dran interessiert ist was zu verbessern, kann man natürlich
auch ein Support Ticket einreichen und sich ein bisschen im MCHP Forum
beteiligen.
Oft genug musste ich allerdings auch schon selber fest stellen, dass
mein erster Gedanke a la "Was ist das jetzt schon wieder für ein..."
einfach nicht so ganz zu Ende gedacht war und das am Ende doch Sinn
macht.
(Also ist das Menü für die Configuration-Bits möglicherweise doch am
richtigen Platz)
Volker S. schrieb:> MPLAB-X Projekt mit "Package" packen und an Sparkfun schicken?
Ah, ich weiss nicht.
Die kümmert es scheinbar wenig und ich habe einiges nicht neu
implementiert was mich nicht interessiert hat.
Ich werde die mal kontaktieren.
Hmm, okay, bei Sparkfun interessiert die das scheinbar wirklich nicht.
Immerhin habe ich noch erfahren, dass der originale Quellcode verloren
gegangen ist - die schicken nur noch das .hex nach China für diese
Platinen.