-
Hallo RCO,
hmmm, ich weiss nicht, womit heutzutage Conrad seine C-Controls ausliefert, bei mir waren sie dabei :)
Online stellen werd ich sie nicht, ich geb dir aber den Link darauf:
http://www.c-control.de/downloads/appboard.zip
Gruss, Michael
Edit am 21.07.2009:
Die C-Control-Software findet man mittlerweile unter:
http://www1.conrad.de/information/do..._ccontrol.html
-
Danke Michael, ist genau was ich gesucht habe.
Das Ding ist, ich habe ja kein Application-Board, von daher auch keine Software, nur das Display und nen Starterboard.
Eigentlich hatte ich auch auf C-control.de gesucht, aber es wohl nicht gefunden.
Danke nochmal
-
Hy!
Also es funtzt jetzt. Ich habe mit Matthias zusammen eine Art "Engine" programmiert für die CControl/Basic. Bei gelegenheit werde ich sie mal posten.
mfg,
CapSob.
-
Code:
'---------- Variblen Deklaration ----------
define lcd_out byteport[2] '9=D4 10=D5 11=D6 12=D7
define rs port[13]
define enable port[14]
'rw auf Masse
define buffer byte
define zeichen byte 'Zu uebertragendes Zeichen
'---------- Hauptprogramm ----------
gosub lcd_init 'LCD Initialisierungs-Routine
zeichen = 1
gosub lcd_line 'Start in Zeile 1
zeichen = 82
gosub lcd_write 'R
zeichen = 101
gosub lcd_write 'e
zeichen = 110
gosub lcd_write 'n
zeichen = 101
gosub lcd_write 'e
goto ende
'---------- LCD Funktionen ----------
#lcd_init
lcd_out=off
zeichen=&h38:gosub lcd_command
lcd_out=&b00000010
tog enable
tog enable
zeichen=&h28:gosub lcd_command
zeichen=&h0c:gosub lcd_command
#lcd_cls
zeichen=&h02:gosub lcd_command
zeichen=&h02:gosub lcd_command
return
#lcd_write
buffer = &b00010000
goto lcd_send
#lcd_line
if zeichen = 1 then zeichen = &h80
if zeichen = 2 then zeichen = &hC0
#lcd_command
buffer = off
#lcd_send
lcd_out = buffer or (zeichen shr 4)
tog enable
tog enable
lcd_out = buffer or (zeichen and &h0f)
tog enable
tog enable
return
#ende
end
Ich glaube so war's, oder?
-
Jein, ich hab nen Quelltext gefunden, der deinem ziemlich ähnlich ist, allerdings verstehe ich nciht, warum rw auf Masse gezogen wird, denn wenn ich das bei dem Display mache, kommt nur Müll auf dem Display an.
Oder vielleicht hab ich auch ne falsche Dokumentation vom Display, dass finde ich noch raus...
Mit der Beispieldatei läuft es auf jeden Fall wunderbar.
-
Sorry, war nicht inegloggt, aber kann mir das jemand sagen?
Warum ist rw auf Masse, beim C-control-Display passiert nix wenn man es auf Masse zieht, ebenfalls nix, wenn man high setzt.
CCplus steuert den irgendwie an, also wenn man ne LEd dranhängt blingt die beim Übertragen.
-
Ist das was MAtthias da geschhrieben hat eure Engine?
Ach ja, könnte einer von euch mir diese Beiden Zeilen erklären, also nicht was sie machen, sondern, welcher Befehl was bedeutet, und bewirkt.
lcd_out = buffer or (zeichen shr 4)
lcd_out = buffer or (zeichen and &h0f)
Danke
-
Ein Beispielprgramm das ich kurz aus einem meiner programme zusammengeschnitten hab als Demo mit den wichtigsten Funktionen zur LCD-Ausgabe. Es wird ein Text ausgegeben auf das Display welcher in einer Tabelle ist am Ende und danach in Wert angezeigt (8-Bit).
Code:
'----------------------------------------------------------------------------
' Texte und Werte ausgeben
'----------------------------------------------------------------------------
'I/O-Ports definieren
'--------------------
Define LCDPort BytePort[2] 'LC-Display Port
Define D4 Port[9] 'LCD D4 4-Bit (D0 / D4)
Define D5 Port[10] 'LCD D5 4-Bit (D1 / D5)
Define D6 Port[11] 'LCD D6 4-Bit (D2 / D6)
Define D7 Port[12] 'LCD D7 4-Bit (D3 / D7)
Define RW Port[13] 'LCD RW 0=Schreiben / 1=Lesen
Define RS Port[14] 'LCD RS 0=Befehl / 1=ASCII
Define EN Port[15] 'LCD E Datenübernahme (neg. Flanke)
'Variablen definieren
'--------------------
Define TempWort Word[9] 'Universelles Temp-Wort (16-Bit) für Berechnungen
Define TempByte Byte[19] 'Universelles Temp-Byte (8-Bit) für Berechnungen
Define VarLcdData Byte[20] 'Datenbyte an/vom LC-Display
Define LcdBuf Byte[21] 'LCD-Buffer
Define LcdParam Byte[22] 'Übergabewert an LC-Display.
Define VarTextNr Byte[23] 'Text-Ausgabe (Nr.)
Define kk Byte[24] 'Zählvariable
'Assembler-Einsprungpunkte definieren
'------------------------------------
Define LcdCmd &H0101 'Sys: Kommando an LCD senden
Define LcdChar &H0107 'Sys: Zeichen an LCD senden
Define LcdPulse &H0120 'Sys: Impuls an Enable ausgeben
'Konstanten definieren
'---------------------
Define LcdClear &B00000001
Define LcdCursorHome &B00000010
Define LcdDisplayEin &B00001100
Define LcdDisplayAus &B00001000
Define LcdCursorEin &B00001110
Define LcdCursorAus &B00001100
Define Z1S1 &H80 'Zeile 1 Spalte 1
Define Z1S2 &H81 'Zeile 1 Spalte 2
Define Z1S3 &H82 '...
Define Z1S4 &H83
Define Z1S5 &H84
Define Z1S6 &H85
Define Z1S7 &H86
Define Z1S8 &H87
Define Z1S9 &H88
Define Z1S10 &H89
Define Z1S11 &H8A
Define Z1S12 &H8B
Define Z1S13 &H8C
Define Z1S14 &H8D
Define Z1S15 &H8E
Define Z1S16 &H8F
Define Z2S1 &HC0 'Zeile 2 Spalte 1
Define Z2S2 &HC1 'Zeile 2 Spalte 2
Define Z2S3 &HC2 '...
Define Z2S4 &HC3
Define Z2S5 &HC4
Define Z2S6 &HC5
Define Z2S7 &HC6
Define Z2S8 &HC7
Define Z2S9 &HC8
Define Z2S10 &HC9
Define Z2S11 &HCA
Define Z2S12 &HCB
Define Z2S13 &HCC
Define Z2S14 &HCD
Define Z2S15 &HCE
Define Z2S16 &HCF
Define EOT &H00 'Text Ende-Kennung
Define Schreiben Off
Define Lesen On
Define CommandMode Off
Define AsciiMode On
Define Lo Off
Define Hi On
Define Enabled Off
Define Diabled On
Define Down Off
Define Up On
'ASCII-Codes definieren
'----------------------
Define xA_ &H41 ' A
Define xB_ &H42 ' B
Define xC_ &H43 ' C
Define xD_ &H44 ' D
Define xE_ &H45 ' E
Define xF_ &H46 ' F
Define xG_ &H47 ' G
Define xH_ &H48 ' H
Define xI_ &H49 ' I
Define xJ_ &H4A ' J
Define xK_ &H4B ' K
Define xL_ &H4C ' L
Define xM_ &H4D ' M
Define xN_ &H4E ' N
Define xO_ &H4F ' O
Define xP_ &H50 ' P
Define xQ_ &H51 ' Q
Define xR_ &H52 ' R
Define xS_ &H53 ' S
Define xT_ &H54 ' T
Define xU_ &H55 ' U
Define xV_ &H56 ' V
Define xW_ &H57 ' W
Define xX_ &H58 ' X
Define xY_ &H59 ' Y
Define xZ_ &H5A ' Z
Define x_a &H61 ' a
Define x_b &H62 ' b
Define x_c &H63 ' c
Define x_d &H64 ' d
Define x_e &H65 ' e
Define x_f &H66 ' f
Define x_g &H67 ' g
Define x_h &H68 ' h
Define x_i &H69 ' i
Define x_j &H6A ' j
Define x_k &H6B ' k
Define x_l &H6C ' l
Define x_m &H6D ' m
Define x_n &H6E ' n
Define x_o &H6F ' o
Define x_p &H70 ' p
Define x_q &H71 ' q
Define x_r &H72 ' r
Define x_s &H73 ' s
Define x_t &H74 ' t
Define x_u &H75 ' u
Define x_v &H76 ' v
Define x_w &H77 ' w
Define x_x &H78 ' x
Define x_y &H79 ' y
Define x_z &H7A ' z
Define xae &HE1 ' ä
Define xoe &HEF ' ö
Define xue &HF5 ' ü
Define x_0 &H30 ' 0
Define x_1 &H31 ' 1
Define x_2 &H32 ' 2
Define x_3 &H33 ' 3
Define x_4 &H34 ' 4
Define x_5 &H35 ' 5
Define x_6 &H36 ' 6
Define x_7 &H37 ' 7
Define x_8 &H38 ' 8
Define x_9 &H39 ' 9
Define x__ &H20 ' Leerzeichen
Define xPz &H25 ' %
Define xSt &H2A ' *
Define xPl &H2B ' +
Define xKo &H2C ' ,
Define xMi &H2D ' -
Define xDt &H2E ' .
Define xDP &H3A ' :
Define xGl &H3D ' =
Define ESC 27 ' ESC-Zeichen
Define Tab 9 ' Tabulator
'Textbeschreibungen
'------------------
Define TxtVersion1 0 'Hochlauf-Text (nach dem Einschalten)
Define TxtVersion2 13
'Initialisierung des Steuergeräts:
'---------------------------------
' Nach einem Reset oder nach dem Einschalten wird diese Routine durchlaufen. Dabei
' wird das digitale Potentiometer und das LC-Display initialisiert.
' Danach wird für drei Sekunden eine Hochlaufmeldung des Steuergeräts angezeigt.
#Programm
GoSub LCDReset 'Das LC-Display initialisieren im 4-Bit Modus
Sys LcdCmd LcdClear
Pause 1
'Text-String ausgeben (aus der Tabelle)
VarTextNr = TxtVersion1
Sys LcdCmd Z1S1
GoSub LCDWriteText
VarTextNr = TxtVersion2
Sys LcdCmd Z2S1
GoSub LCDWriteText
Pause 80
Sys LcdCmd LcdClear
'Wert ausgeben
TempByte = 20
Sys LcdCmd Z2S11
GoSub LCDWriteCount8Bit
End
' Routinen für das LC-Display (2x16 Zeichen):
' -------------------------------------------
' Das LC-Display wird beim Initialisieren auf 4-Bit Modus umgestellt und arbeitet
' danach nur noch auf den Datenleitungen D4 bis D7. Dabei werden bei jedem
' Kommando zuerst das niederwertigere Nibble und danach das höherwertige Nibble
' übertragen. Es stehen Einzelzeichen und komfortable Textausgaben zur Verfügung,
' welche den Umgang mit dem Display vereinfachen. Desweiteren kann auch vom
' Display gelesen werden.
#LCDReset
'Das LC-Display initialisieren und den Display-Inhalt löschen
'LC-Display initialisieren im 4-Bit Modus
LcdPort = &H80 'Alle Ports auf Low setzen
Sys LcdCmd &H38 '8-Bit-Modus aktivieren
LcdPort = &H82 'Mit 8-Bit Kommando in 4-Bit-Modus umschalten
Sys LcdPulse
Sys LcdCmd &H28 'Ab jetzt 4-Bit-Modus
Sys LcdCmd &H0C
#LCDClearZeile1
'Erste Zeile im LC-Display löschen
Sys LcdCmd Z1S1
GoTo LCDClearZeile
#LCDClearZeile2
'Zweite Zeile im LC-Display löschen
Sys LcdCmd Z2S1
#LCDClearZeile
'Ausgewählte Zeile im LC-Display löschen
For kk = 1 to 16
Sys LcdChar &H20
Next kk
Return
#LCDWriteCount8Bit
'8-Bit Integer an Display ausgeben
kk = TempByte / 100
If TempByte > 99 Then Sys LcdChar &H30 + kk
kk = (TempByte - (kk * 100)) / 10
If TempByte > 9 Then Sys LcdChar &H30 + kk
kk = TempByte MOD 10
Sys LcdChar &H30 + kk
Return
#LCDRead
'Daten von LC-Display lesen als zwei 4-Byte Blöcke (zuerst Higher, dann Lower)
Deact D4
Deact D5
Deact D6
Deact D7
RW = Lesen
Sys LcdPulse
VarLcdData = &H0F And (LCDPort ShL 4)
Sys LcdPulse
VarLcdData = VarLcdData Or (LCDPort And &H0F)
RW = Schreiben
Return
#LCDWriteText
LookTab TabTexte, VarTextNr, VarLcdData
If VarLcdData = EOT Then Return
Sys LcdChar VarLcdData
VarTextNr = VarTextNr + 1
GoTo LCDWriteText
'Texte für das LC-Display:
'-------------------------
' Zeichenfolgen welche als gesamtes ausgegeben werden. Es ist immer eine Einsprung-
' Adresse vorhanden, ab der die Zeichenfolge steht. Am Ende folgt ein ASCII-Code 0
' der das Ende der Textausgabe anzeigt, damit die Ausgabe beendet wird und der nach-
' folgende Text nicht ebenfalls ausgfegeben wird.
'
' Tabellenstruktur: ASCII-Zeichen 1, ASCII-Zeichen 2, ... Ende-Kennung (EOT)
Table TabTexte
xV_ x_e x_r x_s x_i x_o x_n xDP x__ x_1 xDt x_0 EOT '0 - Version 1.0
xW_ x_o x_l x_f x_g x_a x_n x_g x__ xS_ x_c x_h x_m x_i x_d EOT '13 - Wolfgang Schmid
TabEnd
SysCode "LCD.S19"
Die zugehörige LCD.S19 Datei mit dem Assemblerprogramm von mit das die LCD-Routinen enthält:
Code:
S11B0101A680B7B52004A6A0B7B5B69244444444CD011CB692A40FCD70
S11B0119011C81BAB5B7021C021D02811D01B692B1B727F723093CB73B
S11801311801CD014120ED3AB71901CD014120E41A011B0181AA
S9030000FC
Viel Spass damit.
Grüsse Woflgang[/code]
-
Mal kurz zwischendurch, nicht ganz zum Thema, aber wie stelle ich folgendes an?
Ich will eine if-Bedingung, und bei then sollen dann mehrer anweisungen folgen.
Folgendes funktioniert nicht:
if a then d : b : c
if a then (d : b : c)
if a tehn (d b c)
-
Hallo RCO!
Das geht mit der IDE auch nicht zu programmieren. Man kann nur direkt eine Aktion nach THEN schreiben. Du kannst nur eine Sprungmarke verwenden die bei Nichterfüllung über die auszuführenden Aktionen hinwegspringt.
Code:
...
If Not(Wert1 = Wert2) Then GoTo M001
Aktion 1
Aktion 2
Aktion 3
#M001
...
Jetzt würde bei Wert1 = Wert2 nicht gesprungen werden und die Aktionen 1 bis 3 ausgeführt werden. Ansonsten bei Wert1 <> Wert2 springt das Programm einfach darüber hinweg.
Grüsse Woflgang