Hallo, vor ca. 2 Jahren hab ich mich schon intensiv mit PIC´s beschäftigt. Damals hab ich mir aus ne Lochrasterplatine eine Testplatine für einen PIC 16F876 zusammengelötet. Naja damals gabs Probleme und ich dachte es liegt an meinen Lötkünsten da es nicht besonders aussah. So nun muss ich im Rahmen eines Projektes wieder einen PIC16F876 programmieren. Dieses mal hab ich die Möglichkeit gehabt eine Testplatine zu ätzen. Den Schaltplan hab ich mal angehängt. Oben das ist der Reset Taster und sonst sind einfach die Ports des PICs auf Sockelleisten geführt. Außerdem ist noch ein kleiner Spannungsregler drauf und eine ICSP Schnittstelle sowie eine I2C Schnittstelle. Als Taktgeber dient ein Quarz mit 4MHZ mit zusätzlich jeweils einem 33pf Kondensator. So nun hab ich im cc5x ein einfachens Programm geschrieben: #include <C:\Programme\bknd\CC5X\16F876A.h>// Prozessor-Typ definieren #pragma config |= 0b.1111.1111.0010 void Delay1ms() { OPTION = 2;// Vorteiler auf 8 einstellen TMR0 = 131;// 125 * 8 = 1000 (= 1 ms) while (TMR0);// Schleife, solange bis TMR0=0 wird } void main(void)// Start des Hauptprogramms { TRISB = 0b.0000.0000;// Pins RB0...RB7 -Ausgänge char Wert; int u=0; Sprungmarke: u=200; Wert=0b.1010.1010; PORTB=Wert; while(u!=0) { Delay1ms(); u=u-1; } Wert=0b.0101.0101; PORTB=Wert; u=200; while(u!=0) { Delay1ms(); u=u-1; } goto Sprungmarke;// Alles wiederholen } Ich hab an den PortB LEDs mit 1K Vorwiederständen gehängt. Das Programm soll nun abwechselnt die einen 4 LEDS für 200ms leuchten lassen und dann die anderen. Aber was der PIC macht ist mir suspekt. Er wechselt zwar schon die 4 Lämpchen aber nicht nach 200ms sonder willkürlich zwischen ca. 300ms-1s udn irgendwann bleibt er stehen. Woran kann sowas liegen? Ist der kaputt? Packt der PIC es nicht die LEDS zu treiben? Stimmt was mit dem Quarz nicht? Danke für eure Antworten. Gruß Hannes
@Hannes: Arbeite nur seltenst mit PIC, aber: Pfui, mit goto arbeitet man ja nicht mehr gerne. Obwohl, daran kann es nicht liegen, wie ich sehe. Aber wer weiß, vielleicht macht der C-Compiler doch irgendwelche Mätzchen: Sauberer und übersichtlicher wäre es so: void main(void) // Start des Hauptprogramms { TRISB = 0b.0000.0000; // Pins RB0...RB7 -Ausgänge unsigned char Wert; unsigned int u; while (1) { u=200; Wert=0b.1010.1010; PORTB=Wert; while(u!=0) { Delay1ms(); u--; } Wert=0b.0101.0101; PORTB=Wert; u=200; while(u!=0) { Delay1ms(); u--; } } }
Hi, danke für den Tipp, stimmt schon gotos sind eigentlich nix, aber das wars leider nicht. Was noch zu erwähnen wäre am Port B funktioniert anscheinend ein Pin nicht mehr, da leuchtet garkeine LED mehr. Ich hab mal die IC-Prog Einstellungen angehängt passt das alles? Was brauch ich an WDT,... und ist HS ok oder lieber den XT Oscillator? Gruß Hannes
Laß mal alle Zusatzinitialisierungen wie Watchdog, brownout, alles überflüssige weg, und was du nicht brauchst. Oszillator, da mußt du den initialisieren, der verwendet werden soll. Wahrscheinlich XT (= extern?), wie aus dem Schaltplan ersichtlich. Der Oszillator dort ist OK. Gruß Dietmar
Hast du noch einen 2. PIC in Reserve zum Vergleich? Bei Hardware-Defekt, wie einem Pin, der nicht mehr funktioniert, (was immer damit geschehen ist, Überspannung, Kurzschluß) läuft man Gefahr, daß auf dem Silizium-Chip auch noch andere Strukturen beschädigt sind. Gruß Dietmar
Hast Du die Schaltung so wie im Schaltplan aufgebaut? Beim Spannungsregler sind doch Pin 1 und 3 vertauscht! Und warum steht bei der Power-Verbindung / C1 +5V??
Du musst ihm sagen dass er mit 4MHz xt laufen soll. 876 oder 876A ? ein hohes C direkt am Chip..
Pack mal 100nF direkt hinter den Spannungsregler und unbedingt noch einen 100nF so nah an die Versorgungspins vom pic wie möglich. Bye, Simon
So jetzt mal an alle die mir hier so schnell geantwortet haben. Es tut, oleeeee. Es war kein Hardwaredefekt, auch der Schaltplan hat gestimmt, bzw. der Schaltplan stimmt ned aber ich hab den Spannungsregler richtig herum eingebaut ;-) die Kondensatoren an den Versorggungspins sinds auchch nicht, die hab ich noch nicht eingebaut. Es ist die Konfiguration beim Programmieren, ahhh. Ich hab alle Sachen wie WDT, ... weggelassen und XT als Osillator eingestellt und jetzt tuts, ahhh. Da könnte man verrückt werden, man probiert ewig rum, lötet rum und dann sowas*g* Aber nochmal danke an alle für die Super Hilfe. Gruß Hannes
Hallo Hast du den LVP benutzt (low voltage Programming)? Dann geht nämlich ein Pin des PORTB nicht mehr (RB3) ,und wenn dann dort irgendwelche Dinge passieren, geht der PIC in den Programmiermodus, mit sehr komischen Effekten. Viel Erfolg
Lol genau das hab ich gemacht, und deshalb hat der PortB total gesponnen. Aber jetzt gehts ja. Danke für die Info. Gruß Hannes
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.