Forum: Mikrocontroller und Digitale Elektronik arduino: port byteweise lesen


von Markus C. (cano)


Lesenswert?

Hallo,

ich möchte gerne bei jedem loop()-Durchlauf 32 Portleitungen auf einmal 
einlesen.
Nun will ich nicht 32 Mal ...

val = digitalRead(inPin);

aufrufen. Ich dachte da eher an 4 Zugriffe a 8-Bit.
Nirgendwo in den Beispielen finde ich eine Funktion, mit der ich direkt 
auf einen 8 Bit Port zugreifen kann.
Gibt es das gar nicht? Oder bin ich nur zu doof zum Suchen?

Helft mir doch bitte mal auf die Sprünge :-)

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Hallo,

markus cano schrieb:

> Gibt es das gar nicht? Oder bin ich nur zu doof zum Suchen?

die zweite Option trifft zu.

Tipp für die nächste Suche: Alle AVR-GCC Operationen
funktionieren exakt 1:1 ohne irgendeine Änderung auch
im Arduino IDE.

Versuch es zum Beispiel mit google: avr gcc read port

Schon der erste Treffer passt.

Ansonsten bin ich mir fast sicher, dass es in jedem Datenblatt
zu den entsprechenden µC ein geeignetes Code-Beispiel gibt!

Vlg
 Timm

von Michael (Gast)


Lesenswert?

markus cano schrieb:
> Helft mir doch bitte mal auf die Sprünge :-)

Wenn du uns verrätst, was für einen Prozessor du benutzt?
Vergiß Arduino Einzelpinbefehle und greife direkt auf das gewünschte 
Port-Register zu.

von Markus C. (cano)


Lesenswert?

... ah ja, ... vielen  Dank :-)

avr gcc read port war der Schlüssel zum Erfolg:


example :
    // to read data from port A.
    DDRA = 0x00;    //Set port a as input
    x = PINA;       //Read contents of port a


@Michael: Ich verwende die Version Mega.

von Stefan (Gast)


Lesenswert?

Dieser Thread ist ein Paradebeispiel für die didaktische Untauglichkeit 
des Arduino Systems.

Nichts gegen die Hardware, aber die Software lenkt eher von den Basics 
ab, anstatt sie zu lehren.

Ich kann nur dringend empfehlen, nicht mit Arduino einzusteigen!

von Markus C. (cano)


Lesenswert?

Hallo  Stefan,

das kann ich so nicht stehen lassen.
Ich habe schon mit einigen Prozessoren herum experimentiert. Mit noch 
keinem anderen System ist mir der Einstieg leichter gefallen.
Sehr gutes Einsteigersystem !!! Klasse gemacht !!!

Grüße Markus

von Michael (Gast)


Lesenswert?

markus cano schrieb:
> Sehr gutes Einsteigersystem !!! Klasse gemacht !!!

Das Problem ist, dass das Arduino System die ganze Direktheit eines µC, 
hinter einer glatt polierten Oberfläche verbirgt. Sobald man den 
Arduino-Weg verläßt, steht man doof da und muss sich nicht nur in die 
Register des jeweiligen Controllers reinfummeln, sondern auch noch die 
ganze Arduino-Maskerade durchdringen.
Wenn auf einem 84MHz Prozessor (Arduino Due) das simple Setzen eines 
Pins etliche µs dauert, finde ich das arg übertrieben.

von Uwe (de0508)


Lesenswert?

Guten Tag,

markus cano schrieb:

> @Michael: Ich verwende die Version Mega.

Was ist damit gemeint ?
Ist das eine neue Bezeichnung für einen Atmel AVR µC ?

von meckerziege (Gast)


Lesenswert?

Stefan schrieb:
> Dieser Thread ist ein Paradebeispiel für die didaktische Untauglichkeit
> des Arduino Systems.
>
> Nichts gegen die Hardware, aber die Software lenkt eher von den Basics
> ab, anstatt sie zu lehren.
>
> Ich kann nur dringend empfehlen, nicht mit Arduino einzusteigen!

Volle Zustimmung!

Allein schon dieser geistige Dünnpfiff, dass man für das lesen eines IOs 
eine extra Funktion braucht, sagt doch schon alles. Da wird eine gut 
verständliche Zeile in C durch irgendeine merkwürdige Funktion ersetzt.


Ach? Eine Arduino Funktion gibt es nicht für das was wir machen wollen? 
Na dann sind wir wohl aufgeschmissen, wenn wir nichtmal nen Port auf 
einmal einlesen können... Mit nem zusätzlichen Shield kann man das 
Problem aber leider auch nicht lösen.

von Jannus (Gast)


Lesenswert?

Muss ich da eine bestimmte Headerdatei einbinden um die Befehle auch in 
der Arduino IDE nutzen zu können?

von doedel (Gast)


Lesenswert?

Stefan schrieb:
> Dieser Thread ist ein Paradebeispiel für die didaktische
> Untauglichkeit
> des Arduino Systems.
>
> Nichts gegen die Hardware, aber die Software lenkt eher von den Basics
> ab, anstatt sie zu lehren.
>
> Ich kann nur dringend empfehlen, nicht mit Arduino einzusteigen!

sarkasmusan
genau! Und das gleiche gilt für C und überhaupt alle 
Programmiersprachen. Wer es richtig lernen will, der nimmt 
ausschließlich Assembler!
sarkasmusaus

Arduino hat genauso seine Berechtigung wie alle anderen Sprachen / IDE's 
auch. Arduino pauschal zu disqualifizieren ist genauso falsch wie zu 
sagen, alles muss in Assembler geschrieben warden und jeder der es 
anders macht ist ein Weichei.

Genau die gleiche Frage hätte auch von einen gcc Einsteiger kommen 
können ... dann auch da muss man den Portzugriff erst mal lernen.

von Ulrich F. (Gast)


Lesenswert?

Jannus schrieb:
> Muss ich da eine bestimmte Headerdatei einbinden um die Befehle auch in
> der Arduino IDE nutzen zu können?
Nein, das macht Arduino schon für dich.

Warum probierst du das nicht eben selber aus?

von Jannus (Gast)


Lesenswert?

Ulrich F. schrieb:
> Warum probierst du das nicht eben selber aus?

Ich habe es ausprobiert aber bekomme folgende Fehlermedlung:

'DDRA' was not declared in this scope

von Jannus (Gast)


Lesenswert?

OK hab gerade herausgefunden das es an dem ausgewählten Board liegt. Die 
Registerbezeichnungen beim Arduino DUE sind andere.

von Ulrich F. (Gast)


Lesenswert?

Jannus schrieb:
> 'DDRA' was not declared in this scope
Wenn du für den Mega kompilieren willst, wähle auch das richtige Board 
aus.

von Stefan S. (sschultewolter)


Lesenswert?

Hast du überhaupt das gleiche Board wie der TE? Auf dem Mega2560 gibt es 
den PortA. Auf einem Mega328P nicht! -> Schau ins Datenblatt

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.