- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: Problem mit LED´s an Output Matrix und einem Taster

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297

    Problem mit LED´s an Output Matrix und einem Taster

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Ein Hallo an Euch **

    Habe ein Problem mit meinen LED´s!
    Ich habe 6 LED´s an einer 2 x 3 Matrix angeschlossen und möchte damit ich die einzelnen LED´s besser/einfacher ansteuern kann jede LED in einer Var. speichern.

    Matrix Anschlüsse:
    LED 1 = PB2 "0" + PB6 "1"
    LED 2 = PB2 "0" + PB5 "1"
    LED 3 = PB2 "0" + PB4 "1"
    LED 4 = PB3 "0" + PB4 "1"
    LED 5 = PB3 "0" + PB5 "1"
    LED 6 = PB3 "0" + PB6 "1"

    Wie muß ich so eine Var. speichern/anlegen damit ich die Passenden Ausgänge in der Var. hinterlegt habe?

    Damit ich im Programm sagen kann z. B. LED 2 "on" und die passenden Portleitungen werden automatisch auf den richtigen Pegel gesetzt.

    ---

    Dann habe ich noch ein kleines Problem mit einem Taster der abgefragt werden soll.
    Ich möchte einen Taster immer wieder bei jedem Programablauf einmal abfragen ob dieser gedräckt wurde oder nicht.

    Jetzt mein Problem dieser Taster steuert einen Zähler, eine Var wird hochgezählt, jetzt ist der Controller aber zu schnell für einen Finger. d. h. wenn ich den taster einmal drücken will damit sich der zähler um 1 erhöht, der Controller zählt aber z.B. 30 da man die Taste ja so schnell garnicht los lassen kann.
    Gibts für das Problem nicht einen Spez. Befehl in BASCOM?


    Danke im vorraus

    Gruß Manuel

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Das ist etwas kniffeliger, als man auf den ersten Blick meinen möchte.
    Beispiel LED 2:
    Aufdrehen: PB2 = 0, PB5 = 1
    Wenn jetzt z,B. auch LED 6 leuchten soll
    PB3 = 0, PB6 = 1
    jetzt geht aber auch gleichzeitig LED 5 an:
    LED 2: PB2 = 0, PB5 = 1
    LED 6: PB3 = 0, PB6 = 1
    also auch
    LED 5: PB3 = 0, PB5 = 1

    Deswegen macht man sowas auch gemultiplext, d.h. ersteinmal läßt man nur die LEDs 1-3 leuchten, und dann LEDs 4-6
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297
    Hallo @PicNick,

    Danke für die schnelle Nachricht.
    Das Problem mit dem multiplexen hab ich im Programm schon gelöst, mir fehlt nur wie ich Ports in einer Var speichere.

    Die Portvar. "z.b. LED2" wird über einen Timer immer nur ganz kurz einmal pro Programmdurchlauf angesprochen und dann wieder auf 0 gesetzt und das wird nacheinander mit jeder Portvar. gemacht.
    d.h. im programm selber läuchtet immer nur eine LED aber fürs Auge die entsprechenden gleichzeitig.

    Gruß MrQu

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ach so, d.h es leuchtet exklusiv immer nur eine, soso.

    Na, dann mach dir LEDS on/off ein Byte mit "1" for ON und "0" für off
    Code:
    CONST LED_1 = 1
    CONST LED_2 = 2
    CONST LED_3 = 3
    CONST LED_4 = 4
    CONST LED_5 = 5
    CONST LED_6 = 6
    
    dim leds as byte ' LED -Status
    
    dim scan as byte ' zum refreshen
    dim Row as byte ' zum refreshen
    dim col  as byte ' zum refreshen
    '---------------------------------------------
    Initialize
      col = 64  ' column &B01000000
      row = 8  '  row  &B00001000
      scan = 1
    
    '---------------------------------------------
    im Programm setzen/löschen
    
         leds.LED_1 = 1  ' led 1 ON
         leds.LED_3 = 1  ' led 3 ON
         leds.LED_1 = 0  ' led 1 OFF
    
    '-----------------------------------------------
    Refresh: (Timer)
       if leds.scan = 1 then 
              PORTB =   col OR row    ' LED on ?
       else
              PORTB = 0       ' LED off
      end if
      incr scan                 ' next 
      if scan = 7 then  ' loop ?
              scan = 1
              col = 64
       else
           if scan > 3 then 
               row = 4 
               shift col, right, 1       
           else 
               row = 8     
               shift col, left, 1       
            end if
       end if
    Geht sicher auch eleganter, aber im Prinzip sollt' das gehen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Spezieller Befehl: "DEBOUNCE", der bleibt aber ein paar mS stecken.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    05.07.2004
    Ort
    Münchener Osten
    Alter
    51
    Beiträge
    297
    Danke!

    Ähhh, moment so gut bin ich noch nicht.

    Das Script blich ich nicht ganz.

    Da hab ich gleich mal eine Frage.
    Ich habe das Buch von "Claus Kühnel" das ist zwar so weit ganz OK aber irgendwie unlogisch geschrieben. Gibts da ein besseres Buch in dem die einzelnen Bascom Befehle schritt für schritt beschrieben werden.???
    Oder was zum runterladen???

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Buch kann ich dir nix empfehlen, wie ich angefangen habe, sind Komputer noch mit Dampf gegangen.
    Ich schau mir gerne fremde Programme an, versuch' zu begreifen und dann in eigene Gedanken zu fassen. "Schritt für Schritt" ist so ne sache, welche Schritte in welche Richtung ?

    Das Script: 2 Teile: ein byte "LEDS", wo die Bits 1-6 die Leds repräsentieren. Bei "1" solls leuchten, bei "0" nicht. diese Bits werden irgendwo im Programm gesetzt.
    Unabhängig im Timer eine Routine, die immer gleichmäßig hintereinander diese Bits abfragt. Ist ein "1", setzt er in PortB die passenden Pins, bei null eben nicht. Bei jedem Interrrupt dreht er eine LED auf (oder nicht) und läßt sie bis zum nächsten leuchten. und das halt im Kreis
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

LiFePO4 Speicher Test