-
Port einlesen
Hallo,
Ich möchte über einen Interrupt alle 10ms den Zustand von PINB einlesen und in die Variable "EingangB" schreiben. Anschließend möchte ich die verschiedenen Bits in "EingangB" (die jeweils 1 Pin wiederspiegeln) verarbeiten.
Ist das möglich? Bin Anfänger und möchte einiges ausprobieren. Leider komme ich mit dem Tutorial hier nicht weiter.
unsigned char EingangB;
....
....
EingangB = PINB;
....
if EingangB = 0x02
{
....
....
Vielen Dank im Voraus für jeden kleinen Tipp.
-
Klar doch ist das möglich. Ist dir bereits klar wie man Interruptsverarbeitet ?
Ansonsten würde ich dir vorschlagen das ganze erst enmal in einer endlosschleife ausliest.
Aussehen würde die abfrage dann in etwa so
Code:
uint8_t foo = PINB
if ( foo & ( ( 1 << MEINBIT0 ) | ( 1 << MEINBIT2 ) ) )
{
Mach was
}
MEINBIT steht halt jeweils für das entsprechende Bit in dem Register
Dürfte ich noch erfahren welches Tutorial du verwendest ?
-
Ich würde es gleich so machen:
Code:
if(PINB & (1 << PB0))
{...}
if(PINB & (1 << PB1))
{...}
if(PINB & (1 << PB2))
{...}
...
So brauchst du die Variable nicht.
-
Danke für den Tipp, aber so hab ich es auch schon gemacht. Mit der zusätzlichen Variablen möchte ich erreichen das ich den Port nur alle 10ms aktualisiere um z.B. Tastenprellen auszuschließen. Weiterhin ist mein Plan mit der Variablen verschiedene Tasterzustände in Zukunft auszuwerten (kurz gedrückt, lang gedrückt, steigende-, fallende Flanke etc.)
Mit dem Interrupt habe ich das hin bekommen. Leider bekomme ich es nicht hin das er mir den PINB in die Variable EingangB schreibt bzw. weiß ich nicht wie ich entsprechende Bits auslesen könnte.
-
ganz einfach:
statt:
if(PINB & (1 << PB0))
{...}
schreibst du:
if(Variable & (1 << 0))
{...}
if(Variable & (1 << 1))
{...}
if(Variable & (1 << 2))
{...}
...
-
dass er PINB in deine Variable schreibt machst du eigentlich nicht mehr als:
uint8_t EingangB; so dass sie von überall im Programm eingesehn werden kann
und:
EingangB = PINB in deinem Interrupt
-
Hallo,
schaue derzeit durch verschiedene tutorials u.a. bzw. hauptsächlich Roboternetz.de & Microcontroller.net.
Leider bringt mich das sture Durchlesen nicht viel weiter. Darum bin ich dabei Schritt für Schritt kleine Codes zu programmieren und diese zu erweitern. Dies fing an mit ansteuern von Ausgängen, einlesen von Pins erzeugen von Interruppts,....
Je nachdem was ich gerade mache versuche ich natürlich die Info aus dem Tutorial zu ziehen. Am besten wären hier immer einge Beispielprogramme.
-
Was funktioniert denn jetzt immernoch nicht? Was möchtest du noch wissen?
-
Hi
Schau dir mal hier http://www.mikrocontroller.net/artic...torial#Vorwort das mit dem Thema Bitfelder an vielleicht hilft es dir.
by Donald