Forum: Mikrocontroller und Digitale Elektronik PIC16F88 startet nicht nach dem Programmieren


von Rudolph (Gast)


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
}

von Volker S. (vloki)


Lesenswert?

Willst du im Debug Modus testen oder gleich endgültig programmieren?
Ist "Hold in Reset" in der Menüleiste gedrückt?

von Rudolph (Gast)


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.

von Volker S. (vloki)


Lesenswert?

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?

von Rudolph (Gast)


Lesenswert?

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.

von Volker S. (vloki)


Lesenswert?

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.

von Volker S. (vloki)


Lesenswert?

Rudolph schrieb:
> die Platine ist ein SERLCD von Sparkfun

Rudolph 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!

von Dachs (Gast)


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

von Rudolph (Gast)


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.

von Volker S. (vloki)


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.

: Bearbeitet durch User
von Rudolph (Gast)


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? :-)

von Volker S. (vloki)


Lesenswert?

Ich hätte es vielleicht auch eher unter Tools->Embedded eingebaut...

von Volker S. (vloki)


Lesenswert?

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...

von Rudolph (Gast)


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. :-)

von Volker S. (vloki)


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 ..."

von Rudolph (Gast)


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.

von Volker S. (vloki)


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)

: Bearbeitet durch User
von Rudolph (Gast)


Lesenswert?

Ach ja, das läuft übrigens, mein serLCD hat jetzt endlich eine Firmware 
die sich nicht mehr aufhängt, wenn man dem Teil kontinuierlich Daten 
schickt.

von Volker S. (vloki)


Lesenswert?

Na das ging doch jetzt recht schnell.
MPLAB-X Projekt mit "Package" packen und an Sparkfun schicken?

von Rudolph (Gast)


Lesenswert?

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.

von Rudolph (Gast)


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.

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.