-         

Ergebnis 1 bis 5 von 5

Thema: Bitmuster auf verschiedene Ports aufteilen

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563

    Bitmuster auf verschiedene Ports aufteilen

    Anzeige

    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
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    23
    Beiträge
    449
    Code:
    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:
    Code:
    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...
    Geändert von -schumi- (26.10.2011 um 18:28 Uhr)

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Vergesst aber nicht, dass die Port-Pins auch ev. auf Null gesetzt werden müssen.
    a la
    PORTC &= ~0b00001000
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Oder so vielleicht:

    Code:
    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;

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Danke für die Tipps. Sobald ich Zeit und die betreffende Hardware wieder zur Verfügung habe werde ich die Vorschläge testen.
    Alles ist möglich. Unmögliches dauert nur etwas länger!

Ähnliche Themen

  1. Bitmuster für 5-Pin Stepper?
    Von Jacob2 im Forum Motoren
    Antworten: 8
    Letzter Beitrag: 28.04.2009, 11:07
  2. Code aufteilen
    Von elkokiller im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 17.08.2008, 19:21
  3. ATMEGA16 Bitmuster am Eingang mit Analogwert multiplizieren
    Von alze1970 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 17.05.2007, 16:05
  4. 16 Bit auf 2x 8Bit aufteilen....
    Von Magge2k im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 06.07.2005, 19:02
  5. Bitmuster auswerten mit Bascom??
    Von michaelF im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 03.08.2004, 06:46

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •