PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eingänge einlesen (AND)



sky2
04.06.2009, 18:40
Hallo miteinander,

Hab gestern ein kleines Programm geschrieben, leider will das Ganze nicht funktionieren ( wer hätte das gedacht :-))

Ich programmiere in C und der Controller ist ein PIC16F690 (vom PICKIT2)

Das Programm ist glaub ich ziemlich selbsterklärend:


#include <pic.h>
void main(void)
{
TRISC = 0b00000000;
TRISA = 0b11111111;

for( ;; )
{
if
(
PORTA == 3)
{
PORTC = 1;
}
else
{
PORTC = 2;
}
} // for( ;; )
}


Nun die zweite Led an PORTC leuchtet immer. Es scheint als ob die Eingänge nicht richtig eingelesen werden.

Kann es daran liegen, dass man den Port von AD zu I/O umschalten muss.
ADCON0= 00000000 so irgendwas?

Die Schalter schalten die Eingänge immer zwischen Vdd und Vss.

Bin um jeden Rat dankbar

p_mork
04.06.2009, 20:39
Hallo sky2,

ich kenn mich mit PICs nicht aus, aber von AVRs her kenn ich das so, dass das PORTX-Register nur für die Ausgabe zuständig ist und es für das Abfragen von Zuständen ein anderes Register gebt (PINX bei AVRs). Vielleicht ist ja bei PICs ähnlich.

MfG Mark

PICVB
05.06.2009, 10:32
Ich hab mir das Datenblatt jetzt nicht angeschaut, aber ja du musst die Analogeingänge auf Digital umschalten.

sky2
05.06.2009, 18:27
Muss ich alle Eingänge einzeln umschalten?:
ADCON0 = 00000000
ADCON0 = 00000100
ADCON0 = 00001100

Hab schon etwas rumprobiert und im Datenblatt gelesen und und und...
Ach ja, ich hab die HI-TECH-Software mit MPLAB.

PicNick
05.06.2009, 18:43
if (PORTA == 3)

klappt nur, wenn wirklich genau 0b00000011 an dem Port anliegt.

Ist das auch so gemeint ?

sky2
05.06.2009, 19:17
Ja, die LED soll nur leuchten wenn an den Eingängen RAO und RA1 ein HIGH und an den anderen ein LOW ist.

Mier ist aber gerade aufgefallen, dass RA3 das Reset ist und dies NICHT auf LOW darf!

Werde die Eingänge mal auf den PORTB wechseln.

Beim umschalten des PORTs brauch ich aber trotzdem noch etwas Hilfe :oops: