'Ansteuerung für das Siemens-Display S65 mit der Anfangsnummer LS020... ' 'Pinbelegung, Rückseite Display, Anschluss auf linker Seite 'Auflistung von oben nach unten 'RS C0 'Reset D7 'CS C2 'CLK C4 'Dat C6 'Vcc 3 Volt (max. 3.3 Volt, min. etwa 2.4 Volt) 'GND 'Vdigital 3 Volt, kann aber auch 1.8 Volt betragen, habe ich mit Vcc verbunden 'LED+ etwa 10.5 Volt, 20 mA (max 30 mA) 'LED- (GND) 'Da es sich hier um keine SPI-Ansteuerung handelt, können alle Pins beliebig 'ausgetauscht werden. 'Wichtig ist, dass beim Compilieren die korrekte Taktfrequenz angegeben wird 'Code wurde mit Atmega32 16 MHz getestet '########################################################################### ' Osaziloskop mit Display Siemens S65 '########################################################################### ' Diese Software steht unter GPL -(c) Dirk Milewski '########################################################################### ' '########################################################################### ' Wer ne Möglichkeit hat Hard-Spi zu machen bitte Info an mich mit demo Programm '############################################################################# $hwstack = 128 $swstack = 128 $framesize = 128 $regfile = "m32def.Dat" $crystal = 16000000 $baud = 19200 Ddrd = &B11111111 'Port C als Output Ddrc = &B11111111 'Port D als Output Ddra = &B00000000 'Port a als Input Ddrb = &B11111111 'portb output ->S65 Display Dim A1 As Word , B1 As Word , R1 As Byte , F1 As Word , T As Byte , Platz As Word Dim W1 As Word , Xy As Byte , Farbe As Word , Zeichenkette As String * 30 '############################ ' für U messung '############################# Dim X1m As Byte , Y1m As Byte , Zm As Integer Dim X2m As Byte , Y2m As Byte Dim D1m As Byte , Eam As Integer , Fam As Integer Dim Wm As String * 2 Dim V(770) As Byte Dim U As Word Dim Umess As Single Dim Tmp As String * 10 Dim Ypx As Byte Dim Timeb As Byte '#################################################################### ' ADC kanal 0 und 1 werden benutzt -> zur Auswertung hier nur 0 '#################################################################### 'Beispiel: 16000000MHz/16(Prescaler)= 1000000/13 Takte = Messfrequenz 76923 Hz '#################################################################### Config Adc = Single , Prescaler = 16 , Reference = Internal Config Pina.2 = Input Porta.2 = 1 Kup Alias Pina.2 Config Pina.3 = Input Porta.3 = 1 Kdown Alias Pina.3 Config Pina.4 = Input Porta.4 = 1 Kright Alias Pina.4 Config Pina.5 = Input Porta.5 = 1 Kleft Alias Pina.5 Config Pina.6 = Input Porta.6 = 1 Kenter Alias Pina.6 Config Pina.7 = Input Porta.7 = 1 Kstart Alias Pina.7 '#################################################################### ' Wir AREF = Ub genommen bitte Messen und Hier bei AREF eintragen. ' Interne AREF =2,56V -> siehe datenblatt! '#################################################################### Const Aref = 2.56 Const N = Aref / 1024 '################################################## ' SPI '################################################# Rs Alias Portb.0 Res Alias Portb.1 Cs Alias Portb.2 Clk Alias Portb.3 Dat Alias Portb.4 '16Bit Color -> RRRRRGGGGGBBBBB Const Lila = &B1111100000011111 Const Blau = &B0000000000011111 Const Weiss = &HFFFF Const Schwarz = &H0000 Const Rot = &B1111100000000000 Const Gruen = &B0000011111100000 Const Cyan = &B0000011111111111 Const Gold = &B1111111111100000 Const Grau = &B1111111111110110 Const Hgelb = &B1111011110101000 Const Dgelb = &B1111011111010000 Const X = 176 Const Y = 132 Declare Sub S65_init() Declare Sub S65_pset(byval Lx As Byte , Byval Ly As Byte , Byval Color As Word) Declare Sub S65_line(byval Lx1 As Byte , Byval Ly1 As Byte , Byval Lx2 As Byte , Byval Ly2 As Byte , Byval Color As Word) Declare Sub S65_zeichen(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String ) Declare Sub S65_print(byval Lx As Byte , Byval Ly As Byte , Byval Fcol As Word , Byval Bcol As Word , Byval Lcd_text As String) Declare Sub S65_cls(byval Bcol As Word) Declare Sub S65_pixelset(byval Lx As Byte , Byval Ly As Byte , Byval Color As Word) Call S65_init() Call S65_cls(schwarz) Call S65_print(8 , 15 , Grau , Rot , " 1Kanal Osziloskop ") Call S65_print(18 , 40 , Weiss , Schwarz , " V1.0-20060922 ") Call S65_print(26 , 25 , Weiss , Schwarz , " by Dirk Milewski (c) ") Call S65_print(50 , 60 , Cyan , Schwarz , "www.comwebnet.de") Call S65_line(40 , 40 , 60 , 60 , Hgelb) Call S65_line(40 , 40 , 60 , 80 , Cyan) Call S65_line(40 , 40 , 80 , 60 , Rot) '################################# ' Kreuz zeichen '################################# For Xy = 30 To 50 Call S65_pset(xy , 40 , Hgelb) Call S65_pset(40 , Xy , Hgelb) Next Xy For Xy = 20 To 100 Call S65_pset(xy , 30 , Cyan) Next Xy '##################################### ' Titelscreen '##################################### For Xy = 3 To 0 Step -1 Call S65_print(120 , 15 , Cyan , Schwarz , "Start Oszi press any Key") Waitms 500 Call S65_print(100 , 40 , Cyan , Schwarz , "Start in: ") Tmp = Str(xy) Call S65_print(100 , 100 , Cyan , Schwarz , Tmp) Call S65_print(120 , 15 , Rot , Schwarz , "Start Oszi press any Key") Waitms 500 Next Xy Call S65_cls(schwarz) 'timebase für DIV/T 1..6 Timeb = 1 Do 'Call S65_line(20 , 20 , 80 , 170 , Cyan) Call S65_line(20 , 20 , 120 , 20 , Cyan) For Xy = 20 To 175 Call S65_pset(20 , Xy , Cyan) Next Start Adc For Zm = 1 To 660 V(zm) = Getadc(0) 'kanal 0 zur Messung Next Stop Adc For Zm = 2 To 175 If Kup = 0 Then Waitms 100 Timeb = Timeb + 1 If Timeb > 7 Then Timeb = 1 Tmp = Str(timeb) Tmp = "D/T: " + Tmp Call S65_print(120 , 20 , Weiss , Rot , Tmp) End If If Timeb > 7 Then Timeb = 1 Fam = Zm * Timeb U = V(fam) Umess = U * N Umess = Umess / Aref Umess = Umess * 100 Eam = Int(umess) Umess = U * N Y2m = Eam + 21 X2m = Zm + 20 If Y2m > 175 Then Y2m = 175 'Call S65_print(120 , 20 , Weiss , Rot , "DIV/T: 100µs ") 'Locate 14 , 10 'Lcd " D/T:" ; Menu_b(timeb) D1m = X1m 'Line(d , 0 ) -(d , 99) , 0 'Line(x1 , Y1) -(x2 , Y2) , 255 'löschen des Graphen For Xy = 21 To 132 Call S65_pset(xy , D1m , Schwarz) Next 'Call S65_line(y1m , X1m , Y2m , X2m , Weiss) Call S65_pset(y1m , X1m , Weiss) X1m = X2m Y1m = Y2m 'Tmp = Fusing(umess , "#.##") 'Tmp = "V=" + Tmp 'Call S65_print(120 , 130 , Weiss , Schwarz , Tmp) Next Tmp = Fusing(umess , "#.##") Tmp = "V=" + Tmp Call S65_print(120 , 130 , Weiss , Schwarz , Tmp) Loop Powerdown End '################################################################ ' LCD - commando , Parameter übergabe zum Display '################################################################ 16: Cs = 0 Shiftout Dat , Clk , A1 , A1 Cs = 1 Return '################################## 'Start der S65-Ansteuerung '################################## Sub S65_init() Anfang: Res = 1 Waitms 10 Res = 0 'Reset Cs = 1 Clk = 1 Dat = 1 Rs = 1 Waitms 1 Res = 1 'Reset Ende Waitms 10 Cs = 1 'CS select, Start Waitms 1 Rs = 1 'RS high, Command '#################################### ' Displayinitialisierung '#################################### Restore Init1 For R1 = 1 To 12 Read A1 Gosub 16 Next Waitms 7 'diese Zeit ist sehr wichtig, sollte keinesfalls unterschritten werden Restore Init2 For R1 = 1 To 23 Read A1 Gosub 16 Next End Sub '################################## '# LCD Löschen # '################################## Sub S65_cls(byval Bcol As Word) Local Aa As Word Rs = 1 A1 = &HEF90 Gosub 16 A1 = &H0500 Gosub 16 A1 = &H0600 Gosub 16 A1 = &H0700 Gosub 16 Platz = 132 * 176 Rs = 0 For W1 = 0 To Platz A1 = Bcol Gosub 16 Next W1 Rs = 1 End Sub '###################################################### '# Setze Pixel -> Pset # '###################################################### Sub S65_pset(lx As Byte , Ly As Byte , Color As Word) Rs = 1 A1 = &H600 + Lx Gosub 16 A1 = &H700 + Ly Gosub 16 Rs = 0 Cs = 0 Shiftout Dat , Clk , Color , 0 Cs = 1 End Sub '###################################################### '# Line zeichnen # '###################################################### Sub S65_line(byval Lx1 As Byte , Byval Ly1 As Byte , Byval Lx2 As Byte , Byval Ly2 As Byte , Byval Color As Word) Local M As Byte , M1 As Single , M2 As Single Local Yg As Byte , Cv As Single , Bn As Integer Local R As Byte , B As Byte M1 = Ly2 - Ly1 M2 = Lx2 - Lx1 Cv = M1 / M2 Bn = Int(cv) M = Low(bn) B = M * Lx1 B = -1 * B 'If Ly1 = Ly2 Then B = 0 'If Lx1 = Lx2 Then B = 0 B = B + Ly1 For R = Lx1 To Lx2 Yg = M * R Yg = Yg + B Call S65_pset(r , Yg , Color) Next R End Sub '##################################################### '# ACSII Zeichenausgabe # '##################################################### Sub S65_zeichen(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String * 1) Local R As Integer Local A As Byte Local B As Byte Local C As Long Local D As Byte Local E As Byte Local F As Byte Local G As Long Local Xpos As Byte Local Ypos As Byte Local Zeichen As String * 1 Print "S65_zeichen(" ; Lx ; "," ; Ly ; "," ; Bcol ; "," ; Fcol ; "," ; Lcd_text ; ")" Xpos = 0 Ypos = 0 'For R = 1 To Len(lcd_text) ' Zeichen = Mid(lcd_text , R , 1) 'Hole char G = Asc(lcd_text) 'Print "S65_Zeichen:" ; Lcd_text 'Print "ASCII:" ; G 'Bestimme Pos in Tabelle G = G - 32 G = G * 6 Readeeprom B , G 'Call Lcd_locate(lcd_posx , Lcd_posy) A = 8 '1.linie frei 'If Lcd_doublesize = 1 Then A = 16 'If Lcd_doublesize = 2 Then A = 32 For F = 1 To 6 C = 1 D = B 'Byte darf nicht verändert werden für 2. durchlauf For E = 1 To 8 Xpos = Lx + E Xpos = 132 - Xpos Ypos = Ly + F 'Ypos = 176 - ypos A = D And 1 If A = 1 Then Call S65_pset(xpos , Ypos , Fcol) If A = 0 Then Call S65_pset(xpos , Ypos , Bcol) Shift D , Right , 1 Next Decr C G = G + 1 Readeeprom B , G Next 'Ypos = Ypos + 6 'Next End Sub '#################################################################### ' S65_print(x,y,bcol,fcol) -> Zeichenketten auf LCD ausdrucken '#################################################################### Sub S65_print(byval Lx As Byte , Byval Ly As Byte , Byval Bcol As Word , Byval Fcol As Word , Byval Lcd_text As String) Local Xpos As Byte Local Ypos As Byte Local Zaehler As Byte Local Laenge As Byte Local Zeichen As String * 1 Laenge = Len(lcd_text) For Zaehler = 1 To Laenge Zeichen = Mid(lcd_text , Zaehler , 1) Call S65_zeichen(lx , Ly , Bcol , Fcol , Zeichen) Ly = Ly + 6 Next Zaehler End Sub '------------------------------------------------------------------- Ende Subs zum Definieren von Fenstern Init1: Data &HFDFD% , &HFDFD%, Data &HEF00%, Data &HEE04% , &H1B04%, Data &HFEFE% , &HFEFE%, Data &HEF90% , &H4A04% , &H7F3F% , &HEE04% , &H4306% Init2: Data &HEF90% , &H0983% , &H0800% , &H0BAF% , &H0A00% , &H0500% , &H0600% , &H0700%, Data &HEF00%, Data &HEE0C%, Data &HEF90% , &H0080%, Data &HEFB0% , &H4902%, Data &HEF00%, Data &H7F01% , &HE181%, Data &HE202%, Data &HE276%, Data &HE183%, Data &H8001%, Data &HEF90%, Data &H0000% $eeprom Data &H00 , &H00 , &H00 , &H00 , &H00 , &H00 ' "(space)" Data &H00 , &H06 , &H5F , &H06 , &H00 , &H00 ' "!" Data &H07 , &H03 , &H00 , &H07 , &H03 , &H00 ' """ Data &H24 , &H7E , &H24 , &H7E , &H24 , &H00 ' "#" Data &H24 , &H2B , &H6A , &H12 , &H00 , &H00 ' "$" Data &H63 , &H13 , &H08 , &H64 , &H63 , &H00 ' "%" Data &H36 , &H49 , &H56 , &H20 , &H50 , &H00 ' "&" Data &H00 , &H07 , &H03 , &H00 , &H00 , &H00 ' "'" '40 Data &H00 , &H3E , &H41 , &H00 , &H00 , &H00 ' "(" Data &H00 , &H41 , &H3E , &H00 , &H00 , &H00 ' ")" Data &H08 , &H3E , &H1C , &H3E , &H08 , &H00 ' "*" Data &H08 , &H08 , &H3E , &H08 , &H08 , &H00 ' "+" Data &H00 , &HE0 , &H60 , &H00 , &H00 , &H00 ' "," Data &H08 , &H08 , &H08 , &H08 , &H08 , &H00 ' "-" Data &H00 , &H60 , &H60 , &H00 , &H00 , &H00 ' "." Data &H20 , &H10 , &H08 , &H04 , &H02 , &H00 ' "/" Data &H3E , &H51 , &H49 , &H45 , &H3E , &H00 ' "0" Data &H00 , &H42 , &H7F , &H40 , &H00 , &H00 ' "1" '50 Data &H62 , &H51 , &H49 , &H49 , &H46 , &H00 ' "2" Data &H22 , &H49 , &H49 , &H49 , &H36 , &H00 ' "3" Data &H18 , &H14 , &H12 , &H7F , &H10 , &H00 ' "4" Data &H2F , &H49 , &H49 , &H49 , &H31 , &H00 ' "5" Data &H3C , &H4A , &H49 , &H49 , &H30 , &H00 ' "6" Data &H01 , &H71 , &H09 , &H05 , &H03 , &H00 ' "7" Data &H36 , &H49 , &H49 , &H49 , &H36 , &H00 ' "8" Data &H06 , &H49 , &H49 , &H29 , &H1E , &H00 ' "9" Data &H00 , &H6C , &H6C , &H00 , &H00 , &H00 ' ":" Data &H00 , &HEC , &H6C , &H00 , &H00 , &H00 ' ";" '60 Data &H08 , &H14 , &H22 , &H41 , &H00 , &H00 ' "<" Data &H24 , &H24 , &H24 , &H24 , &H24 , &H00 ' "=" Data &H00 , &H41 , &H22 , &H14 , &H08 , &H00 ' ">" Data &H02 , &H01 , &H59 , &H09 , &H06 , &H00 ' "?" Data &H3E , &H41 , &H5D , &H55 , &H1E , &H00 ' "@" Data &H7E , &H09 , &H09 , &H09 , &H7E , &H00 ' "A" Data &H7F , &H49 , &H49 , &H49 , &H36 , &H00 ' "B" Data &H3E , &H41 , &H41 , &H41 , &H22 , &H00 ' "C" Data &H7F , &H41 , &H41 , &H41 , &H3E , &H00 ' "D" Data &H7F , &H49 , &H49 , &H49 , &H41 , &H00 ' "E" '70 Data &H7F , &H09 , &H09 , &H09 , &H01 , &H00 ' "F" Data &H3E , &H41 , &H49 , &H49 , &H7A , &H00 ' "G" Data &H7F , &H08 , &H08 , &H08 , &H7F , &H00 ' "H" Data &H00 , &H41 , &H7F , &H41 , &H00 , &H00 ' "I" Data &H30 , &H40 , &H40 , &H40 , &H3F , &H00 ' "J" Data &H7F , &H08 , &H14 , &H22 , &H41 , &H00 ' "K" Data &H7F , &H40 , &H40 , &H40 , &H40 , &H00 ' "L" Data &H7F , &H02 , &H04 , &H02 , &H7F , &H00 ' "M" Data &H7F , &H02 , &H04 , &H08 , &H7F , &H00 ' "N" Data &H3E , &H41 , &H41 , &H41 , &H3E , &H00 ' "O" Data &H7F , &H09 , &H09 , &H09 , &H06 , &H00 ' "P" '80 Data &H3E , &H41 , &H51 , &H21 , &H5E , &H00 ' "Q" Data &H7F , &H09 , &H09 , &H19 , &H66 , &H00 ' "R" Data &H26 , &H49 , &H49 , &H49 , &H32 , &H00 ' "S" Data &H01 , &H01 , &H7F , &H01 , &H01 , &H00 ' "T" Data &H3F , &H40 , &H40 , &H40 , &H3F , &H00 ' "U" Data &H1F , &H20 , &H40 , &H20 , &H1F , &H00 ' "V" Data &H3F , &H40 , &H3C , &H40 , &H3F , &H00 ' "W" Data &H63 , &H14 , &H08 , &H14 , &H63 , &H00 ' "X" Data &H07 , &H08 , &H70 , &H08 , &H07 , &H00 ' "Y" Data &H71 , &H49 , &H45 , &H43 , &H00 , &H00 ' "Z" Data &H00 , &H7F , &H41 , &H41 , &H00 , &H00 ' "[" '90 Data &H02 , &H04 , &H08 , &H10 , &H20 , &H00 ' "\" Data &H00 , &H41 , &H41 , &H7F , &H00 , &H00 ' "]" Data &H04 , &H02 , &H01 , &H02 , &H04 , &H00 ' "^" Data &H80 , &H80 , &H80 , &H80 , &H80 , &H00 ' "_" ' "`" Data &H0C , &H12 , &H12 , &H0C , &H00 , &H00 ' neu "°" statt "`" 'Data &H00 , &H03 , &H07 , &H00 , &H00 , &H00 Data &H20 , &H54 , &H54 , &H54 , &H78 , &H00 ' "a" Data &H7F , &H44 , &H44 , &H44 , &H38 , &H00 ' "b" Data &H38 , &H44 , &H44 , &H44 , &H28 , &H00 ' "c" Data &H38 , &H44 , &H44 , &H44 , &H7F , &H00 ' "d" Data &H38 , &H54 , &H54 , &H54 , &H18 , &H00 ' "e" Data &H08 , &H7E , &H09 , &H09 , &H00 , &H00 ' "f" '100 Data &H18 , &HA4 , &HA4 , &HA4 , &H7C , &H00 ' "g" Data &H7F , &H04 , &H04 , &H78 , &H00 , &H00 ' "h" Data &H00 , &H00 , &H7D , &H00 , &H00 , &H00 ' "i" Data &H40 , &H80 , &H84 , &H7D , &H00 , &H00 ' "j" Data &H7F , &H10 , &H28 , &H44 , &H00 , &H00 ' "k" Data &H00 , &H00 , &H7F , &H40 , &H00 , &H00 ' "l" Data &H7C , &H04 , &H18 , &H04 , &H78 , &H00 ' "m" Data &H7C , &H04 , &H04 , &H78 , &H00 , &H00 ' "n" Data &H38 , &H44 , &H44 , &H44 , &H38 , &H00 ' "o" Data &HFC , &H44 , &H44 , &H44 , &H38 , &H00 ' "p" Data &H38 , &H44 , &H44 , &H44 , &HFC , &H00 ' "q" '110 Data &H44 , &H78 , &H44 , &H04 , &H08 , &H00 ' "r" Data &H08 , &H54 , &H54 , &H54 , &H20 , &H00 ' "s" Data &H04 , &H3E , &H44 , &H24 , &H00 , &H00 ' "t" Data &H3C , &H40 , &H20 , &H7C , &H00 , &H00 ' "u" Data &H1C , &H20 , &H40 , &H20 , &H1C , &H00 ' "v" Data &H3C , &H60 , &H30 , &H60 , &H3C , &H00 ' "w" Data &H6C , &H10 , &H10 , &H6C , &H00 , &H00 ' "x" Data &H9C , &HA0 , &H60 , &H3C , &H00 , &H00 ' "y" Data &H64 , &H54 , &H54 , &H4C , &H00 , &H00 ' "z" Data &H08 , &H3E , &H41 , &H41 , &H00 , &H00 ' "{" '120 Data &H00 , &H00 , &H7F , &H00 , &H00 , &H00 ' "|" Data &H00 , &H41 , &H41 , &H3E , &H08 , &H00 ' "}" Data &H02 , &H01 , &H02 , &H01 , &H00 , &H00 ' "~" Data &H3F , &H21 , &H21 , &H21 , &H21 , &H00 ' "[" Data &H21 , &H21 , &H21 , &H21 , &H21 , &H00 Data &H21 , &H21 , &H21 , &H21 . &H3F , &H00 ' "]" Data &H3F , &H3F , &H3F , &H3F , &H3F , &H00 Data &H3F , &H00 , &H00 , &H00 , &H00 , &H00 $data