Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


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 

 Dezimale Kommazahl auf dem LCD Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 12.04.2012 23:08)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Mini M-Unit, Open-Mini Station, sonstige
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

Bisherige Antworten: