Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Temperatur-Sensor 1 mit AD592 Kategorie: Programmierung Basic (von Kay - 19.05.2005 16:19)
 Als Antwort auf Temperatur-Sensor 1 mit AD592 von Andreas - 19.05.2005 14:59
Kay nutzt:  CC1-Unit V1.1
> Oder wenn ich nur den AD592 habe und baue eine Schaltung so auf wie
> in dem Handbuch der Main Unit I beschrieben. Ist diese Schaltung
> ungenauer wie der fertige Temperatur-Sensor 1 mit AD592 den es zu kaufen
> gab?

auf c-control.de findest du
die schaltpläne undter anderem auch der station. bau dir doch das ding nach.
ungenau is das nicht, weil linear.

> ----------------------------------------------------------------------------------------------------------
> Und wie kann ich programmtechnisch die Temperatur eines Sensors permanent
> an dem LC-Display des Applicationboard darstellen lassen.
> Brauche ich dazu ein ASM-Programm oder geht das ganz in CCBasic?
> Über ein bisschen Programmcode würde ich mich freuen ;-)

nein - das geht  auch gänzlich ohne ASM.
nötig ist ein bisschen "treiber" und eine routine zum zerlegen des kompletten wertes
in seine einzelstellen, weil du zeichen nur byteweise an das display senden kannst.
ein programm, welches beispielsweise ein paar A/D-wandlerwerte und eine textmaske
aufs display (4x20) schmiert,  füge ich an. reinfinden musst du dich da bitte selber.

der "treiber" ist je nach bedarf in der lage, führende nullen auszugeben oder nicht,
kann auch negative zahlen darstellen und die kommaposition kann angegeben werden.
als besondere qual ist eine ausgabe von zeichenketten in telegrafie eingebastelt.
wenn man daten statt an die LCD-ausgabe an CW_OUT sendet, bekommt man den salat
auch phonetisch mit, ohne aufs display zu schauen.
viel spaß mit dem krempel, ich hoffe du findest dich rein.



' LCD-Treiber in CCBASIC mit LOCATE, CLS und Sonderzeichen
' letztes Update 11.01.2005 (fuer NAN-YA 4x20)

' *** WORD-VARIABLEN FUER ANWENDERPROGRAMM ***
define i           word 'Schleifenzaehler und Rechen-Puffer
define realtemp    word 'zum Auslesen der Temperaturtabelle

define int_out     word 'Uebergabe-Variable fuer Integer-Ausgabe
define maxstellen  byte 'deklariert max. Anzahl Dezmalstellen
                           'IMMER EINEN WERT WENIGER ANGEBEN!!!

' *** BYTE-VARIABLEN FUER LCD-TREIBER ***
define lcd_buf     byte 'Puffer fuer Datentranfer zum Display
define lcd_dat     byte 'zu sendenden Daten-Bytes
                            'lcd_dat auch für LOCATE-Funktion im Format xxy
                            '(10er+100er für spalte und 1er fuer Zeile
                            'beginnend bei 0)
                            'Verwendung wie oben beschrieben
define j           byte 'Laufvariable

define cw_tonelenght byte

define komma_flag  bit[104] 'soll die Integerausgabe ein Komma enthalten?
define null_flag   bit[105] 'sollen führende Nullen angezeigt werden?

' *** Port-Varialen fuer Anwenderprogramm
define tempin      ad[5]
define u25vin      ad[6]
define u10vin      ad[7]

' *** Port-Variablen LCD-Treiber ***
define lcd_port    byteport[2] 'LCD-Interface-Port - gesamt
define lcd_rs      port[14]    'Befehls-Leitung - fuer Cmd's auf 1
define lcd_e       port[15]    'Execute-Leitung - H-L-Pulse

' *** KONSTANTEN
define cw_speed        3       'Multiplikator für CW-Tonlaenge
define cw_toneheight 310       'Tonhoehe für CW-Ausgabe ( 250000 / X )

