Sida 1 av 2

c-control LED-Display

Postat: 15 november 2009, 12:36:11
av stampe92
Hej!
jag har lyckats få alla segment att lysa på min led display utom punkten! kan någon hjälpa mig?

program:
tyvärr är instruktionerna på tyska!

Kod: Markera allt

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'II  BASIC++ DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 (by DIE HARD)  II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'--------------------------------------------------------------------
' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
'--------------------------------------------------------------------
' ANWENDUNG: IIC-BUS COMMUNICATIONS MODULE
'            4 DIGIT LED-DISPLAY 198344             (TREIBER SAA1064)
'--------------------------------------------------------------------
' Dieses Beispiel zeigt die Vorgehensweise für die Benutzung des
' IIC-BUS OBJECTS im OS. 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.
'
' <START><ADDRESS><INSTRUCTION><CONTROL><DIGIT1><DIGIT2><DIGIT3>DIGIT<4><STOP>
'
' 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= $76 = 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
'
' Um Ihnen die Arbeit mit dem Treiber zu vereinfachen
' brauchen Sie sich aber um diese Angelegenheiten nicht zu kümmern,
' da enstprechende Unterprogramme im Treiber vorhanden sind.
'-----------------------------------------------------------------------
' 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 9 (SDA) und PORT 10 (SCL)

'---------------------------------------------------------------------
' Die Zeit zur Anzeige eines Zählerstandes, wie hier im Beispiel benötigt
' etwa 5ms.
'------------------------------------------------------------------------
' BEISPIEL
' Das Beispiel zeigt einen laufenden Zähler bis 9999 und rdy nach Ablauf
' des Programms
'----------------------------------------------------------------------
' ACHTUNG:
' Achten Sie unbedingt darauf, dass das LCD initialisiert ist, wenn es
' angesteckt ist (auch wenn sie es nicht benutzen).
' Es teilt sich einen Teil seines Busses mit dem IIC-BUS
' print"#ON_LCD#";
' print"#INIT#";
' print"#OFF#";
'----------------------------------------------------------------------
' 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.
'-----------------------------------------------------------------------

'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LIGHT          port[16]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------

define TAUSENDER   as byte
define HUNDERTER   as byte
define ZEHNER      as byte
define EINER       as byte

'-------------------------
'-------------------------

'----- LED HELLIGKEIT -----
const BRIGHT0 =07h
const BRIGHT1 =17h
const BRIGHT2 =27h
const BRIGHT3 =37h
const BRIGHT4 =47h
const BRIGHT5 =57h
const BRIGHT6 =67h
const BRIGHT7 =77h
'-------------------------
const PUN=86
const MINUS=40h
const A=77h
const B=7Fh
const C=39h
const d=5Eh
const E=79h
const F=71h
const G=7Dh
const H=76h
const I=06h
const J=0Fh
const L=38h
const n=54h
const x=5Ch
const P=73h
const r=50h
const S=6Dh
const t=78h
const U=3Eh
const y=6Eh
'-----------------------------------------------------
'               7 SEGMENT DECODER
'-----------------------------------------------------
FUNCTION DECODE (CODE as byte)
SELECT CASE CODE
  CASE 0
  CODE=3Fh
  CASE 1
  CODE=06h
  CASE 2
  CODE=5Bh
  CASE 3
  CODE=4Fh
  CASE 4
  CODE=66h
  CASE 5
  CODE=6Dh
  CASE 6
  CODE=7Dh
  CASE 7
  CODE=07h
  CASE 8
  CODE=7Fh
  CASE 9
  CODE=6Fh
END SELECT
RETURN CODE
END FUNCTION
'------------------------------------------------------

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------
FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
  IIC.INIT
  IIC.START
  IIC.SEND 118 'WRITE ADDRESS
  IIC.SEND 0
  IIC.SEND BRIGHT
  IIC.SEND DIGIT1
  IIC.SEND DIGIT2
  IIC.SEND DIGIT3
  IIC.SEND DIGIT4
  IIC.STOP
  IIC.OFF
END FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION 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 FUNCTION
'----------------------------------------------------
'---------------------------------------------------------
FUNCTION SHOW_BLANK()
  SENDBUF(BRIGHT1,0,0,0,0)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IDLE()
  SENDBUF(BRIGHT1,E,L,d,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IN()
  SENDBUF(BRIGHT1,0,0,n,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_OUT()
  SENDBUF (BRIGHT1,0,t,U,x)'------------o
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_CLEAR()
  SENDBUF(BRIGHT1,0,r,L,C)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_READY()
  SENDBUF(BRIGHT1,0,y,D,r)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_ERROR()
  SENDBUF(BRIGHT1,0,r,r,E)
END FUNCTION
'------------------------------------------------------- 
FUNCTION SHOW_ON()
  SENDBUF(BRIGHT1,0,0,n,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_OFF()
  SENDBUF(BRIGHT1,0,F,F,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_TEST()
  SENDBUF(BRIGHT1,255,255,255,255)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_LOL()
  SENDBUF(BRIGHT1,0,MINUS,PUN,6)
END FUNCTION
'-------------------------------------------------------
Jag håller alltså på och försöker få fram värdet från temperaturmodulen till en LED-disp.
värden utan decimaler är inga problem! men nnär dom "halva" graderna ska in kör jag fast!

lite delar ur koden:
Kod:

Kod: Markera allt

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------
FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
  IIC.INIT
  IIC.START
  IIC.SEND 118 'WRITE ADDRESS
  IIC.SEND 0
  IIC.SEND BRIGHT
  IIC.SEND DIGIT1
  IIC.SEND DIGIT2
  IIC.SEND DIGIT3
  IIC.SEND DIGIT4
  IIC.STOP
  IIC.OFF
END FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION 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 FUNCTION

i "split value into digits" måste man ju kunn ta bort "tausender" och "hunderter" och istället lägga till decimalerna efter "einer" på något sätt...

här är koden som läser temp och sedan skickar till LED-Disp.
Kod:
define TEMP as word
DS1631RESET(DS1631)
DS1631SET_STATUS(DS1631,1)
'-------------------------------------------------------------
'-----            LOOP READING TEMPERATURE                 ---
'-------------------------------------------------------------



#LOOP
pause 5
DS1631CONVERT(DS1631)
DS1631WAIT_READY(DS1631)
TEMP=DS1631GET_TEMP(DS1631)

TEMP=TEMP SHR 7
if (TEMP and 0100h) = 0100h then TEMP=(TEMP or FE00h)
SPLIT_DIGITS(temp/2)
  SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),0,0)
lcd.init switchonly
lcd.clear
LCD.PRINT "TEMP: " & TEMP/2 & "." & (TEMP and 1)*5 & " C        "
LCD.OFF
goto LOOP
det hela programeras i WORKBENCH++ (basic) och körs på conrads C-Control II

led disp driver:http://www.nxp.com/acrobat_download/dat ... _CNV_2.pdf


temp modul och display:http://www2.produktinfo.conrad.com/date ... _Modul.pdf

_________________
//Wiktor Ahlander wiktorsbyggen.se "Det omöjliga gör vi medan du väntar... MIRAKEL tar något längre tid"

Lade till code-taggar. /strombom

Re: c-control LED-Display

Postat: 15 november 2009, 13:34:35
av BEEP
Ska det inte vara ett h efter const PUN=86 ?

Re: c-control LED-Display

Postat: 15 november 2009, 13:44:19
av sodjan
> kan någon hjälpa mig?

Du kan väl ändå inte mena och tro att någon skulle sitta och
läsa flera hundra rader kod kommenterad på tyska !!??

Skriv ihop ett litet test-case som visar det du upplever som
ett problem och visa det så får vi se. Vem vet, det kanske inte
ens är ett problem...

Re: c-control LED-Display

Postat: 15 november 2009, 13:48:44
av Swech
FUNCTION SHOW_TEST()
SENDBUF(BRIGHT1,255,255,255,255)
END FUNCTION

Denna bör väl tända upp alltihop inlusive punkt... börja med den och rapportera vad som händer...


Swech

Re: c-control LED-Display

Postat: 15 november 2009, 13:57:57
av Icecap
Och sedan tror jag inte att PUN är definierat rätt!

const PUN=86 står det men jag är ganska säker på att det egentligen ska vara:
const PUN=80h

Jag instämmer alltså med BEEP.

Re: c-control LED-Display

Postat: 15 november 2009, 14:06:46
av stampe92
Jag vet inte men varför upplever jag att sodjan alltid är så spydig och elak?

ahhh... missade ett h där ;)
jag har provat med att tända alla segment och då tänds punkten, men hur får jag så att det kan bli vilken siffra som helst och en punkt efter den?

Re: c-control LED-Display

Postat: 15 november 2009, 14:09:40
av stampe92
hehe ett h på PUN=86 tände punkten ;) tack för att ni uppmärksammade det!

Re: c-control LED-Display

Postat: 15 november 2009, 15:24:27
av stampe92
NU TILL NÄSTA PROBLEM!

Kod: Markera allt

'-----------------------------------------------------
'               7 SEGMENT DECODER
'-----------------------------------------------------
FUNCTION DECODE (CODE as byte)
SELECT CASE CODE
  CASE 0
  CODE=3Fh
  CASE 0.
  CODE=BFh
  CASE 1
  CODE=06h
  CASE 1.
  CODE=86h
  CASE 2
  CODE=5Bh
  CASE 2.
  CODE=DBh
  CASE 3
  CODE=4Fh
  CASE 3.
  CODE=CFh
  CASE 4
  CODE=66h
  CASE 4.
  CODE=E6h
  CASE 5
  CODE=6Dh
  CASE 5.
  CODE=EDh
  CASE 6
  CODE=7Dh
  CASE 6.
  CODE=FDh
  CASE 7
  CODE=07h
  CASE 7.
  CODE=87h
  CASE 8
  CODE=7Fh
  CASE 8.
  CODE=FFh
  CASE 9
  CODE=6Fh
  CASE 9.
  CODE=EFh
END SELECT
RETURN CODE
END FUNCTION
'------------------------------------------------------

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------
FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
  IIC.INIT
  IIC.START
  IIC.SEND 118 'WRITE ADDRESS
  IIC.SEND 0
  IIC.SEND BRIGHT
  IIC.SEND DIGIT1
  IIC.SEND DIGIT2
  IIC.SEND DIGIT3
  IIC.SEND DIGIT4
  IIC.STOP
  IIC.OFF
END FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION 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 FUNCTION
kan någon med hjälp utav den här koden hjälpa mig att få till så att led:en kan visa en eller två decimaler. förstår ni vad jag menar?

jag har den för att visa grader från en termometer just nu visar den bara hela grader (23) och jag vill att den ska visa halva grader med (23.5)

här kommer koden till visningen av temperaturen.

Kod: Markera allt

'-------------------------------------------------------------
DS1631RESET(DS1631)
DS1631SET_STATUS(DS1631,1)
'-------------------------------------------------------------
'-----            LOOP READING TEMPERATURE                 ---
'-------------------------------------------------------------



#LOOP
pause 5
DS1631CONVERT(DS1631)
DS1631WAIT_READY(DS1631)
TEMP=DS1631GET_TEMP(DS1631)

TEMP=TEMP SHR 7
if (TEMP and 0100h) = 0100h then TEMP=(TEMP or FE00h)
SPLIT_DIGITS(temp/2)
  SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),0,0)
lcd.init switchonly
lcd.clear
LCD.PRINT "TEMP: " & TEMP/2 & "." & (TEMP and 1)*5 & " C        "
LCD.OFF
goto LOOP
Lade till code-taggar. /strombom

Re: c-control LED-Display

Postat: 15 november 2009, 16:33:43
av BEEP
Snälla, använd code taggarna så blir det betydligt lättare att läsa ditt inlägg
(tryck på Code knappen och klistra in koden).

Re: c-control LED-Display

Postat: 15 november 2009, 17:07:16
av stampe92
tack för tipset :) Hade ingen aning om vad det va ;) tack för att du sa det snällt :D :D

samma inlägg mer lättläst :

