Forum: Mikrocontroller und Digitale Elektronik Input Abfrage


von Alex X. (behindi)


Lesenswert?

Hallo

ich hab da nen Problem bei einem Programm,
wäre super wenn mir dabei jemand helfen könnte.

Ich verwende den MPLAP C18 kompiler und den PIC18F26K20

Bei PORTB sollen die unteren 4 bit Eingänge sein und die oberen 
Ausgänge, welche auf High geschalten werden.
Das Problem liegt daran dass ich die unternen 4bits (Input) abfragen 
möchte ob irgentwo High anliegt aber die Prüfung mit der if Anweisung 
funktioniert nicht da der µC sie als immer erfüllt sieht trotz dass an 
allen Eingängen Low ist.

Die Eingänge sind mit Pulldown Widerständen auf Masse geschlten.

Die Platine, µC funktioniernen und die Oberen 4 bits gehen auch auf High 
nur




das Programm Lautet

1
C-Code
1
void PORT_Init(void);
2
3
void main (void)
4
{
5
PORT_Init();
6
7
  while (1)
8
  {
9
    if(PORTB!=0xf0)       
10
    {
11
    LATA=0x1;
12
    }
13
    Delay1KTCYx(50);
14
  }            
15
16
while(1);
17
}
18
19
20
void PORT_Init(void)
21
{  
22
  LATA=0x00;
23
  TRISA=0x00;
24
  LATA=0x00;
25
  
26
  LATB=0x00;
27
  TRISB=0x0f;
28
  LATB=0xf0;
29
}



Hätte jemand nen Vorschlag wie ich das prüfen bzw. abfragen soll,

danke für jede Hilfe

mgf
alex

von Al3ko -. (al3ko)


Lesenswert?

Wenn du eine UND Operation auf deinen Port anwendest, invertierst du 
alle anderen Pins bis auf das, das du abfragen willst. Konkret meine ich 
etwas wie:
1
if ( PINA & ( 1 << MEINBIT0 ) ) {
2
  // Bla;
3
}

Ich kenne mich in PIC nicht aus, aber geht sowas hier nicht in die 
richtige Richtung?

von troll (Gast)


Lesenswert?

alex le. schrieb:
> > Das Problem liegt daran dass ich die unternen 4bits (Input) abfragen
> möchte ob irgentwo High anliegt aber die Prüfung mit der if Anweisung
> funktioniert nicht da der µC sie als immer erfüllt sieht trotz dass an
> allen Eingängen Low ist.
Suchst du vielleicht Bitmaskierung?

if(PORTB&0x0f)
...

Bitmanipulation speziell 
http://www.mikrocontroller.net/articles/Bitmanipulation#Bits_pr.C3.BCfen

von Al3ko -. (al3ko)


Lesenswert?

Verwendet man zur Pinabfrage nicht PINB anstelle von PORTB? Wenn der Pin 
als Eingang definiert ist, gibt PORTB doch lediglich über die Pull-Up 
Widerstände Informationen. Ob am Pin nun tatsächlich ein high oder low 
ist, wird doch über PINB in Erfahrung gebracht, oder täusche ich mich 
da?


Gruß

von troll (Gast)


Lesenswert?

Alex A. schrieb:
> Verwendet man zur Pinabfrage nicht PINB anstelle von PORTB?
Beim AVR ja. Der TO verwendet aber einen PIC.

von Al3ko -. (al3ko)


Lesenswert?

troll schrieb:
> Alex A. schrieb:
>> Verwendet man zur Pinabfrage nicht PINB anstelle von PORTB?
> Beim AVR ja. Der TO verwendet aber einen PIC.

Ah okay, gut zu wissen.


Danke

von Alex X. (behindi)


Lesenswert?

Danke für die Hilfe, ich kenne Maskierung aber ich brauch das nicht da 
ich ja nur wissen will ob bei den Eingängen irgentwas sich verändert, 
ganz egal was.

ich will nur wissen ob PORTB nicht mehr 0xf0 ist, z.B: wenn ich irgent 
eine Eingang auf high lege

Eigentlich sollte es ja mit der

if(PORTB!=0xf0) gehen aber er sieht diese Bedingug immer als wahr obwohl 
alle Eingänge Low sind.

Das muss man andes machen glaub ich weil die PORT anfrage funktioniert 
ja nur wenn sie auf input sind oder?

danke für jede Hlfe

mgf

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.