Hallo Leute,
nach langer "Bastelpause" wollte ich mal einen I2C/LED Driver zum Ansteuern von einer 7-Segment Anzeige testen.
Folgende Anzeige ist verbaut:
HDSP-5501
Laut Datenblatt ist dies ein Segment mit gemeinsamer Anode (+-Anschluss)
Hier im Forum habe ich auch schon bereits einen Beitrag zum HT16K33 gefunden jedoch werde ich nicht so 100%ig schlau aus dem Programm und auch aus dem Datasheet.
Hardwareaufbau ist wie folgt:
Grundlage ist der Arduino Mega2560
I2C mit 10k Pullups
HT16K33 Breakoutboard von Adafruit
und die oben genannte Segmentanzeige.
Hier mein abgeänderter Code zum Ausgeben von Zeichen. Leider schaffe ich es nicht, das nur ein Segment leuchtet. Hoffe ihr könnt mir da weiterhelfen.
Alles anzeigen
Hardwareanbindung der Anzeige an den Controller steht oben im Code. Ich bin mir auch nicht sicher, ob dieser Anschluss so passt bei gemeinsamer Anode. Vielleicht kann da auch nochmal jemand drüber schauen.
Danke und Gruß
Stefan
nach langer "Bastelpause" wollte ich mal einen I2C/LED Driver zum Ansteuern von einer 7-Segment Anzeige testen.
Folgende Anzeige ist verbaut:
HDSP-5501
Laut Datenblatt ist dies ein Segment mit gemeinsamer Anode (+-Anschluss)
Hier im Forum habe ich auch schon bereits einen Beitrag zum HT16K33 gefunden jedoch werde ich nicht so 100%ig schlau aus dem Programm und auch aus dem Datasheet.
Hardwareaufbau ist wie folgt:
Grundlage ist der Arduino Mega2560
I2C mit 10k Pullups
HT16K33 Breakoutboard von Adafruit
und die oben genannte Segmentanzeige.
Hier mein abgeänderter Code zum Ausgeben von Zeichen. Leider schaffe ich es nicht, das nur ein Segment leuchtet. Hoffe ihr könnt mir da weiterhelfen.
BASCOM-Quellcode
- '###############################################################################
- 'Hardwareconfig #
- '###############################################################################
- '$sim
- $regfile = "m2560def.dat"
- $crystal = 16000000 '16MHz
- $hwstack = 100
- $swstack = 100
- $framesize = 400
- $baud = 19200
- 'Anschluss der 7-Segment Anzeige:
- 'Gemeinsame Anode (+)
- '7-Segment HT16K33
- 'Anode Row0/A2
- 'Kathode A COM0
- 'Kathode B COM1
- 'Kathode C COM2
- 'Kathode D COM3
- 'Kathode E COM4
- 'Kathode F COM5
- 'Kathode G COM6
- 'Kathode DP COM7
- 'I2C Config
- Config Sda = Portd.1
- Config Scl = Portd.0
- '$lib "i2c_twi.lbx"
- I2cinit
- Const 16k33 = &HE0 'Schreibadresse , alle Adresseingänge offen
- Const 16k33r = &HE1 'Leseadresse , alle Adresseingänge offen
- Const Display_on = &H81
- Const Digit = 16 'Anzahl 7 Segment Digits
- Const Digit1 = Digit + 1 ' Länge des Segment Strings + 1.Byte für dessen Startadresse
- Dim Temp As Byte
- Dim I As Byte
- Dim Segmente(digit) As Byte 'Segmente-Speicher
- 'Als erstes HT16K33 initialisieren
- Print "Init"
- Gosub Led_init 'Zu Beginn erst mal ein INIT ausführen!
- Wait 1
- Print "Init OK"
- Wait 1
- Print "Clear Display"
- Gosub Clear_disp
- Wait 1
- Print "Clear OK"
- Wait 1
- Do
- Temp = &H00
- Print "Loop " ; I
- I2csend 16k33 , Temp , I
- Wait 1
- Incr I
- Loop
- End
- ' #############################################################################
- Led_init:
- 'Register "System setup"
- Temp = &H21 'Oszillator einschalten
- I2csend 16k33 , Temp , 1
- Waitms 1
- 'Wird nicht benötigt, da gemeinsame Anode verbaut ist?!?
- 'Temp = &HA0 'Row15/int pin als LED ausgang definieren
- 'I2csend 16k33 , Temp , 1
- 'Waitms 1
- 'Temp = &HA1 'Row15/int pin als Interrupt ausgang definieren - LOW aktiv . Int wird nach jedem auslesen zurückgesetzt
- 'I2csend 16k33 , Temp , 1 'und wenn taster gedrückt bleibt gleich wieder ausgelöst, Tasten im HT16K33 intern entprellt, wiederholrate Int ca 50 Hz
- 'Waitms 1
- 'Register "Dimming set"
- Temp = &HEF 'Dimmimg auf 100% 16/16
- I2csend 16k33 , Temp , 1
- Waitms 1
- 'Register "Display setup"
- Temp = Display_on 'Display on - no Blink
- I2csend 16k33 , Temp , 1
- Waitms 1
- Return
- ' #############################################################################
- clear_disp:
- For I = 1 To Digit+1 'alle Segmente auf 0 setzen, Segment 1 ist die Displayspeicher startadresse
- Segmente(I) = &H00
- Next I
- I2csend 16k33 , Segmente(1) ,(digit1)
- Return
Danke und Gruß
Stefan