Die Anzeige des NXT ist von weiten schlecht ablesbar. Um einfache Zahlen anzuzeigen (z.B. aktuell gemessener Wert eines Sensors) ist eine 7-Segment-LED ideal. Diese kann man z.B. mit einem PCF8574 ansteuern. Der PCF8574 kann kaum Strom liefern aber entgegen nehmen. Daher eigenen sich nur LED-Anzeigen mit gemeinsamer Anode (also + Anschluss) wie z.B. Kingbright SA39-11GWA. Ansonsten würden die LEDs nur glimmen.
Hier ein Modell, wo eine solche LED-Anzeige zum Einsatz kommt. Dort wird eine 2-stellige LED-Anzeige benutzt und von 2 PCF8574 angesteuert.
Ein Prototyp :
Den PCF8574 beschaltet man wie Folgt:
- Pin 8 : oV an NXT-Pin 3 (rotes Kabel am NXT)
- Pin 1,2,3: 0V (damit ist die I2C-Adresse 0x40)
- Pin 4,5,6,7,9,10,11,12 : an die LED-Anzeige mit jeweils einem 1,5K Widerstand dazwischen
- 13 leer
- 14: SCL an NXT-Pin 5 (gelbes Kabel am NXT)
- 16: SDA an NXT-Pin 6 (blaues Kabel am NXT)
- 17: +4,3V-Power an NXT-Pin4 (grünes Kabel am NXT)
Zusätzlich kommt noch je ein 82K (PullUp-)Widerstand zwischen SCL und 4,3V-Power sowie SDA und 4,3V-Power.
Die LED-Anzeige muss auch noch an der gemeinsamen Anode mit 4,3V-Power verbunden werden (rotes Kabel). Das war’s.
Diese Schaltung verbraucht 0,1mA, wenn keine LED leuchtet und ca. 15mA wenn alle 8 (inkl. dem Punkt) leuchten, also ca. 1,9mA je LED.
Hier ein Beispielprogramm in pbLua. Das sollte in anderen Sprachen ähnlich leicht sein.
-- test PCF8574 LED on NXT -- 29.06.2013 -- pblua 2.0RC2 function delay(ticks) local t = nxt.TimerRead() repeat until(t+ticks < nxt.TimerRead() ) end -- waitI2C() - sits in a tight loop until the I2C system goes idle function waitI2C(port) while( 0 ~= nxt.I2CGetStatus(port) ) do end end port = 1 inputType = 10 i2cAddress = 0x40 -- pcf8574 -- init nxt.InputSetType(port, inputType) nxt.InputSetDir(port, 1, 1) -- digi0 and digi1 output nxt.InputSetState(port, 1, 1) -- 0 sets the pin of digi0 and digi1 high nxt.I2CInitPins(port) waitI2C(port) -- test for i=0, 0xFF, 1 do nxt.I2CSendData( port, string.char(i2cAddress, i), 1 ) waitI2C( port ) delay(300) end