Här är ett nytt problem :( Jag kan inte få temperaturen att visas i halva grader på led:en. Problemet är punkten (igen).

här är den vanliga "spliten"

Kod: Markera allt

'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION 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 FUNCTION
Här är hela koden:

Kod: Markera allt

'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'II  BASIC++ DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 (by DIE HARD)  II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'--------------------------------------------------------------------
' Beispiel zum BASIC-COMPUTER    mit dem Programmer/Application-Board
'--------------------------------------------------------------------
' ANWENDUNG: IIC-BUS COMMUNICATIONS MODULE
'            4 DIGIT LED-DISPLAY 198344             (TREIBER SAA1064)
'--------------------------------------------------------------------
' Dieses Beispiel zeigt die Vorgehensweise für die Benutzung des
' IIC-BUS OBJECTS im OS. 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.
'
' <START><ADDRESS><INSTRUCTION><CONTROL><DIGIT1><DIGIT2><DIGIT3>DIGIT<4><STOP>
'
' 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= $76 = 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
'
' Um Ihnen die Arbeit mit dem Treiber zu vereinfachen
' brauchen Sie sich aber um diese Angelegenheiten nicht zu kümmern,
' da enstprechende Unterprogramme im Treiber vorhanden sind.
'-----------------------------------------------------------------------
' 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 9 (SDA) und PORT 10 (SCL)

'---------------------------------------------------------------------
' Die Zeit zur Anzeige eines Zählerstandes, wie hier im Beispiel benötigt
' etwa 5ms.
'------------------------------------------------------------------------
' BEISPIEL
' Das Beispiel zeigt einen laufenden Zähler bis 9999 und rdy nach Ablauf
' des Programms
'----------------------------------------------------------------------
' ACHTUNG:
' Achten Sie unbedingt darauf, dass das LCD initialisiert ist, wenn es
' angesteckt ist (auch wenn sie es nicht benutzen).
' Es teilt sich einen Teil seines Busses mit dem IIC-BUS
' print"#ON_LCD#";
' print"#INIT#";
' print"#OFF#";
'----------------------------------------------------------------------
' 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.
'-----------------------------------------------------------------------

'--------------------------
'------ I/O PORTS ---------
'--------------------------
define LIGHT          port[16]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------

define TAUSENDER   as byte
define HUNDERTER   as byte
define ZEHNER      as byte
define EINER       as byte

'-------------------------
'-------------------------

'----- LED HELLIGKEIT -----
const BRIGHT0 =07h
const BRIGHT1 =17h
const BRIGHT2 =27h
const BRIGHT3 =37h
const BRIGHT4 =47h
const BRIGHT5 =57h
const BRIGHT6 =67h
const BRIGHT7 =77h
'-------------------------
const PUN=BFh
const MINUS=40h
const A=77h
const B=7Fh
const C=39h
const d=5Eh
const E=79h
const F=71h
const G=7Dh
const H=76h
const I=06h
const J=0Fh
const L=38h
const n=54h
const x=5Ch
const P=73h
const r=50h
const S=6Dh
const t=78h
const U=3Eh
const y=6Eh
'-----------------------------------------------------
'               7 SEGMENT DECODER
'-----------------------------------------------------
FUNCTION DECODE (CODE as byte)
SELECT CASE CODE
  CASE 0
  CODE=3Fh
  CASE 0.
  CODE=BFh
  CASE 1
  CODE=06h
  CASE 1.
  CODE=86h
  CASE 2
  CODE=5Bh
  CASE 2.
  CODE=DBh
  CASE 3
  CODE=4Fh
  CASE 3.
  CODE=CFh
  CASE 4
  CODE=66h
  CASE 4.
  CODE=E6h
  CASE 5
  CODE=6Dh
  CASE 5.
  CODE=EDh
  CASE 6
  CODE=7Dh
  CASE 6.
  CODE=FDh
  CASE 7
  CODE=07h
  CASE 7.
  CODE=87h
  CASE 8
  CODE=7Fh
  CASE 8.
  CODE=FFh
  CASE 9
  CODE=6Fh
  CASE 9.
  CODE=EFh
END SELECT
RETURN CODE
END FUNCTION
'------------------------------------------------------

'-----------------------------------------------------
'--      IIC SEND BUFFER TO SAA1064               ----
'-----------------------------------------------------
FUNCTION SENDBUF(BRIGHT as byte,DIGIT1 as byte,DIGIT2 as byte,DIGIT3 as byte,DIGIT4 as byte)
  IIC.INIT
  IIC.START
  IIC.SEND 118 'WRITE ADDRESS
  IIC.SEND 0
  IIC.SEND BRIGHT
  IIC.SEND DIGIT1
  IIC.SEND DIGIT2
  IIC.SEND DIGIT3
  IIC.SEND DIGIT4
  IIC.STOP
  IIC.OFF
END FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS
'----------------------------------------------------
FUNCTION 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 FUNCTION
'----------------------------------------------------
'          SPLIT VALUE INTO DIGITS punkt
'----------------------------------------------------
FUNCTION SPLIT_DIGITS_PUNKT(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 FUNCTION
'----------------------------------------------------
'---------------------------------------------------------
FUNCTION SHOW_BLANK()
  SENDBUF(BRIGHT1,0,0,0,0)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IDLE()
  SENDBUF(BRIGHT1,E,L,d,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_IN()
  SENDBUF(BRIGHT1,0,0,n,I)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_OUT()
  SENDBUF (BRIGHT1,0,t,U,x)'------------o
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_CLEAR()
  SENDBUF(BRIGHT1,0,r,L,C)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_READY()
  SENDBUF(BRIGHT1,0,y,D,r)
END FUNCTION
'--------------------------------------------------------
FUNCTION SHOW_ERROR()
  SENDBUF(BRIGHT1,0,r,r,E)
END FUNCTION
'------------------------------------------------------- 
FUNCTION SHOW_ON()
  SENDBUF(BRIGHT1,0,0,n,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_OFF()
  SENDBUF(BRIGHT1,0,F,F,x)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_TEST()
  SENDBUF(BRIGHT1,255,255,255,255)
END FUNCTION
'-------------------------------------------------------
FUNCTION SHOW_LOL()
  SENDBUF(BRIGHT1,0,MINUS,pun,6)
END FUNCTION
'------------------------------------------------------- 
#MAIN
define COUNTER as word
define TEMP         as word
define TEMPHI       as byte
define TEMPLO       as byte

const DS1631=158 'Adresse

import "DS1631_GENERIC.blib"
LIGHT=off
LCD.INIT
LCD.PRINT "  SAA1064 LED"
LCD.POS 2,5
LCD.PRINT "DEMO"
LCD.OFF


'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'III      DEMO MESSAGES AND COUNTERS                   II
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  pause 5
SHOW_LOL ()
  pause 100
'-------------------------------------------------------------
DS1631RESET(DS1631)
DS1631SET_STATUS(DS1631,1)
'-------------------------------------------------------------
'-----            LOOP READING TEMPERATURE                 ---
'-------------------------------------------------------------



#LOOP
pause 5
DS1631CONVERT(DS1631)
DS1631WAIT_READY(DS1631)
TEMP=DS1631GET_TEMP(DS1631)

TEMP=TEMP SHR 7
if (TEMP and 0100h) = 0100h then TEMP=(TEMP or FE00h)
SPLIT_DIGITS(temp/2)
  SENDBUF(BRIGHT1,DECODE(EINER),DECODE(ZEHNER),0,0)
lcd.init switchonly
lcd.clear
LCD.PRINT "TEMP: " & TEMP/2 & "." & (TEMP and 1)*5 & " C        "
LCD.OFF
goto LOOP
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

Re: c-control LED-Display

Postat: 15 november 2009, 17:56:18
av Icecap
Men snälla... exakt SAMMA inlägg fast du har lagt in code-taggar i alla de förra också (bra den del).

OK då, låt mig först fråga varför du skriver ditt program på tyska? Det känns ganska ologisk.

Eller är det så att du har kopierat någon annans verk och i själva verket inte har ett skvatt koll på vad programmet gör?
Är det så kan jag bara rekommendera att börja blinka lite LED och faktisk förstå vad som händer.

Re: c-control LED-Display

Postat: 15 november 2009, 18:03:17
av stampe92
Själva grunden är på tyska, det följde med led:en! så här kopieras inget! jag vill även tillägga att jag INTE lagt in kod taggarna i de andra inläggen!

jag har lagt in så att den visar temperaturen! kan någon vara snäll och hjälpa mig?

Re: c-control LED-Display

Postat: 15 november 2009, 18:57:37
av sodjan
> det följde med led:en!

Vilken "led" ?
Och hur då "följde med" ?

Re: c-control LED-Display

Postat: 15 november 2009, 21:03:00
av stampe92
DET ÄR EN LED-DISPLAY VI SNACKAR OM! Ska jag behöva skriva "LED-DISPLAy" varje gång eller räcker det med LED? :doubt:

i programmerings programmet WORKBENCH++ följde det med exempel program och drivare till vissa tillbehör !

Re: c-control LED-Display

Postat: 15 november 2009, 21:50:17
av sodjan
Vadå för "LED-display" ?

Men det skit samma för mig igentligen.
Antingen beskriver du vad det är du håller på med, eller så gör
du det inte. Välj själv, det är ju du som ber om hjälp. Jag tänker
i alla fall inte försöka läsa någon kod som sägs vara till en okänd
"LED-display" och som dessutom är kommenterad på tyska.

(Jag hittade en display som verkar vara den du har efter lite
Googlande inkl manual m.m, men det är kanske bättre att du
förser intresserade med länkar ifall jag har hittat fel pryl så
jag inte rör till det för andra...)