Warum kann ich Digital IO von PIC16F628 nicht einstellen

Ich möchte Ihnen dafür danken, dass Sie diese Frage gelesen haben. Denken Sie daran, dass es vielleicht albern erscheint, aber es beunruhigt mich seit ein paar Stunden.

Ich verwende einen PIC16F628. Alles, was ich jetzt versuche, ist, eine einfache LED einzuschalten. Ich habe den folgenden Code mit MikroC erstellt:

void main()
{
  TRISA=0x00;
  PORTA=0xFF;
}

Habe mit Proteus folgende Schaltung simuliert:Proteus-Schema

Mir ist bewusst, dass nur 4 LEDs leuchten würden.

Ein hat den Code auf den PIC hochgeladen und ihn mit PICkit2 (Software und Programmierer) verifiziert.

Ich habe gelesen, dass der Programmierstift (RB4/PGM) auf niedrig eingestellt werden sollte, was ich auch getan habe.

Der PIC ist auf der Testplatine verdrahtet und schaltet keine LED ein. Keiner der Pins (RA0, RA1, RA2, RA3) liefert genügend Spannung (sie geben etwa 0,3 V).

1) Ich versorge die Schaltung mit 5V.

2) Ich verwende die richtigen Stifte.

3) Ich habe es ein paar Mal umprogrammiert, kein Erfolg.

4) MCLR ist über einen Widerstand mit Vdd verbunden.

5) PGM-Pin ist mit GND (Vss) verbunden

6) LED sind richtig angeschlossen (sogar versucht, sie zu drehen, falls ich mich geirrt habe).

7) Ich habe die Verkabelung getestet, sie ist nicht unterbrochen.

Es funktioniert nicht, und ich weiß nicht, was ich tun soll. Kann mir bitte jemand erklären, was ich falsch gemacht habe?

Wenn Sie keine Vorwiderstände für die LEDs verwenden, haben Sie möglicherweise die Ausgangspins gebraten, als Sie zum ersten Mal versucht haben, sie einzuschalten. Es dauert nicht lange!
Ich kenne Mikroc nicht und ohne all Ihren Code ist es schwer zu sagen, aber ... Haben Sie die Konfigurationsbits entsprechend Ihrer Hardware oder überhaupt eingestellt?

Antworten (4)

Es ist schwer zu sagen, was los ist, ohne uns Ihren gesamten Code und ein Schema Ihrer physischen Implementierung zu zeigen.

Dies ist jedoch, was Sie sich ansehen können:

  1. Sie sollten am Ende Ihres Codes eine Endlosschleife hinzufügen. Ihr Mikrocontroller schaltet sich möglicherweise nach einem Lauf ab. Fügen Sie am Ende ein while(1)oder hinzufor(;;)

  2. Versuchen Sie, den folgenden Code zu Ihrer Initialisierung hinzuzufügen (oder welches Format auch immer Ihr Mikrocontroller-Header diese Register definiert)

ANSEL = 0; /* Configure analog pins as digital*/

CMCON = 7; /* Disable comparators*/

  1. Ich habe keine Mikrochip-Controller unter MikroC verwendet, aber sind Sie sicher, dass es TRISAand PORTAanstelle von TRISOand ist GPIO?

  2. Stellen Sie sicher, dass Sie den internen Oszillator (INTOSC) richtig konfiguriert haben. Sie können es konfigurieren, indem Sie die Bits 0-2 (FOSC2:FOSC0) des CONFIGRegisters entweder auf 101oder 100für INTOSC setzen

Ich habe eine While-Schleife hinzugefügt, Komparatoren deaktiviert, aber ANSEL oder ANSELH existieren für diesen bestimmten PIC nicht. Für MikroC ist der richtige Befehl TRISA und PORTA , habe es mit TRIS0 und GIP0 versucht und versteht die Befehle nicht. PIC geändert, falls es beschädigt war und immer noch kein Ergebnis.
Deaktivieren Sie den Watchdog
Watchdog Timer (WDT) bereits deaktiviert . Der Hochgeschwindigkeitsoszillator (HS) ist aktiviert und die Niederspannungsprogrammierung (LVP) ist deaktiviert.
Ich habe 100-Ohm-Widerstände für LEDs und 10K-Ohm-Widerstände für MCLR. Ich drücke es ist ok.
Wir können die LED-Bedenken überspringen, indem wir den Saum vollständig entfernen und nur den Spannungsausgang dieser Kanäle prüfen.
Interessante Entwicklung, ich habe versehentlich die Pins 15 und 16 für einen kurzen Moment (etwa eine Sekunde) berührt (RA7/OSC1/CLKIN und RA6/OSC2/CLKOUT) und die LEDs leuchten jetzt. Könnte mir das jemand erklären?
hört sich so an, als wäre der interne Oszillator nicht ausgewählt ...
@ morty1993 HS (High Speed ​​Oscillator) ist nicht der interne Oszillator. Hast du einen externen Quarzoszillator aufgebaut? Wenn nicht, müssen Sie den INTRC-Modus konfigurieren, nicht den HS-Modus.

Zusätzlich zu dem, was Lancovici sagte:

  • Haben deine LEDs Vorwiderstände?
  • Welchen Konfigurationswortwert verwenden Sie?

Ein erster Schritt könnte sein, dass Sie Ihr Hardware-Setup mit einer funktionierenden .hex-Datei überprüfen. Es gibt ein paar (darunter zwei (mit und ohne Kristall) für den 628) auf meiner uralten Blink-Seite: http://www.voti.nl/blink

Leider habe ich keinen Wisp628 Programmierer. Aber die Informationen könnten trotzdem hilfreich sein, danke.
Eine .hex-Datei ist 100 % programmiererunabhängig. Sie können einen beliebigen Programmierer verwenden, mit dem Sie eine .hex-Datei in Ihren PIC-Chip übertragen möchten.

Ihr Schaltplan zeigt jetzt Quarz oder eine andere Taktquelle. Dies lässt mich annehmen, dass Sie beabsichtigen, den internen Oszillator zu verwenden.

Basierend auf Ihrem Kommentar zu einer anderen Antwort sagen Sie jedoch , dass Sie die Konfigurationsbits auf den Verwendungsmodus eingestellt haben HS. HS steht für High-Speed ​​Crystal Oscillator/Resonator. Damit dieser Modus funktioniert, benötigen Sie einen 8-MHz- bis 20-MHz-Quarz oder -Resonator, der an die OSCIN/OSCOUT-Pins angeschlossen ist. Da Sie dies nicht in Ihrem Schaltplan haben (und daher nehme ich an, dass Sie dies nicht eingerichtet haben), haben Sie keine Taktquelle, auf der Ihr PIC laufen kann - und als solche scheint es überhaupt nichts zu tun.

Für den internen 4-MHz-Oszillator ist die richtige Option INTRCauf Seite 95 des Datenblatts angegeben .

Versuchen Sie, die Einstellung auf diese zu ändern, und prüfen Sie, ob sie wie erwartet funktioniert.

TRISAund PORTAbefinden sich laut Datenblatt in verschiedenen Banken , daher müssen Sie das STATUSRegister vor jedem Zugriff richtig einstellen.

Aus „ABBILDUNG 3-2: DATENSPEICHERABBILDUNG DES PIC16F627 UND PIC16F628“ PORTAbefindet sich in Bank 0 , während TRISAer sich in Bank 1 befindet .