' ***   DISPLAY - POWER_ON_INITIALISIERUNG   ***
lcd_port = &B01000000                  'EXE-Leitung HI setzen
lcd_dat  = &B00110000 : gosub SEND_COM 'FUNC-Set (noch 8-Bit)
lcd_port = &B01000010 : pulse lcd_e    'FUNC-Set: ab jetzt 4-Bit
lcd_dat  = &B00101000 : gosub SEND_COM 'N=1 (2zeilg. Disp.) F=0 (5x7 Font)
lcd_dat  = &B00001100 : gosub SEND_COM 'Disp an, Cursor aus, Blinken aus
lcd_dat  = &B00000110 : gosub SEND_COM 'Adresspointer increm., Kein Shift
'Sonderzeichen in den CG-RAM exportieren
for i = 0 to 56 step 8
   lcd_dat = 64 + i : gosub SEND_COM
   for j = i to i + 7
      looktab CG_CODES,j,lcd_dat
      gosub SEND_CHAR
   next
next
 
gosub CLS

 
'--------- anwenderprogramm (hier: testausgabe-schleife)
'Textmaske ausgeben
lcd_dat = 12 : gosub LOCATE
for j = 5 to 8
   looktab PRINTS,j,lcd_dat
   gosub SEND_CHAR
next
lcd_dat = 122 : gosub LOCATE
for j = 9 to 12
   looktab PRINTS,j,lcd_dat
   gosub SEND_CHAR
next
lcd_dat = 13 :gosub LOCATE
for j = 0 to 4
   looktab PRINTS,j,lcd_dat
   gosub SEND_CHAR
next

#MAIN
   j = second
   wait j <> second
   gosub PRINT_TIME
   lcd_dat =  52 : gosub LOCATE : gosub PRINT_10V
   lcd_dat = 162 : gosub LOCATE : gosub PRINT_25V
   lcd_dat =  73 : gosub LOCATE : gosub PRINT_TEMP
goto MAIN

#PRINT_TIME 'Zeitausgabe vollformatig auf LC-Display
   maxstellen = 1 : komma_flag = 0 : null_flag = -1
   lcd_dat = 0 : gosub LOCATE
   for j = 0 + 2 * dow to 2 * dow + 1
      looktab DOWS,j,lcd_dat
      gosub SEND_CHAR
   next
   lcd_dat = 44 : gosub SEND_CHAR
   null_flag = 0
   int_out = day : gosub INT_OUT
   lcd_dat = 46 : gosub SEND_CHAR
   int_out = month : gosub INT_OUT
   lcd_dat = 46 : gosub SEND_CHAR
   null_flag = -1
   int_out = year : gosub INT_OUT
   lcd_dat = 44 : gosub SEND_CHAR
   null_flag = 0
   int_out = hour : gosub INT_OUT
   lcd_dat = 58 : gosub SEND_CHAR
   null_flag = -1
   int_out = minute : gosub INT_OUT
   lcd_dat = 58 : gosub SEND_CHAR
   int_out = second : gosub INT_OUT
return

#PRINT_TEMP 'Temperatur auf LC-Display geben
   looktab KTYTAB,tempin,realtemp
   if realtemp < 0 then lcd_dat = 45 else lcd_dat = 32 : gosub SEND_CHAR
   int_out = abs(realtemp)
   maxstellen = 3 : komma_flag = -1 : null_flag = 0
   gosub INT_OUT
return

#PRINT_10V ' AD[6]-Wert ausgeben
   maxstellen = 2 : komma_flag = -1 : null_flag = 0
   int_out = u10vin / 2 + 2 * u10vin / 100
   gosub INT_OUT
return

#PRINT_25V ' AD[7]-Wert ausgeben
   maxstellen = 2 : komma_flag = -1 : null_flag = 0
   int_out = u25vin
   gosub INT_OUT
return

