![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, der folgende Sourcecode demonstriert, wie eine vom AD-Wandler gemessene Spannung als dezimale Kommazahl auf dem I2C-LCD ausgegeben werden kann. Es werden vier Nachkommastellen ausgegeben, wodurch das angezeigte Ergebnis sehr genau abgelesen werden kann. Die hier verwendeten INCLUDE-Dateien für LCD befinden sich übrigens im Beispiel "Kleine Pizza-Uhr auf der Open-Macro" bei den Downloads auf der OM-Infosite. ' ---------------------------------------------------------------------------- ' AD-Wert als Kommazahl auf dem I2C-LCD der Open-Macro ausgeben ' In OCBASIC 1.08a von Dietmar Harlos am 12. April 2012 ' ---------------------------------------------------------------------------- INCLUDE "omac.def" 'Definitionen für die Open-Macro DEFINE poti AD[6] 'Widerstandspoti an PORT[6] DEFINE VREFH AD[18] 'VREFH (VDD, Betriebsspannung) DIM w1, w2 WORD DIM x,y,z BYTE ' PTAx: x -> 543210 'Pull-Up-Widerstand an PORT[6] (gleich PTA5) PULLUPA = &b00011111 'deaktivieren, alle anderen aktiviert lassen ADCLK=&b00110110 'AD-Wandler auf 10 Bit umschalten lcd_init WHILE TRUE lcd_goto 0,0 SYS lcd_string : INLINE "AD-Wert: ",0 'Text auf dem LCD ausgeben ' Die aktuelle Spannung kann mit folgender Formel ermittelt werden: ' UB = 5 * poti / VREFH w1 = 5 * poti 'Zähler des Bruchs w2 = VREFH 'Nenner des Bruchs ' Jetzt die aktuelle Spannung (genauer: w1/w2) als Kommazahl ausgeben: lcd_put w1/w2+ASC("0") 'Vorkommaanteil (Ziffern 0 bis 5) lcd_put ASC(".") FOR z=1 TO 4 'vier Nachkommastellen w1=(w1 MOD w2)*10 lcd_put w1/w2+ASC("0") 'eine Ziffer des Nachkommaanteils ausgeben NEXT z SYS lcd_string : INLINE " Volt",0 'Text auf dem LCD ausgeben PAUSE 25 WEND ' --------------------------------------------------------------------------- ' Position im 4*20-I2C-LCD setzen ' es sollte auch ein "lcd_putcmd &h80+64*(y AND 1)+20*(y/2)+x" möglich sein ' die DD-RAM-Adresse der verschiedenen Zeilen ist u.U. LCD-abhängig PROCEDURE lcd_goto(y,x) IF y=0 THEN lcd_putcmd &h80+x 'LCD-Kommando "Set DD-RAM address" ELSE IF y=1 THEN lcd_putcmd &hc0+x ELSE IF y=2 THEN lcd_putcmd &h94+x ELSE IF y=3 THEN lcd_putcmd &hd4+x END IF RETURN END PROCEDURE ' --------------------------------------------------------------------------- ' Die I2C-LCD-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "i2clcd.pro" ' --------------------------------------------------------------------------- ' Die I2C-Routinen fuer BYTEPORT[2] einbinden ' --------------------------------------------------------------------------- INCLUDE "om_i2c_b.pro" ' --------------------------------------------------------------------------- ' Die Firmware-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "om_fw.pro" P.S.: Der Sourcecode soll vor allem demonstrieren, wie eine Kommazahl mit hoher Genauigkeit auf dem LCD ausgegeben werden kann. Soll eine gemessene Spannung auf dem LCD ausgegeben werden, sollte man folgendes beachten: Ein Digit ("Ziffernschritt") entspricht einem Spannungswert von 5/1023 = 0.0048876 Volt, weshalb es ausreicht, nur zwei dezimale Nachkommastellen anzuzeigen. Da nachfolgende Stellen abgeschnitten werden, sollte man für ein genaueres Ergebnis aufrunden (+0.005 Volt). Dazu kann man einfach den vom AD-Port "poti" zurückgelieferten Wert um eins erhöhen. Viel Spaß mit den OM-Controllern Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |