Forum: Mikrocontroller und Digitale Elektronik Arduino Anfängerfrage 5 Inputs am Arduino gleichzeitig einlesen


von Ingo K. (norticum)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich programmiere schon seit geraumer Zeit NXP ehemals Freescale 
Microcontroller in Assembler und will jetzt C lernen indem ich mit 
Arduino beginne. Eine Art sanfte Migration sozusagen ;-)

Aktuell habe ich ein Projekt ins Auge gefasst in dem ich die vier 
Dateneingänge eines HEF4511D inkl. Latch enable Leitung abgreifen will 
um diese dann z.B. auf ein Display als Text auszugeben.

Nur wie lese ich 5 Datenleitungen gleichzeitig in Arduino ein?

Hat jemand evtl. einen Codeschnipsel für mich und würde mir bitte 
helfen?

Grüße

von Chris K. (Gast)


Lesenswert?


von Reiner_Gast (Gast)


Lesenswert?

Ingo K. schrieb:
> Nur wie lese ich 5 Datenleitungen gleichzeitig in Arduino ein?

Die "Nummern" beim Arduino sind lediglich eine Durchnummerierung der 
einzelnen Portbits von Portregistern des ATMega328

Ein Port besteht immer auf 8 Bits... Und die können mit einer einzigen 
Leseoperation eingelesen werden, allerdings nicht mit digitalRead von 
der Arduino IDE

Schau mal hier rein: 
https://www.arduino.cc/en/Reference/PortManipulation

Da wird der Zusammenhang zwischen der Arduino Nummerierung in den 
tatsächlichen Portbezeichnungen des ATMega beschrieben

von Dominik R. (vision)


Lesenswert?

Was meinst du mit gleichzeitig? Hängen alle Datenleitungen am gleichen 
Port und du willst den Zustand von allen Leitungen in selben Systemtakt 
wissen? Dann lies den kompletten Port aus. Keine Ahnung, ob das mit 
Arduino geht, aber wenn auf deinem Board ein Atmega ist, kannst du das 
so machen:
1
uint8_t datapins = PINB; //kompletter Port B eingelesen

: Bearbeitet durch User
von Einer K. (Gast)


Lesenswert?

Dominik R. schrieb:
> Keine Ahnung, ob das mit
> Arduino geht, aber wenn auf deinem Board ein Atmega ist, kannst du das
> so machen:
> uint8_t datapins = PINB; //kompletter Port B eingelesen

Natürlich geht das mit Arduino genau so.

von Ingo K. (norticum)


Lesenswert?

Ja, alle vier Datenleitungen hängen am gleichen Port. Diesen will ich 
dann auslesen wenn Latch enable gesetzt wird also per Interrupt.

Outputs gleichzeitig setzen geht ja mit der Bitmanipulation beim Arduino 
aber gleichzeitig lesen? In dem Punkt liegt das Problem.

Grüße,

von Dominik R. (vision)


Lesenswert?

Ich meinte, ob es einen Arduino-Befehl (sowas wie digitalRead) gibt, um 
einen kompletten Port einzulesen.

von Einer K. (Gast)


Lesenswert?

Dominik R. schrieb:
> Ich meinte, ob es einen Arduino-Befehl (sowas wie digitalRead)
> gibt, um
> einen kompletten Port einzulesen.

Wurde dir schon gezeigt:

uint8_t data = PINB; //kompletter Port B eingelesen

Übersehen?

von Dominik R. (vision)


Lesenswert?

Wenn die Leitungen am selben Port hängen, hast du ja kein Problem.

Dominik R. schrieb:
> uint8_t datapins = PINB; //kompletter Port B eingelesen

Dann hast du das Abbild der Zustände des kompletten Ports in der 
Variable 'datapins' und kannst z.B. mit der For-Schleife jedes einzelne 
Bit prüfen:
1
for(int i = 0; i < 8; i++){
2
  if(PINB & (1 << i))
3
    //Pin high
4
  else
5
    //Pin low
6
}

von Theor (Gast)


Lesenswert?


von Ingo K. (norticum)


Lesenswert?

Danke für den Input!

Ich versuche mal etwas zu programmieren und melde mich dann wieder.
Ich bin gerade dabei diverse Seiten durchzuarbeiten damit da was 
passendes dabei raus kommt.

Grüße

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.