Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

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.
'
'
DIGIT<4>
'
' 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)