Ich habe einen PIC18F2550 , auf dem ich versuche, ein einfaches Hallo-Welt-Programm zum Laufen zu bringen. Der Code ist so konfiguriert, dass eine LED mit Verzögerungen von 250 ms zwischen den Zyklen ein- und ausgeschaltet wird. Ich habe einen 4-MHz-Quarz mit 2 18-pF-Kondensatoren an den Pins 9 und 10 angeschlossen. Wenn ich mein Oszilloskop an den Ausgangspin anschließe und den Chip einschalte, kann ich sehen, dass die High-Low-Signale etwa 3-5 Sekunden lang von 0 V bis 5 V gehen, dann sind es nur flache Linien.
Wenn ich den Chip für eine Weile ausschalte und wieder einstecke, funktioniert er wieder, aber nach 3-5 Sekunden geht er wieder auf 0.
Was kann ich tun, um dieses Problem zu beheben?
Aktualisieren
Ich sollte auch hinzufügen, dass nach mehrmaligem Wiederholen des gesamten Vorgangs (dh Ein- und Ausschalten des Geräts) der Ausgang schließlich überhaupt nicht eingeschaltet wird.
Ich habe mehrere PIC18F2550-Chips mit derselben Software ausprobiert und den gleichen Effekt erzielt, es liegt also nicht am PIC-Prozessor.
Ich denke, dass dies ein Hardwareproblem sein muss, da die Software von einem funktionierenden Beispiel kopiert wurde. Falls jemand denkt, dass es sich um ein Softwareproblem handelt, hier ist der MikroC-Code (obwohl ich nicht glaube, dass dies die richtige Stack Exchange-Site für Quellcode ist):
void main() {
TRISB = 0; //Make all PortB pins output
while(1)
{
PORTB = 0; //Turn off the port
Delay_ms(250);
PORTB = 255; //Turn on the port
Delay_ms(250);
}
}
Hier ein (sehr) grobes Schema der Schaltung. Ich habe das Oszilloskop an Pin 24 angeschlossen.
Hier sind die Teile, die ich verwende
Nach meiner Erfahrung führt das versehentliche Verlassen des _MCLR-Pins zu einem unberechenbaren Verhalten wie Ihrem. Stellen Sie sicher, dass es über einen Widerstand (47 kΩ oder so) mit +5 V verbunden ist, um zu verhindern, dass der PIC zufällig zurückgesetzt wird.
Normalerweise ist das Setzen von Breakpoints der beste Weg, aber das scheint ein Initialisierungs-/Setup-Problem zu sein.
Versuchen Sie, den Watchdog zu deaktivieren
WDTCON = 0;
Hast du deinen Oszillator eingerichtet? Wie wäre es, die meisten Register zu löschen? (TRISx, INTCON, TxCON, UCON usw.)
while(1){ [code] };
Connor Wolf