Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitmuster auf verschiedene Ports aufteilen
Moin,
ich habe mal wieder Frage an euch:
Ich möchte ein "binäres Muster" aus einem Array auf Pins verschiedener Ports ausgeben. Vorstellen kann man sich das, als würde ich an jedem Pin eine LED hängen, die ich in dem gewünschten Muster leuchten lassen möchte.
Als Bsp sei:
muster[0] = 10101
Ausgänge liegen auf PB1,PB2,PB3,PC1,PC2,PC3
Die Belegung der Pins ließe sich nur mit größerem Aufwand ändern, wesshalb ich auf eine Softwarelösung hoffe.
Gruß
Christopher
-schumi-
26.10.2011, 18:17
PORTB = PORTB & 0b11110001; // PB1/2/3 ausschalten
PORTC = PORTC & 0b11110001; // PC1/2/3 ausschalten
if (muster[0] & 1) // Falls Bit 0 von muster[0] gesetzt ist...
PORTC = PORTC | 0b00001000; // ... PC3 einschalten
if (muster[0] & 2) // Falls Bit 1 von muster[0] gesetzt ist...
PORTC = PORTC | 0b00000100; // ... PC2 einschalten
if (muster[0] & 4) // usw. usf.
PORTC = PORTC | 0b00000010;
if (muster[0] & 8)
PORTB = PORTB | 0b00001000;
if (muster[0] & 16)
PORTB = PORTB | 0b00000100;
if (muster[0] & 32)
PORTB = PORTB | 0b00000010;
Zwar nicht allzu elegant, sollte aber funktionieren (habs jetzt nicht probekompiliert)
Gruß
[EDIT]
Das hier sollte auch funktionieren:
PORTB = PORTB & 0b11110001; // PB1/2/3 ausschalten
PORTC = PORTC & 0b11110001; // PC1/2/3 ausschalten
PORTC = PORTC | (0b00001000*(muster[0] & 1)) | (0b00000100*((muster[0] & 2)/2)) | (0b00000010*((muster[0] & 4)/4));
PORTB = PORTB | (0b00001000*((muster[0] & 8)/8)) | (0b00000100*((muster[0] & 16)/16)) | (0b00000010*((muster[0] & 32)/32));
Bin mir aber nicht ganz sicher, obs wirklich so hinhaut...
Vergesst aber nicht, dass die Port-Pins auch ev. auf Null gesetzt werden müssen.
a la
PORTC &= ~0b00001000
radbruch
27.10.2011, 11:19
Oder so vielleicht:
uint8_t muster=0b101010;
PORTB = PORTB & 0b11110001; // PB1/2/3 ausschalten
PORTC = PORTC & 0b11110001; // PC1/2/3 ausschalten
PORTC = PORTC | (muster & 0b111)<<1;
PORTB = PORTB | (muster & 0b111000)>>2;
Danke für die Tipps. Sobald ich Zeit und die betreffende Hardware wieder zur Verfügung habe werde ich die Vorschläge testen.
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.