- LiTime Speicher und Akkus         
Ergebnis 1 bis 10 von 10

Thema: LED Ansteuerung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.07.2006
    Beiträge
    6

    LED Ansteuerung

    Anzeige

    Powerstation Test
    Hallo zusammen,
    ich hab den Robby ganz neu und möchte mich jetzt mal reinarbeiten.
    Dazu wollte ich einen kleinen Zähler erstellen (an LEDs), z.B. MOD 10.
    Bisher hab ich aber nur rausgefunden, wie ich einzelne LEDs ansteuren kann, wie z.B. LED1_F=on. Wie kann ich aber nun an den LEDs eine bestimmte Bitfolge anlegen, sodass ich z.B. mit einer Tabelle am Programmende einen bestimmten Zähler erstellen kann? Liegen denn die LEDs an irgendeinem Port, damit ich den Port vielleicht ansprechen könnte?? Danke schon mal für eure Hilfe!
    Gruß

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    LEDs

    Hi knife,

    was willst du machen?

    Mit gosub LEDxON, gosub LEDxOFF, gosub LEDSON, gosub LEDSOFF kann man doch alles machen.
    Alternativ kannst du mit den Flags LEDx_F und Aufruf von gosub EXTPORT_WRITE die LEDs direkt ein-/ausschalten:
    z.B.:
    LED1_F=1 : gosub EXTPORT_WRITE
    ... schaltet LED 1 ein.

    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Die EXTPORT-Variable ändern, die oberen 4 Bits sind die 4 LED's
    Also z. B. für ne binäre 13:
    EXTPORT = (EXTPORT AND &H0f) OR &Hd0 : GOSUB EXTPORT_WRITE
    Ich glaub &H war doch glaub beim CCBASIC bei Hexadezimalzahlen am Anfang...

    Wenn du der Sprache C mächtig bist gehts mit meinem C-Compiler übrigens einfacher (leds(LEDX, 0xd0); und fertig) *werbungmach*
    Wart aber noch bis morgen falls du ihn dir runterladen möchtest, dann werd ich endlich die neue Version rausbringen. Mit Tabellen guckts bei meinem Compiler aber noch schlecht aus, die hab ich noch nicht implementiert

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    11.07.2006
    Beiträge
    6
    hallo dirk, erstmal danke für deine antwort!!!
    die funktionen ledx on/off sind für einen automatischen zähler doch sehr unpraktisch, man müsste ja jedesmal die leds belegen. was ich wollte ist, dass ich in einer tabelle (array) werte ablege (z.B.: 0001, 0010, 0011, ...) und anschließend diese werte nacheinander an die leds ausgeben, z.B. mit for-schleife. gibts denn sowas?
    gruß und danke!!!

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Jop machst du das ganzenoch in eine for-Schleife wo ich geschrieben hab, das &Hd0 ersetzt du durch den Wert aus der Tabelle. Musst aber die oberen 4 Bits nehmen also bei deinen Beispielwerten &H10, $H20, &H30.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hallo knife,

    was ich wollte ist, dass ich in einer tabelle (array) werte ablege (z.B.: 0001, 0010, 0011, ...) und anschließend diese werte nacheinander an die leds ausgeben, z.B. mit for-schleife. gibts denn sowas?
    Man könnte das "klassisch" so machen:

    Code:
    'IIIIIIII Binärausgabe mit den 4 LEDs IIIIIIII
    ' Der Robby kann OHNE zusätzliche Hardware keine Werte (z.B.
    ' seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit den
    ' 4 LEDs in Binärform (als 2 Nibble mit je 4 Bit) aus.
    ' Die Variable VALUE muss als BYTE definiert sein!
    #LEDBINOUT 'Ausgabe 1. Nibble (low)
    gosub LEDSOFF: gosub LED1FLASH: gosub LED1FLASH
    gosub LED1FLASH: gosub LED1FLASH: gosub LED1FLASH
    if (VALUE and &B1) <> 0 then gosub LED1ON
    if (VALUE and &B10) <> 0 then gosub LED2ON
    if (VALUE and &B100) <> 0 then gosub LED3ON
    if (VALUE and &B1000) <> 0 then gosub LED4ON
    pause 100 'Ausgabe 2. Nibble (high)
    gosub LEDSOFF: gosub LED2FLASH: gosub LED2FLASH
    gosub LED2FLASH: gosub LED2FLASH: gosub LED2FLASH
    if (VALUE and &B10000) <> 0 then gosub LED1ON
    if (VALUE and &B100000) <> 0 then gosub LED2ON
    if (VALUE and &B1000000) <> 0 then gosub LED3ON
    if (VALUE and &B10000000) <> 0 then gosub LED4ON
    pause 100: return
    #LED1FLASH
    gosub LED1ON: pause 5: gosub LED1OFF: pause 5: return
    #LED2FLASH
    gosub LED2ON: pause 5: gosub LED2OFF: pause 5: return
    
    'Binär-Dezimal-Tabelle (4-Bit):
    ' WERT:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
    ' LED1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
    ' LED2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
    ' LED3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
    ' LED4->  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1
    '
    ' Der Dezimal-WERT kann in der 1. Zeile abgelesen werden, wenn man
    ' die zutreffende LED-Kombination aussucht (1 -> an, 0 -> aus).
    ' Der Wert des 2. Nibbles (high) kann genauso abgelesen werden,
    ' muss aber noch mit 16 multipliziert und zum 1. Nibble addiert
    ' werden, um den ganzen 8-Bit-Dezimalwert (0..255) zu erhalten.
    VALUE enthält dann den auszugebenen Wert.

    Gruß Dirk

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.07.2006
    Beiträge
    6
    hallo nochmal, hab doch nochmal eine frage:
    Mir sind immer noch nicht bestimmte grundlegende Funktionen von Robby ganz klar. Was macht den z.B. die Funktion export bzw. extport_write? Was ist den der extport? Und wie kann ich herausfinden wo Port1, Port2, ..., und die Jumper 1..5 liegen? (von denen im Handbuch gesprochen wird)?
    Kennt ihr vielleicht eine Seite, wo das ganze noch etwas genauer beschrieben wird? Ich finden das Handbuch nicht sehr hilfreich, auch die Quelltext sind schlecht kommentiert.
    Nochmal VIELEN DANK!!!!!
    Gruß

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Hallo,

    So weit ich's noch ein bischen im kopf habe...

    Die 4 Leds sind direkt verbunden mit ein schieberegister IC (74HC4094) mit nummer I11

    Im systeemtreiber P5DRIV.SYS befindet sich eine Funktion SYSTEM.

    Mit SYS SYSTEM wird diese systeemtreiber Funktion SYSTEM angerufen/ausgefuhrt.

    Diese SYSTEM Funktion holt sich den Byte Wert aus Register 4 (den EXTPORT Register) und schiebt Bit fur Bit diesen Byte aus Port 1 (SDIO) heraus und generiert wahrend jeden bit ein puls auf Port 3 (SCLIO). Wenn alle 8 Bits aussen sind generiert die Funktion am ende nog ein Puls auf Port 4 (STROBE).

    Diese 3 signalen SDIO/SCLIO/STROBE gehen alle zum schieberegister IC.

    Damit werden die 8 bits vom EXTPORT Register heraus in dass IC herein geschoben. Die letzten STROBE sorgt dafur dass die hereingeschobene bits am ausgange vom IC wie hoch oder niedrich actief werden.

    Mit die hochsten 4 bits werden die LEDs gesteurt, mit die niedrichsten Bits werden z.B. die COM_NAV Power ein/ausgeschaltet.

    Gruss

    Henk

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    11.07.2006
    Beiträge
    6
    Hey danke henk!!! Hat mir doch einiges weitergeholfen!!! Aber woher hast du diese Infos. Hast du dir das selbst erarbeitet, oder kann man das irgendwo nachlesen??
    gruß

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.08.2004
    Ort
    Zwolle
    Alter
    67
    Beiträge
    531
    Ha, ha,

    diesen info hab ich mir selber erarbeitet.

    Ich hab die Robby schematics und die P5DRIV.SYS mal richtig zeile fur zeile studiert und Du findest hier dass ergebnis vom P5DRIV.SYS 'studierung'

    http://home.planet.nl/~winko001/Robb...bInfPagFrm.htm

    Und daneben hab ich schon dutzende Robby's repariert.

    Gruss

    Henk

Berechtigungen

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

LiTime Speicher und Akkus