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:
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?
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:
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(;;)
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*/
Ich habe keine Mikrochip-Controller unter MikroC verwendet, aber sind Sie sicher, dass es TRISA
and PORTA
anstelle von TRISO
and ist GPIO
?
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 CONFIG
Registers entweder auf 101
oder 100
für INTOSC setzen
Zusätzlich zu dem, was Lancovici sagte:
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
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 INTRC
auf Seite 95 des Datenblatts angegeben .
Versuchen Sie, die Einstellung auf diese zu ändern, und prüfen Sie, ob sie wie erwartet funktioniert.
TRISA
und PORTA
befinden sich laut Datenblatt in verschiedenen Banken , daher müssen Sie das STATUS
Register vor jedem Zugriff richtig einstellen.
Aus „ABBILDUNG 3-2: DATENSPEICHERABBILDUNG DES PIC16F627 UND PIC16F628“ PORTA
befindet sich in Bank 0 , während TRISA
er sich in Bank 1 befindet .
bitsmack
zakkos