#define 2 Ports auf ein define

Gast #2609964
Lesenswert?

Hallo Community,

ich hab eine Frage, über die ihr euch wahrscheinlich kaputt lacht.

Ich habe ein Controllerboard gebaut. Dazu habe ich mir eine eigene 
Header Datei geschrieben.

In der ersten Variante liegen alle LEDs an PORTD. Das define dazu ist 
einfach:

#define LED_PORT PORTD

Nun möchte ich aber 4 LED an PORTB 0..3 und 4 LED an PORTD 0..3 und 
möchte trotzdem alle über LED_PORT ansprechen. Also sozusagen einen 
"virtuellen" LED_PORT erzeugen um den Code übersichtlicher zu machen. 
Wie definiert man das?

Ich habe

# define LED_PORT PORTD | PORTB

probiert, was im Nachhinein schon völliger Schwachsinn war.

Mir fällt da nichts zu ein ?!

Dank euch
#2609994
Lesenswert?

Mach Makros, mit denen du die LEDn einzeln bedienen kannst:
1
#define LED0_PORT PORTD
2
#define LED0_DDR  DDRD
3
#define LED0_PIN  PIND
4
#define LED0_PPIN PIN7
5

6
#define LED1_PORT PORTB
7
#define LED1_DDR  DDRB
8
#define LED1_PIN  PINB
9
#define LED1_PPIN PIN3
10

11
//folgende defines sind bereits "unabhängig"
12
//von den obigen definitionen
13
#define LED0_INIT()   LED0_DDR|=(1<<LED0_PPIN)
14
#define LED0_ON()     LED0_PORT&=~(1<<LED0_PPIN)
15
#define LED0_OFF()    LED0_PORT|=(1<<LED0_PPIN)
16
#define LED0_TOGGLE() LED0_PIN|=(1<<LED0_PPIN)
17

18
#define LED1_INIT()   LED1_DDR|=(1<<LED1_PPIN)
19
#define LED1_ON()     LED1_PORT&=~(1<<LED1_PPIN)
20
#define LED1_OFF()    LED1_PORT|=(1<<LED1_PPIN)
21
#define LED1_TOGGLE() LED1_PIN|=(1<<LED1_PPIN)
22
//...usw...
23

24
//im initcode dann
25
LED0_INIT();
26
LED1_INIT();
27

28
//irgendwo sonst...
29
LED1_ON();
30
LED0_ON();
31

32
//woanders...
33
LED1_TOGGLE();
34
LED0_OFF();

Die Toggler funktionieren so wie gezeigt natürlich nur auf neueren AVRs, 
wo man mit beschreiben des PIN-Registers(!!) die entsprechenden Bits des 
PORT-Registers toggeln kann.

Wenns ein älterer AVR ist(mega8, mega16, ...), dann fürs toggeln:
1
#define LED1_TOGGLE() LED1_PORT^=(1<<LED1_PPIN)
2
#define LED1_TOGGLE() LED1_PORT^=(1<<LED1_PPIN)
Im weiteren Code ändert sich nix.
Weiterer Vorteil: Änderst du die Pinbelegung, musst du nur die 
entsprechenden "#define ..." anpassen.
mfg mf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren