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
Gast
#5283912
Du kennst diesen Link? https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
Gast
#5283916
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
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 | |
Gast
#5283939
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.
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,
Ich meinte, ob es einen Arduino-Befehl (sowas wie digitalRead) gibt, um einen kompletten Port einzulesen.
Gast
#5283949
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?
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Gast
#5283971
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.
