- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 3 von 3

Thema: LCD ADC Ausgabe Problem

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330

    LCD ADC Ausgabe Problem

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    Ich versuche, mit einem Atmega8 seine eigene Versorgungsspannung viac LCD auszugeben.

    Dazu habe ich folgenden Code geschrieben
    Code:
    $regfile = "m8def.dat"                                      ' specify the used micro
    $crystal = 1000000                                          ' used crystal frequency
    $baud = 19200                                               ' use baud rate
    $hwstack = 150                                              ' default use 32 for the hardware stack
    $swstack = 150                                              ' default use 10 for the SW stack
    $framesize = 60                                             ' default use 40 for the frame space
    
    
    
    'note : tested in PIN mode with 4-bit
    
    Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 , Db6 = Portb.3 , Db7 = Portb.4 , E = Portb.5 , Rs = Portb.6
    
    
    Dim A As Byte
    Dim Druck As Byte
    Dim Var As Byte
    Dim Uv As Byte
    Dim X As Byte
    Dim Y As Byte
    Config Lcd = 16 * 2
                                           'configure lcd screen
    
    'other options are 16 * 4 and 20 * 4, 20 * 2 , 16 * 1a
    'When you dont include this option 16 * 2 is assumed
    '16 * 1a is intended for 16 character displays with split addresses over 2 lines
    
    
    
    
     Config Timer1 = Timer , Prescale = 1024
     Enable Timer1
    
    
    
     Ddrd = &B00000000                                          'input D
      Var = 35
       Druck = 150
    
    
    
     Enable Interrupts
    
    
    
    Cursor Off Noblink
    
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    Start Adc
    
    'With STOP ADC, you can remove the power from the chip
    'Stop Adc
    
    Dim W As Word , Channel As Byte
    
    'now read A/D value from channel 0
    
    
    
    
    ' ------------------------------------ hier liegt der Hund im Graben
    
    Do
    
      W = Getadc(4)
      Uv = W * 25
      Uv = Uv / 10
    
     Lcd "Vers.Spannung:"
     Locate 2 , 0
     Lcd Uv ; " mV " ; "-" ; W
    
      Waitms 1800
       Cls
    
    ' --------------------------------
    
    Loop
    End

    Rauskommen tut dann immer 16 mV -16
    Gemessen sinds 2,55V - 2,54V (1 kOhm + 1 kOhm)

    Wieso der ADC Minuswerte angibt, ist mir ein Rätsel. Habe den Spannungsteiler auch umgepolt (wie zu erwarten kein Effekt)

    Mit dem Beispielprogramm hat es geklappt, der hat alle Channels (ADC 0-7) durchgeswitched. 546 , 433 usw kam immer raus also realistische Werte. Wieso er jetzt negative Werte ausgibt?

    Habt ihr eine Idee???



    EDIT: Auch wenn ich 0-W oder -1*W rechne, gibt er nachher Minuswerte aus!!

    Mfg
    Geändert von runner02 (10.03.2012 um 21:19 Uhr)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    15.04.2008
    Beiträge
    330
    Danke, hat schon geklappt.


    Ich hatte "-" statt " " geschrieben ...... Und statt Byte benutze ich jetzt Long. Und dann gehts

  3. #3
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    34
    Beiträge
    3.501
    Blog-Einträge
    9
    Der ADC kann schonmal keine negativen Spannungen messen. Zumindest nicht wenn du nur eine positive Versorgungsspannung hast.
    Deswegen vermute ich einen Softwarefehler.
    Warum rechnest du sowas?

    W = Getadc(4)
    Uv = W*25
    Uv = Uv/10

    Der ADC hat eine Auflösung von 10 Bit. Das heißt 1 Bit entspricht 5V/1024 = 0,0048V. Du sagst du hast einen Spannungsteiler mit 2x 1kOhm. Das heißt bei 5V liegen 2,5V am ADC an, also immer die Hälfte der Spannung am gesamten Spannungsteiler.
    Du rechnest nun so:

    W = Getadc(4)
    W = W * 0,0048 (damit rechnest du den Digitalwert in eine Spannung um, z.B. hast du bei einer Spannung von 2,5V einen Wert von 512 und 512 x 0,0048 = 2,45...)
    W = W * 2 (damit "kompensierst" du den Spannungsteiler)

    Locate 1, 1
    LCD "Vers. Spannung:"
    Locate 2, 1
    LCD W ; "V"

    So sollte er dir das richtige anzeigen

    Edit: Nagut wenn es so einfach war ^.^
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

Ähnliche Themen

  1. Problem mit Timer und LCD-Ausgabe
    Von MelMan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 10.08.2008, 17:51
  2. Problem mit UART - falsche Ausgabe
    Von homedom im Forum C - Programmierung (GCC u.a.)
    Antworten: 1
    Letzter Beitrag: 19.01.2008, 19:26
  3. Problem mit LCD-ausgabe
    Von ZwieBack im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 03.07.2007, 21:06
  4. Ausgabe auf dem PC
    Von Nikolaus188 im Forum Elektronik
    Antworten: 31
    Letzter Beitrag: 07.08.2006, 17:07
  5. Problem mit serieller Ausgabe
    Von schmic20 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 05.02.2005, 15:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress