PIC18F2550 läuft und stoppt dann

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

Hier sind die Teile, die ich verwende

Kristallkristallkondensatoren
_

Sie benötigen Überbrückungskondensatoren über den Stromversorgungsanschlüssen. Als 0,1-uF-Kondensator zwischen den Pins 19 und 20, so nah wie möglich am IC.

Antworten (2)

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.

@Matt Das Datenblatt gibt an, dass der _MCLR-Pin an eine Spannung (+5 V hier) angeschlossen ist (sie sind schließlich programmierbar) und nicht über die Systemspannung ansteigen darf. Wenn dies der Fall ist, wechselt es in den Programmiermodus. Schließen Sie also für alle Mikros (und viele ICs im Allgemeinen) alle Versorgungs- und Erdungsstifte an, und alles, was schwebend bleibt, sollte einen guten Grund haben, schwebend zu sein, andernfalls ziehen Sie sie mit einem Widerstand nach unten oder oben (ich bevorzuge Widerstände, weil Sie sie überschreiben können). sie während des Debuggens, ohne Spuren zu brechen).
Ja, das habe ich schon mal gelesen, aber bis jetzt bin ich davongekommen, ohne es zu tun (ich schätze, mein Glück ist aufgebraucht). Ich werde sicher sein, dass ich in Zukunft keine Pins schweben lassen werde. Danke für den Tipp.

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.)

Ich habe die Oszillatoren konfiguriert und das richtige TRIS-Register eingerichtet - die Beispiele, die ich gesehen habe, sehen so aus, als müsste ich nur das TRISB-Register konfigurieren.
Benutzt du eine forever while-Schleife?while(1){ [code] };
Ja, ich werde den Code zu meinem Beitrag hinzufügen, obwohl ich nicht glaube, dass dies ein Softwareproblem ist.
Zu Ihrer Information, ich habe versucht, den Watchdog zu deaktivieren, aber es hat nicht geholfen. Irgendwelche anderen Ideen?
Ich würde einige Haltepunkte setzen und Ihre Statusbits nach dem Start und dann nach dem Flatlining betrachten. Das könnte das Problem isolieren. Zeigt eine Simulation das gleiche Verhalten? (Es ist ein bisschen unwahrscheinlich, aber wenn es das tut, dann ist es ein Konfigurationsproblem)
Haben Sie ADCON so eingerichtet, dass Port B Pin Digital I/O ist? Haben Sie einen anderen Chip, um zu überprüfen, ob es sich um ein Softwareproblem handelt?
Ich habe das ADCON-Register so eingestellt, dass Port b digital wird. Laut Datenblatt ist dies jedoch nicht erforderlich, da die Ausgangsports auch dann weiterarbeiten, wenn sie für analoge Eingänge konfiguriert sind. Leider ist der von mir verwendete Programmierer nicht zum Debuggen eingerichtet. Ich benötige einen PIC-Kit-Programmierer oder ein Kabel für meinen Programmierer, das eine Schaltungsprogrammierung ermöglicht.
Können Sie uns ALLE Konfigurationsinformationen, einen Schaltplan und einige Daten darüber geben, wie Sie mit Strom versorgt und umgangen werden? Sie erhalten eine bessere und schnellere Antwort. Eine Teilenummer für Ihren Kristall kann auch hilfreich sein, um festzustellen, ob 18 Züge die richtige Zahl sind
@ScottSeidman Gute Idee - ich werde jetzt einen Schaltplan zusammenstellen