Lesen Status von Eingangs-pins auf einem PIC18
War ich in der Lage zu bekommen, Ausgänge arbeiten auf meinem PIC zu machen und kann eine Reihe von LEDs, Tanz-und ausschalten wie ich auch mit den verschiedenen output-Riegel high/low. Aber, ich habe eine Menge o Schwierigkeiten beim Lesen in den Zustand einer pin.
Siehe code unten. Ich meine config ein, und definieren Sie die TRISC als Eingang und als Ausgang TRISB. In einer Endlosschleife, ich überprüfen, um zu sehen, ob RC6 hoch oder niedrig ist, und legen Sie die gesamte B-latch auf high oder low, je nach dem Ergebnis.
#include <htc.h>
__CONFIG(1, FOSC_IRC & FCMEN_OFF & IESO_OFF);
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF);
__CONFIG(3, MCLRE_OFF);
__CONFIG(4, STVREN_ON & LVP_OFF & DEBUG_OFF);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);
void main(void)
{
TRISC = 0xFF; //input
TRISB = 0x00; //output
while (1)
{
if (PORTCbits.RC6 == 0)
LATB = 0b00000000;
else
LATB = 0b11111111;
}
return;
}
Den code kompiliert einwandfrei mit keine Warnungen oder Fehler. Wenn mein code-Logik ist einfach die Einstellung die Riegel hoch und niedrig, das funktioniert auch, aber ich habe nicht in der Lage, erfolgreich Lesen des Status einer pin.
Irgendwelche Ideen?
Ich bin mit einem PIC18F14K50 und MPLAB v8.43 und die HiTech-ANSI-C-Compiler.
Meine verbindungen sind +5V an VDD (pin 1), VSS (pin 20) zu Boden. Ich habe +5V C6 (pin 8), und einem 100K-Widerstand und die LED vom B7 (pin 10) zu Boden. Zum Umschalten RC6, Verbinde ich/disconncet den Draht zu C6.
┌────────┐
+5v -│ 01 20 │- gnd
-│ 02 19 │-
-│ 03 18 │-
-│ 04 17 │-
-│ 05 16 │-
-│ 06 15 │-
-│ 07 14 │-
+5v -│ 08 13 │-
-│ 09 12 │-
led -│ 10 11 │-
└────────┘
InformationsquelleAutor Ozzah | 2012-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die ADC-pins auf den PICs leider sind konfiguriert als analoge Eingänge beim einschalten. Sie müssen deaktivieren Sie die ADC-Funktionalität auf, die pin als digitalen Eingang.
Clearing-bit 0 von ANSELH wird festgelegt RC6 auf den digitalen Eingang. Dann ist dein code funktioniert.
Dies ist dokumentiert im Datenblatt im Abschnitt 9.4 : Anschluss Analoge Steuerung
PIC18F/LF1XK50 Datenblatt
ANSEL = 0; ANSELH = 0;
zu Beginn meinermain()
Methode?Oder muss ich etwas tun, mit ADCON1 ?
Ja, die Einstellung, die ANSEL und ANSELH gleich 0 wird klar, alle analog-Funktionalität.
Getestet habe ich dies gestern Nachmittag und es hat wunderbar funktioniert. Mein PIC-code ist schließlich arbeiten. Ich danke Ihnen sehr 🙂
InformationsquelleAutor Adam Casey
Einstellung...
...sollte nur pin RC0 von PORTC als input-pin alle anderen pins sind definiert als Ausgang.
So
PORTCbits.RC6 == 0
sollte nicht wieder korrekte input-Status in RC6 pin.TRISC = 255
sollten alle pins von PORTC als Eingang.InformationsquelleAutor GJ.
Es ist erwähnenswert, dass einige andere PIC18 Varianten sind unterschiedlich eingerichtet:
Auf PIC18F4520 und PIC18F4680 Sie müssen zum konfigurieren der pins als digitale durch eine ADCON1 register statt ANSELH.
Einstellung ein bit auf 1 wird eine pin digital.
Neben dieser, müssen Sie Sie input-pins, indem ein bit auf 1 in den entsprechenden TRIS-register.
InformationsquelleAutor cab00t