Re: 7 Segment LED Anzeige Kategorie: I²C-Bus (von hias - 16.06.2006 9:47) | |
Als Antwort auf 7 Segment LED Anzeige von EGLV - 13.06.2006 9:51
| |
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 'II BASIC DEMO ZUR C-Control Pro Mega 32/128 von Hias II 'II nach Vorlage von Die Hard für die C-Control Basic II 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII '-------------------------------------------------------------------- ' Beispiel zum Mega 32/12 mit dem Application-Board '-------------------------------------------------------------------- ' ANWENDUNG: IIC-BUS COMMUNICATIONS MODULE ' 4 DIGIT LED-DISPLAY 198344 (TREIBER SAA1064) '-------------------------------------------------------------------- ' Dieses Beispiel zeigt die Vorgehensweise für die Benutzung des I2C ' Buses der C-Control Mega und einer der vielen erhältlichen Bausteine 'mit IIC-Bus . ' Interface ist der 4 DIGIT LED DISPLAY TREIBER SAA1064. Er ist der Baustein ' der die 4 DIGIT 7 SEGMENTANZEIGE der LED-Anzeige ansteuert. ' Er hat ein verhältnismässig einfaches Protokoll das mit der IIC-Bus ' Unterstützung des Betriebsystems recht einfach in die Treibersoftware ' für diesn Baustein umgesetzt werden kann. ' ' ' ' Die Adresse besteht aus einem festen, nicht veränderbaren Anteil und ' einem vom Benutzer wählbaren Teil (zwei Bits). Das letzte Bit ' legt fest ob eine READ (Eingabe) oder WRITE (Ausgabe) über den SAA1064 ' erfolgt ' In diesem Beispiel hat der SAA1064 die Adresse 3 (alle Bits auf HI), ' alle Jumper abgezogen. ' Allerdings ist beim diesem Baustein die interne Adressdecodierung ' etwas anders als üblich. Das Modul hat deshalb 4 Jumper die dem ' Modul die Adresse 0 bis 3 zuweisen. ' Es darf jeweils nur ein Jumper gesteckt sein. ' J1 A0=0, A1=0 ' J2 A0=1, A1=0 ' J3 A0=0, A1=1 ' J4 A0=1, A1=1 ' Damit ergibt sich für eine READ-Operation folgender Wert: ' ' 0 1 1 1 0 x x 1 READ-Operation ' I------I-----I-I ' FIX ADR ADR R/W ' ' Für eine WRITE-Operation ist das letzte Bit LO und es ergibt sich ' folgender Wert: ' ' 0 1 1 1 0 x x 0 WRITE-Operation ' I------I-----I-I ' FIX ADR ADR R/W ' ' x sind die mit Jumper auf 0 setzbaren Adressbits. ' In diesem Beispiel wird angenommen, dass kein Jumper gesteckt ist. Die ' Adresse ist damit 118= &H76 = 01110110 ' Das INSTRUCTION-BYTE legt fest mit welches der internen Register ' zuerst beschriebnen wird. In unserem Beispiel ist das INSTRUCTION BYTE ' Null, das bedeutet dass nach dem INSTRUCTION BYTE das KONTROLLREGISTER ' und danach die DATENREGISTER der vier Digits beschrieben werden. ' Das KONTROLLREGISTER legt den LED Modus (hier Multiplex)und die LED ' Helligkeit fest. ' ' Die Zuweisung der Segmente zum jeweiligen Bit sind so: ' a ' f b xgfedcba (a=bit0) ' g ' e c ' d ' ' Eine 1 wird durch die Segmente bc dargestellt und die entsprechenden Bits sind ' log 1, die anderen 0 -> 00000110 =&H06 ' '----------------------------------------------------------------------- ' SCHNITTSTELLE ZUM TREIBER ' Ihre Schnittstelle zum LED Treiber ist die Variable BRIGHTNES der Sie ' die vordefinierten Werte BRIGHT0 bis BRIGHT7 zuweisen könnnen ' und die Variablen DIGIT1 bis DIGIT4, die alle zusammen an die ' FUNCTION SENDBUF übergeben werden. Diese FUNCTION sendet den ' Buffer zum LCD. ' ' DECODE und SPLIT_DIGITS ' SPLIT_DIGITS spaltet einen Zahl in Ihre einzelnen Stellen auf ' ( also nach Zehner, Hunderter usw..) ' Bevor diese Stellen dann an das Display übertragen werden, müssen ' sie in den 7-Segment Code umgewandelt werden. ' Dies übernimmt die FUNCTION DECODE ' '----------------------------------------------------------------------- 'Der IIC-Bus liegt an PORT PC1 (SDA) und PORT PC0 (SCL) '---------------------------------------------------------------------- ' ACHTUNG: ' Das LED-Display benötigt bei max. Helligkeit sehr viel Strom ' Die Kühlung des Spannungsreglers auf dem Application-Board ist ' dafür nicht ausreichend. Betreiben Sie das Display mit BRIGHT2, ' wenn keine zusätzliche Kühlung für den Spannungsregler auf dem ' Application-Board vorgesehen ist. '----------------------------------------------------------------------- '---------------------------------------------------------------------- '----- LED HELLIGKEIT ----- #define BRIGHT0 &H07 #define BRIGHT1 &H17 #define BRIGHT2 &H27 #define BRIGHT3 &H37 #define BRIGHT4 &H47 #define BRIGHT5 &H57 #define BRIGHT6 &H67 #define BRIGHT7 &H77 ' ------------------------ ' Konstantendefinition '------------------------- #define MINUS &H40 #define A &H77 #define B &H7F #define C &H39 #define d &H5E #define E &H79 #define F &H71 #define G &H7D #define H &H76 #define I &H06 #define J &H0F #define L &H38 #define n &H54 #define x &H5C ' ist das kleine o #define P &H73 #define r &H50 #define S &H6D #define t &H78 #define U &H3E #define y &H6E '-------------------------- '---- SYSTEM MEMORY ------- '-------------------------- Dim TAUSENDER As Byte Dim HUNDERTER As Byte Dim ZEHNER As Byte Dim EINER As Byte '----------------------------------------------------- ' 7 SEGMENT DECODER '----------------------------------------------------- Sub DECODE (CODE As Byte) As Byte Select Case CODE Case 0 CODE=&H3F Case 1 CODE=&H06 Case 2 CODE=&H5B Case 3 CODE=&H4F Case 4 CODE=&H66 Case 5 CODE=&H6D Case 6 CODE=&H7D Case 7 CODE=&H07 Case 8 CODE=&H7F Case 9 CODE=&H6F End Case Return CODE End Sub '------------------------------------------------------ '----------------------------------------------------- '-- IIC SEND BUFFER TO SAA1064 ---- '----------------------------------------------------- Sub SENDBUF(BRIGHT As Byte,DIGIT1 As Byte,DIGIT2 As Byte,DIGIT3 As Byte,DIGIT4 As Byte) I2C_Start() ' I2C Bus starten I2C_Write (&H76) ' Adresse des Bausteins I2C_Write (0) ' Startbit I2C_Write (BRIGHT) ' Controllbit I2C_Write (DIGIT1) ' erstes LED Segment I2C_Write (DIGIT2) ' zweites LED Segment I2C_Write (DIGIT3) ' drittes LED Segment I2C_Write (DIGIT4) ' viertes LED Segment I2C_Stop() ' I2C Stoppen AbsDelay(5) End Sub '---------------------------------------------------- ' SPLIT VALUE INTO DIGITS '---------------------------------------------------- Sub SPLIT_DIGITS(VALUE As Word) TAUSENDER=VALUE/1000 HUNDERTER=(VALUE-(TAUSENDER*1000))/100 ZEHNER=(VALUE-(TAUSENDER*1000)-(HUNDERTER*100))/10 EINER=VALUE-TAUSENDER*1000-HUNDERTER*100-ZEHNER*10 End Sub '---------------------------------------------------- '--------------------------------------------------------- Sub SHOW_BLANK() SENDBUF(BRIGHT1,0,0,0,0) End Sub '-------------------------------------------------------- Sub SHOW_IDLE() SENDBUF(BRIGHT1,E,L,d,I) End Sub '-------------------------------------------------------- Sub SHOW_IN() SENDBUF(BRIGHT1,0,0,n,I) End Sub '-------------------------------------------------------- Sub SHOW_OUT() SENDBUF (BRIGHT1,0,t,U,x)'------------o End Sub '-------------------------------------------------------- Sub SHOW_CLEAR() SENDBUF(BRIGHT1,0,r,L,C) End Sub '-------------------------------------------------------- Sub SHOW_READY() SENDBUF(BRIGHT1,0,y,d,r) End Sub '-------------------------------------------------------- Sub SHOW_ERROR() SENDBUF(BRIGHT1,0,r,r,E) End Sub '------------------------------------------------------- Sub SHOW_ON() SENDBUF(BRIGHT1,0,0,n,x) End Sub '------------------------------------------------------- Sub SHOW_OFF() SENDBUF(BRIGHT1,0,F,F,x) End Sub '------------------------------------------------------- Sub SHOW_TEST() SENDBUF(BRIGHT1,255,255,255,255) End Sub '------------------------------------------------------------------------------ ' Hauptprogramm ' Sub main() ' Variablendeklaration Dim COUNTER As Integer Dim Zeile(12) As Char I2C_Init(I2C_100kHz) ' I2C Bit Rate: 100 kHz LCD_Init() LCD_CursorPos(0) Zeile = "SAA1064" ' LCD Cursor positionieren LCD_WriteText(Zeile) ' String ausgeben LCD_CursorPos(&H40) Zeile = "Demo" ' LCD Cursor auf 2.Zeile positionieren LCD_WriteText(Zeile) ' String ausgeben 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 'III DEMO MESSAGES AND COUNTERS II 'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII '----------- TEST - ALL SEGMENTS ON -------------------- SHOW_TEST() AbsDelay(1000) '----------- BLANK - ALL SEGMENTS OFF ------------------ SHOW_BLANK() AbsDelay(1000) '----------- SHOW IDLE MESSAGE ---------------------------- SHOW_IDLE() AbsDelay(1000) '----------- SHOW IN MESSAGE ---------------------------- SHOW_IN() AbsDelay(1000) '----------- SHOW OUT MESSAGE --------------------------- SHOW_OUT() AbsDelay(1000) '----------- SHOW CLEAR MESSAGE ------------------------- SHOW_CLEAR() AbsDelay(1000) '----------- SHOW ERROR MESSAGE ------------------------- SHOW_ERROR() AbsDelay(1000) '----------- SHOW ON MESSAGE ---------------------------- SHOW_ON() AbsDelay(1000) '----------- SHOW OFF MESSAGE --------------------------- SHOW_OFF() AbsDelay(1000) '---------- SHOW RUNNING COUNTER ------------------------ For COUNTER = 0 To 9999 SPLIT_DIGITS(COUNTER) SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),DECODE(HUNDERTER),DECODE(TAUSENDER)) Next '--------- FLASHING READY ------------------------------- Lab RDY SHOW_READY() AbsDelay(500) SHOW_BLANK() AbsDelay(500) SENDBUF(BRIGHT1,x,L,A,H) 'Halo AbsDelay(500) SHOW_BLANK() AbsDelay(500) SENDBUF(BRIGHT1,128,128,128,128) ' Dezimalpunkte AbsDelay(500) SHOW_BLANK() AbsDelay(500) Goto RDY End Sub > Hallo > > wir sind Auszubildende bei Emscher Genossenschaft und möchten gerne über eine C Control Pro mega 32 eine 7 Segment > Led Anzeige (Conrad)ansteuern über I2C. > > Wir würden uns freuen wenn einer von euch uns Helfen könnte und vielleicht ein kleines Programm schicken würde. | |
Antwort schreiben Antworten: Re: 7 Segment LED Anzeige (von helios03 - 19.06.2006 12:34) Re: 7 Segment LED Anzeige (von hias - 20.06.2006 9:58) Re: 7 Segment LED Anzeige (von helios03 - 20.06.2006 20:56) Re: 7 Segment LED Anzeige (von helios03 - 21.06.2006 14:32) Re: 7 Segment LED Anzeige (von EGLV - 20.06.2006 12:56) Re: 7 Segment LED Anzeige (von Master of Desaster - 21.06.2006 8:51) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum