Forum: Mikrocontroller und Digitale Elektronik Direkter Portzugriff beim Arduino


von Nuggi (Gast)


Lesenswert?

Wie ich statt serialRead/serialWrite direkt auf die Ports zugreifen 
kann, weiß ich. Nur mit einem weiß ich nicht weiter. Die Portnummern für 
den Zugriff via serialRead/serialWrite hatte ich in Variablen 
gespeichert. Das geht beim Direktzugriff wohl nicht, weil *Portname und 
Bit* gespeichert werden muss. Oder hat jemand eine Idee, auf welche 
Weise die Info kompakt gespeichert werden kann?

von Karl M. (Gast)


Lesenswert?

Warum sollte man etwas speichern?

Ich lege per Define einen Name für das Pin eines Ports fest und greife 
dann darauf zu!

Quelle: Peter Dannegger
1
struct bits {
2
  u8 b0:1;
3
  u8 b1:1;
4
  u8 b2:1;
5
  u8 b3:1;
6
  u8 b4:1;
7
  u8 b5:1;
8
  u8 b6:1;
9
  u8 b7:1;
10
} __attribute__((__packed__));
11
12
#define SBIT(port,pin) ((*(volatile struct bits*)&port).b##pin)
1
#define LED_PIN SBIT(portb,0)
2
#define LED_DDR SBIT(ddrb,0)
3
4
LED_DDR = 1; // output
5
LED_PIN = 1; // on
6
LED_PIN = 0; // off

von Nuggi (Gast)


Lesenswert?

Danke aber das hilft mir nicht weiter. Vielleicht habe ich das Problem 
nicht gut beschrieben. Ist es möglich, einen Port dynamisch zu 
adressieren? Also wenn der Pin (Port und Bit) erst zur Laufzeit 
feststehen?

von Dominostein (Gast)


Lesenswert?

Natürlich geht das, wenn man mal in das Datenblatt oder wenigstens in 
die Header-Dateien schauen würde. Denn auch hinter einem PORT Makro 
steht letzlich nur eine Zahl.

von Einer K. (Gast)


Lesenswert?

Nuggi schrieb:
> Ist es möglich, einen Port dynamisch zu
> adressieren? Also wenn der Pin (Port und Bit) erst zur Laufzeit
> feststehen?

digitalWrite() kann das.
Also sollte deine deine zukünftige Funktion das auch sollen können.
(wenn du das kannst)

von Nuggi (Gast)


Lesenswert?

A ja.

Bit+Port sind const PROGMEM Strukturen.

Das hätte ich auch selbst hingekriegt, danke.

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.