#INT_OUT 'Ausgabe von Integerwerten und Kommasimulation
   on maxstellen goto INT_OUT_1,INT_OUT_10,INT_OUT_100,INT_OUT_1000,INT_OUT_10000
   #INT_OUT_10000
      j = int_out / 10000 : gosub INT_OUT_ZERO_CHECK
   #INT_OUT_1000
      j = (int_out / 1000) mod 10 : gosub INT_OUT_ZERO_CHECK
   #INT_OUT_100
      j = (int_out / 100) mod 10 : gosub INT_OUT_ZERO_CHECK
   #INT_OUT_10
      j = (int_out / 10) mod 10 : gosub INT_OUT_KOMMA_CHECK
   #INT_OUT_1
      lcd_dat = int_out mod 10 + 48 : gosub SEND_CHAR
return

   #INT_OUT_KOMMA_CHECK
      if komma_flag = -1 then goto zwangsnull else goto INT_OUT_ZERO_CHECK
      #zwangsnull
      lcd_dat = j + 48 : gosub SEND_CHAR
      lcd_dat = 44 : gosub SEND_CHAR
   return

   #INT_OUT_ZERO_CHECK
      lcd_dat = j + 48
      if lcd_dat = 48 then goto check else gosub SEND_CHAR
      return
      #check
      if null_flag = -1 then goto printnull
      lcd_dat = 32 : gosub SEND_CHAR : return
      return
      #printnull
      lcd_dat = 48 : gosub SEND_CHAR
   return

#CW_OUT 'Telegrafie-Ausgabe Buchstaben
   if lcd_dat = 32 then goto space_out
   if lcd_dat <= 57 then goto number_cw_out
   lcd_dat = lcd_dat - 97
   for i = 0 + lcd_dat * 4 to 3 + lcd_dat * 4
      looktab LETTERCODES,i,cw_tonelenght
      if cw_tonelenght = 0 then goto letter_cw_out_loopend
      beep cw_toneheight,cw_tonelenght * cw_speed,cw_speed
      #letter_cw_out_loopend
    next
    pause 3 * cw_speed : return
   #number_cw_out 'Telegrafie-Ausgabe Zahlen
      lcd_dat = lcd_dat - 48
      for i = 0 + lcd_dat * 5 to 4 + lcd_dat * 5
         looktab NUMBERCODES,i,cw_tonelenght
         beep cw_toneheight,cw_tonelenght * cw_speed,cw_speed
      next
      pause 3 * cw_speed : return
   #space_out
      pause 4 * cw_speed
return

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

#CLS        ' Einsprung "Display loeschen"
   lcd_dat = 2 : gosub SEND_COM
   lcd_dat = 1 : goto  SEND_COM
#LOCATE     ' Einsprung "Cursor auf Display platzieren"
   looktab DDRAM_ADD,lcd_dat mod 10,lcd_buf
   lcd_dat = lcd_buf + lcd_dat / 10
#SEND_COM   ' Einsprung "Befehl an Display senden"
   lcd_buf = &B01000000
   goto SEND_OUT
#SEND_CHAR  ' Einsprung "Zeichen senden"
   lcd_buf = &B01100000
   #SEND_OUT
   lcd_port = lcd_buf or (lcd_dat shr 4)    ' obere 4 Bits senden
   pulse lcd_e
   lcd_port = lcd_buf or (lcd_dat and &H0F) ' untere 4 Bits senden
   pulse lcd_e
return

' *** Zeichengenerator-Daten ***
table CG_CODES
      31 17 17 17 17 17 31 00 'Code 00, leerer Rahmen
      31 31 31 31 31 31 31 00 'Code 01, voller Klotz
      10 00 17 17 17 17 14 00 'Code 02, grosses Ue
      00 16 08 04 02 01 00 00 'Code 03, Zeichen \
      00 00 00 00 00 00 00 00 'Code 04, nicht belegt
      00 00 04 14 04 00 00 00 'Code 05, Zeichen CTRL+G
      04 00 04 08 16 17 14 00 'Code 06, verkehrtes Fragezeichen
      15 16 14 17 14 01 30 00 'Code 07, Paragraph
     '17 14 17 17 31 17 17 00 'Code __, grosses Ae
     '17 14 17 17 17 17 14 00 'Code __, grosses Oe
