Forum: Mikrocontroller und Digitale Elektronik PIC16F872 / F72 - pickit3 - microcontroller programmiert aber keine Signale


von Andi Herrmann (Gast)


Lesenswert?

Hallo zusammen,

ich bin jetzt seit gefühlt Tagen dabei, einen PIC16F72 und einen 
PIC16F872 zu programmieren. Ich habe auch mehrere Microcontroller da, 
das heißt ein Problem mit kaputten sollte ich nicht haben.
Ich habe schon PIC's programmiert und benutze einen Pickit3-clone. Mit 
dem hat das auch schon wunderbar funktioniert. Ich programmiere über 
MPLAB x IDE v5.00.
Ich probiere immer nur das einfachste Programm aus, siehe unten, bekomme 
eine Verbindung zum Pickit3 und der Controller wird auch programmiert. 
Ich bekomme allerdings kein Signal an den Output pins.

Ich habe schon alles mögliche probiert: Alle Ports durchprobiert, Power 
über USB und ohne, Prozessorfrequenz auf 16 oder 20 MHz, Verbindung zum 
Board so kurz wie möglich machen, sämtliche Hardware weglassen und mit 
Multimeter und Oszi direkt an den Pins messen, bootloader neu auf 
Pickit3 laden, MPlab IDE neu starten. Aber ich bekomme kein Ergebnis. 
Die Spannung bleibt bei wenigen Milivolt.
Ich habe gerade kein Foto vom Board, aber ich habe nur die Verbindungen 
wie auf den Standard Beschreibungen/Bildern für Pickit3 zu sehen. Vdd, 
GND auf beiden Seiten, PGC, PGD. PGM auf Masse und MCLR mit 10k auf Vdd.
Ich habe keine Ahnung, was ich noch ausprobieren könnte.

Hat jemand eine Idee?



main.c:


#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <pic16f872.h> //pic16f72.h


#pragma config FOSC = HS        // Oscillator Selection bits (HS 
oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT 
disabled)
#pragma config PWRTE = OFF       // Power-up Timer Enable bit (PWRT 
disabled)
#pragma config CP = OFF         // FLASH Program Memory Code Protection 
bit (Code protection off)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR 
disabled)


#define _XTAL_FREQ 20000000


void delayms(int x);


void main() {

//    ADCON0=0x00;
//    ADCON1=0x07;

    TRISA = 0x00;
    PORTA = 0xFF;
    while (1){       //habs auch schon nur mit Output probiert, ohne 
delay
        PORTA=0x00;
        delayms(100);
        PORTA=0xFF;
        delayms(100);
    }

  }

void delayms(int x){
    int y=((float)(x*300))/3;
    do{ y--; }while(y != 0);
}

von Tobi P. (Gast)


Lesenswert?

Erst mal nur mit internem Oszillator testen

Die delay routine würde ich nur mit einem Zähler machen.

Analoge Eingänge von Pics sind beim Reset aktiv, man muss Sie selbst auf 
digital umstellen.

von Andi H. (electric_andrew)


Lesenswert?

Was genau meinst Du mit internem Oszillator? Ich benutze meines Wissens 
einen Internen. delay routinen mache ich sonst auch mit einem Zähler, 
war nur für den Test. Aber es funktioniert wie gesagt auch ohne den 
delay nicht.
Analoge Eingänge habe ich schon versucht, mit ADCON umzustellen, das war 
auch nicht das Problem.

von Witkatz :. (wit)


Lesenswert?

Tobi P. schrieb:
> Erst mal nur mit internem Oszillator testen
>

Die antiken PIC16F72 und PIC16F872 haben keinen internen Oszillator.

von Andi H. (electric_andrew)


Lesenswert?

Witkatz :. schrieb:
> Tobi P. schrieb:
>> Erst mal nur mit internem Oszillator testen
>>
>
> Die antiken PIC16F72 und PIC16F872 haben keinen internen Oszillator.

Die Funktion der Pins sollte aber dennoch gegeben sein, oder?

von Chris B. (dekatz)


Lesenswert?

Andi H. schrieb:
> Witkatz :. schrieb:
>> Tobi P. schrieb:
>>> Erst mal nur mit internem Oszillator testen
>>>
>>
>> Die antiken PIC16F72 und PIC16F872 haben keinen internen Oszillator.
>
> Die Funktion der Pins sollte aber dennoch gegeben sein, oder?

Nein, wie den auch? Ohne Takt belebt der Programmcounter auf 0000 
stehen.
Man kann den PIC ohne laufenden Takt programmieren weil der Programmer 
selbst einen Takt generiert, aber dann ist Schluss.

von Witkatz :. (wit)


Lesenswert?

Andi H. schrieb:
> Die Funktion der Pins sollte aber dennoch gegeben sein, oder?
Di Funktion der Pins ist im DaBla Kapitel Oscillator Configurations 
beschrieben. Wenn du HS konfigurierst, sollte an den Pins OSC1 OSC2 ein 
Quarz mit den passenden Lastkapazitäten angeschlossen sein.

von Tobi P. (Gast)


Lesenswert?

Witkatz :. schrieb:
> Tobi P. schrieb:
>> Erst mal nur mit internem Oszillator testen
>>
>
> Die antiken PIC16F72 und PIC16F872 haben keinen internen Oszillator.

Ok, dann evtl den Prozessor wechseln.

Den Quartz muss man bei den alten schon recht genau aufbauen.

Singel point of failure kann der Quartz sein. Besser keine Billigquarze 
und es so aufbauen wie in Datenblatt und Application node beschrieben.

von Andi H. (electric_andrew)


Lesenswert?

Witkatz :. schrieb:
> Andi H. schrieb:
>> Die Funktion der Pins sollte aber dennoch gegeben sein, oder?
> Di Funktion der Pins ist im DaBla Kapitel Oscillator Configurations
> beschrieben. Wenn du HS konfigurierst, sollte an den Pins OSC1 OSC2 ein
> Quarz mit den passenden Lastkapazitäten angeschlossen sein.


Danke! Dann hätte ich mal gleich im Datenblatt schauen sollen. Das ist 
eben das Problem, wenn man von einem Microcontroller mit internem 
Oszillator auf solche ohne umsteigt.
Ich werde das ganze jetzt wahrscheinlich, weil ich den Controller für 
mehrere Anwendungen brauche, die zeitlich nicht sehr genau sein müssen, 
mit dem RC Oszillator realisieren.

Datenblatt:

For timing insensitive applications, the “RC” device
option offers additional cost savings. The RC oscillator
frequency is a function of the supply voltage, the resistor (REXT) and 
capacitor (CEXT) values, and the operating temperature. In addition to 
this, the oscillator
frequency will vary from unit to unit due to normal process parameter 
variation. Furthermore, the difference
in lead frame capacitance between package types will
also affect the oscillation frequency, especially for low
CEXT values. The user also needs to take into account
variation due to tolerance of external R and C components used. Figure 
11-3 shows how the R/C combination is connected to the PIC16F872.


Danke nochmal Euch allen!

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.