Forum: Mikrocontroller und Digitale Elektronik Define invertiert?


von Manuel (Gast)


Lesenswert?

Hallo!

Kann man irgendwie ein define-Makro invertieren?
Momentan sieht es bei mir so aus:
1
TRISBbits.TRISB2 = 0;                 // PortB Pin2
2
#define PIN_LED_Y   LATBbits.LATB2

Da die LED allerdings "Active_Low" angeschlossen ist hätte ich gerne in 
dem Makro eine invertierung drin.

Habe folgendes ausprobiert, was jedoch nicht funktioniert:
1
#define PIN_LED_Y   (~LATBbits.LATB2)

Ist das irgendwie anders möglich?

Grüße,
  Manuel

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Manuel schrieb:
> Momentan sieht es bei mir so aus:
Welcher Compiler?

von (prx) A. K. (prx)


Lesenswert?

Manuel schrieb:

> Ist das irgendwie anders möglich?

In ein Header-File deiner Wahl reinschreiben:
  #define LED_Y_Ein   LATBbits.LATB2 = 0
  #define LED_Y_Aus   LATBbits.LATB2 = 1
und ebendiese Makros im Quellcode verwenden:
  LED_Y_Ein;

Wenn man sowas konsequent durchzieht, auch bei anderen Pins, dann hat 
man genau eine zentrale Stelle, die bei Pegel/Pinänderungen angepasst 
werden muss. Und muss nicht den ganzen Quellcode durchforsten.

von Peter D. (peda)


Lesenswert?

Manuel schrieb:
> #define PIN_LED_Y   LATBbits.LATB2
1
#define PIN_LED_Y   LATBbits.LATB2
2
#define LED_ON      0
3
#define LED_OFF     !LED_ON
4
5
  PIN_LED_Y = LED_ON;
6
  PIN_LED_Y = LED_OFF;

Peter

von Mark B. (markbrandis)


Lesenswert?

Würde es nicht auch so gehen?

1
#define PIN_LED_Y   (!(LATBbits.LATB2))

von Loonix (Gast)


Lesenswert?

Lothar Miller schrieb:
>> Momentan sieht es bei mir so aus:
> Welcher Compiler?

Kann man nur raten, ich würde sagen Microchip Compiler für PIC18 oder 
PIC24/dsPIC.

Manuel schrieb:
> Ist das irgendwie anders möglich?

So z.B.:
1
#define PIN_LED_Y (!LATBbits.LATB2)

von Loonix (Gast)


Lesenswert?

Mark Brandis schrieb:
> Würde es nicht auch so gehen?
>
> #define PIN_LED_Y   (!(LATBbits.LATB2))

Unsere Beiträge haben sich überschnitten (ich tippe anscheinend sehr 
langsam...). Geht aber auf jeden Fall solange man nur Abfragen und keine 
Zuweisungen (bei Eingängen eh unsinnig) vornehmen möchte.

von (prx) A. K. (prx)


Lesenswert?

Mark Brandis schrieb:

> Würde es nicht auch so gehen?
1
#define PIN_LED_Y   (!(LATBbits.LATB2))

Womit sich
  PIN_LED_Y = 0;
darin übersetzt:
  (!(LATBbits.LATB2)) = 0;
was natürlich Unfug ist.

von Loonix (Gast)


Lesenswert?

Loonix schrieb:
> (bei Eingängen eh unsinnig)

Sorry, LATx sind natürlich die Ausgangs-Latches. Die Lösung von Peter 
ist letztlich die vernünftigste, die sich auch leicht nachvollziehen 
lässt.

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.