tabend
' *** DD-RAM-Adressen (hier fuer 4x20-Zeichen-Display)
table DDRAM_ADD
      128 192 148 212
tabend

table PRINTS ' Programm-Ausgaben auf Display ***
      084 101 109 112 058 ' "Temp:"   5 Bytes  0... 4
      049 048 086 058     ' "10V:"    4 Bytes  5... 8
      050 053 086 058     ' "25V:"    4 Bytes  9...12
      068 097 116 101 107 032
      115 099 104 114 101 107 098 101 110 ' "Datei schreiben" 15 Bytes  13... 27
tabend

table DOWS 'Wochentagenamen zweistellig ausgeben
       0   0 ' leer, weil Sonntag @ dow = 7
      77 111 ' "Mo"
      68 105 ' "Di"
      77 105 ' "Mi"
      68 109 ' "Do"
      70 114 ' "Fr"
      83  97 ' "Sa"
      83 111 ' "So"
tabend

table KTYTAB 'Temperatur-Wandler-Tabelle
      -275 -270 -260 -255 -245 -240 -235 -225 -220 -215
      -205 -200 -195 -185 -180 -175 -170 -160 -155 -150
      -140 -135 -130 -125 -115 -110 -105  -95  -90  -85
       -80  -75  -65  -60  -55  -50  -40  -35  -30  -25
       -20  -10  -05   00   05   10   20   25   30   35
        40   45   55   60   65   70   75   80   85   95
       100  105  110  115  120  125  130  140  145  150
       155  160  165  170  175  180  185  190  200  205
       210  215  220  225  230  235  240  245  250  255
       260  265  270  275  280  285  295  300  305  310
       315  320  325  330  335  340  345  350  355  360
       365  370  375  380  385  390  395  400  405  410
       415  420  425  430  435  435  440  445  450  455
       460  465  470  475  480  485  490  495  500  505
       510  515  520  525  530  535  535  540  545  550
       555  560  565  570  575  580  585  590  590  595
       600  605  610  615  620  625  630  635  640  640
       645  650  655  660  665  670  675  680  680  685
       690  695  700  705  710  710  715  720  725  730
       735  740  745  745  750  755  760  765  770  775
       775  780  785  790  795  800  800  805  810  815
       820  825  825  830  835  840  845  850  850  855
       860  865  870  870  875  880  885  890  895  895
       900  905  910  915  915  920  925  930  935  935
       940  945  950  955  955  960  965  970  975  975
       980  985  990  990  995  1000
tabend

table LETTERCODES
      1 3 0 0 'a
      3 1 1 1 'b
      3 1 3 1 'c
      3 1 1 0 'd
      1 0 0 0 'e
      1 1 3 1 'f
      3 3 1 0 'g
      1 1 1 1 'h
      1 1 0 0 'i
      1 3 3 3 'j
      3 1 3 0 'k
      1 3 1 1 'l
      3 3 0 0 'm
      3 1 0 0 'n
      3 3 3 0 'o
      1 3 3 1 'p
      3 3 1 3 'q
      1 3 1 0 'r
      1 1 1 0 's
      3 0 0 0 't
      1 1 3 0 'u
      1 1 1 3 'v
      1 3 3 0 'w
      3 1 1 3 'x
      3 1 3 3 'y
      3 3 1 1 'z
tabend

table NUMBERCODES
      3 3 3 3 3 '0
      1 3 3 3 3 '1
      1 1 3 3 3 '2
      1 1 1 3 3 '3
      1 1 1 1 3 '4
      1 1 1 1 1 '5
      3 1 1 1 1 '6
      3 3 1 1 1 '7
      3 3 3 1 1 '8
      3 3 3 3 1 '9
tabend

 Antwort schreiben

Bisherige Antworten: