PIC16F88 startet nicht nach dem Programmieren

Gast #4229753
Lesenswert?

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)
18

19
int main(void)
20
{
21
    TRISAbits.TRISA0 = 0;
22
    TRISAbits.TRISA1 = 0;
23

24
    while(1)
25
    {
26
        PORTAbits.RA0 = 1;
27
        PORTAbits.RA1 = 1;
28
        PORTAbits.RA0 = 0;
29
        PORTAbits.RA1 = 0;
30
    }
31
}
Gast #4229819
Lesenswert?

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.
Gast #4229921
Lesenswert?

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).
Gast #4229990
Lesenswert?

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.
#4230000
Lesenswert?

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.
Gast #4230034
Lesenswert?

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? :-)
Gast #4230078
Lesenswert?

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. :-)
#4230094
Lesenswert?

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 ..."
Gast #4230143
Lesenswert?

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.
#4230180
Lesenswert?

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)
Gast #4245568
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren