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); }
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.
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.
Tobi P. schrieb: > Erst mal nur mit internem Oszillator testen > Die antiken PIC16F72 und PIC16F872 haben keinen internen Oszillator.
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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.