PIC16F88 startet nicht nach dem Programmieren

Gast #4229753
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
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
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
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.
Gast
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
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 ..."
Gast
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)
Gast
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.
Gast
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.
Gast
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.