INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> 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 |