www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD ansteuerung mit Atmega8


Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin ,

Hätte da mal kurz eine Frage und zwar möchte ich eine Digitale 
temperaturregelnde Lüftersteuerung mit LCD-Display Bauen.

Ich verwende einen LM235 zum Messen  der Temperatur die Spg wandle ich 
über den AD Wandler des Atmega8 um nun möchte ich aber auf dem LCD die 
Temp. ausgeben und muss das ganze wieder um Wandeln.

Wie sag ich der LCD anzeige sie soll den Inhalt der Variablen A aus 
geben.

Schon mal vor ab danke für etwaige Hilfe

Gruß Knut

Autor: XXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wie gibst du denn bisher etwas auf das LCD aus??
Da wird doch bestimmt auch eine Variable dabei sein.

Gruß
Joachim

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mh nein arbeite mit BASCOM im moment gebe ich nur schrift aus.
hier das programm

$regfile = "m48def.dat"
$crystal = 4000000
$baud = 19200

$hwstack = 32

$swstack = 10

$framesize = 40



'
Ddrd = &B01111110
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000

Adcsra = &B11100010

Portd = &B11111101
Portc = &B11111100
Portb = &B11111111
Mcucr = &B00001110

Sreg.7 = 1

'Config Lcdpin = Pin, Db0 = Portb.0   Db1 = Portb.1 Db2 = Portb.2, Db3 = 
Portb.3,   Db4 = Portb.4,   Db5 = Portb.5, Db6 = Portb.6,  Db7 = 
Portb.7,  E = Portd.6 , Rs = Portd.5 ,

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim Lb As Word
Dim Hb As Word
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word



Config Lcd = 20 * 4






  Cls

  Lcd "Willkomen"
   Waitms 500
   Cls



    If A > 601 Then
      Portd.1 = 1

         Elseif A < 586 Then
            Portd.1 = 0


    Waitms 1


    End If

     Do

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du in Bascom programmierst, schau doch mal im Roboternetz.de - 
Forum vorbei.

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seh grad da fehlt ja die hälfte



     Do

   Hb = Adch.0
   Lb = Adcl.0
   Hb = Hb And &B00000011
   Hb = Hb * 256
   A = Lb + Hb



   Udr = A

    A = B
   D = &B100100101 / &B00001010

   C = B / D





    Cls
    Locate 3 , 1 : Lcd "Kuehlagregat"
    Locate 4 , 12 : Lcd C
     Waitms 500
    Loop

    End
gibts Kühlagregat
                0 _
aus

Autor: XXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Kenne BASCOM nicht, aber ziemlich weit unten in deinem Programm
gibst du mit Lcd C eine Variable C aus. Dann sollte doch
mit Lcd A die Variable A ausgegeben werden.

Gruß
Joachim

Autor: Willkomen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> gibts Kühlagregat
>                0 _

Diese Ausgabe ist korrekt für das Programm (bessere formatoerung, und 
Anmerkungen s.u.). Zuvor muss noch für 0,5s ein "Willkomen" sichtbar 
gewesen sein.
$regfile = "m48def.dat"
$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

' ### Initialisierungen ###
Ddrd = &B01111110
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000
Adcsra = &B11100010
Portd = &B11111101
Portc = &B11111100
Portb = &B11111111
Mcucr = &B00001110
Sreg.7 = 1

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim Lb As Word
Dim Hb As Word
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word

Config Lcd = 20 * 4

' ### Hauptprogramm ###
Cls
Lcd "Willkomen"
Waitms 500
Cls

If A > 601 Then      ' ### A = 0 ###
  Portd.1 = 1
Elseif A < 586 Then
  Portd.1 = 0
  Waitms 1
End If

Do
  Hb = Adch.0
  Lb = Adcl.0
  Hb = Hb And &B00000011
  Hb = Hb * 256
  A = Lb + Hb
  Udr = A
  A = B             ' ### B=0 => A=0 ###
  D = &B100100101 / &B00001010
  C = B / D         ' ### B=0 => C=0 ###
  Cls
  Locate 3 , 1 : Lcd "Kuehlagregat" 
  Locate 4 , 12 : Lcd C
  Waitms 500
Loop
End

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so hier nur das LCD programm griege Für A immer 771 aus gegeben ob wohl 
das ein tempfühler ist den ich erhitzt habe

$regfile = "m48def.dat"
$crystal = 4000000
$baud = 19200

$hwstack = 32

$swstack = 10

$framesize = 40



'
Ddrd = &B01111110
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000

Adcsra = &B11100010

Portd = &B11111101
Portc = &B11111100
Portb = &B11111111
Mcucr = &B00001110

Sreg.7 = 1

'Config Lcdpin = Pin, Db0 = Portb.0   Db1 = Portb.1 Db2 = Portb.2, Db3 = 
Portb.3,   Db4 = Portb.4,   Db5 = Portb.5, Db6 = Portb.6,  Db7 = 
Portb.7,  E = Portd.6 , Rs = Portd.5 ,

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim Lb As Word
Dim Hb As Word
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word



Config Lcd = 20 * 4






  Cls

  Lcd "Willkomen"
   Waitms 500
   Cls






  Do
 Hb = Adch
   Lb = Adcl
   Lb = Lb And &B00000011
   Lb = Lb * 256
   A = Lb + Hb

   C = A / 38





    Cls
    Locate 3 , 1 : Lcd "Kuehlagregat"
    Locate 4 , 12 : Lcd A
     Waitms 50




    Loop

    End


Also LCD zeigt immer 771 an egal ob ich mit dem LM135 erhitze oder nicht

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin zu faul die Bits aufzudröseln:
Admux = &B11000000
Adcsra = &B11100010

Admux
Vielleicht ist der LM135 (oder LM235?) falsch an deinen Atmega8 
angeschlossen.

Adcsra
Wie betreibst du den ADC: freerunning oder single conversion? Welchen 
Takt bzw. Prescaler gibst du dem ADC? Wenn single conversion, dann sehe 
ich nicht, wie du nach der ersten Messung die nächste Messung anstößst. 
ich sehe auch nicht wie du wartest, bis der ADC mit der Wandlung fertig 
ist.

Autor: snowfly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also in der Hilfe (F1) stehe Sachen wie diese.

Config Adc = Single , Prescaler = Auto
'Now give power to the chip
Start Adc
[...]
W = Getadc(channel)

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@aeltsam

ADmux = &B11000000 `internereferenz von 2,56V benutzen

ADCSRA = &B11100010  'BIT7 ADC an bit6 start bit5 Freilaufend bit2+1+0 
adcclock = avrclock/4

dachte damit wüsste der atmega alles was erwissen muss

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>  Hb = Adch
>  Lb = Adcl

"ADCL must be read first, then ADCH."

> ADmux = &B11000000 `internereferenz von 2,56V benutzen

Und der Sensor muss an ADC0 angeschlossen sein (MUX3..0 = 0000)

> $crystal = 4000000
> ADCSRA = &B11100010
> => adcclock = avrclock/4

Prescaler 32 wäre passender (125 kHz statt 1 MHz).

"By default, the successive approximation circuitry requires an input 
clock frequency between 50 kHz and 200 kHz to get maximum resolution. If 
a lower resolution than 10 bits is needed, the input clock frequency to 
the ADC can be higher than 200 kHz to get a higher sample rate."

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so jetzt Klappts nur ändert sich der Faktor D und das ist nicht 
berücksichtigt so das nicht die richtige temp aus gegeben wird je höher 
die Temp dest Kleiner wird der Faktor und zwar um 5 % das heist D * 0,95 
wie setzt ich das im program um


$regfile = "m8def.dat"
$crystal = 4000000
$baud = 19200

$hwstack = 32

$swstack = 10

$framesize = 40



'
Ddrd = &B01111110
Ddrc = &B00000000
Ddrb = &B11111111
Admux = &B11000000

Adcsra = &B11100010

Portd = &B11111101
Portc = &B11111100
Portb = &B11111111
Mcucr = &B00001110

Sreg.7 = 1

'Config Lcdpin = Pin, Db0 = Portb.0   Db1 = Portb.1 Db2 = Portb.2, Db3 = 
Portb.3,   Db4 = Portb.4,   Db5 = Portb.5, Db6 = Portb.6,  Db7 = 
Portb.7,  E = Portd.6 , Rs = Portd.5 ,

Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5

Dim Lb As Word
Dim Hb As Word
Dim A As Word
Dim B As Word
Dim C As Word
Dim D As Word



Config Lcd = 20 * 4
D = 30
  Do
  Lb = Adcl
  Hb = Adch

  Hb = Hb And &B00000011
  Hb = Hb * 256
  A = Lb + Hb


  B = A



  C = B / D

  Cls

  Lcd "Willkomen"
   Waitms 500













    Cls
    Locate 2 , 1 : Lcd "Kuehlagregat"
    Locate 3 , 12 : Lcd C
    Locate 4 , 12 : Lcd B
     Waitms 500




    Loop

    End

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 5%

Das verstehe ich nicht bzw. bezweifele das, wenn ich mir das Datenblatt 
des Sensors ansehe.

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was meinst du das es was ausgibt ?? ich wandle den wer der an ADC0 
anliegt um in einen binären Wert um en ich dan wie man sieht im Programm 
über den Faktor in die Grad zahl umwandle nur muss ich diesen Faktor 
ändern und die Gradanzeige genau zu machen.

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Sensor gibt eine Spannung aus. Und zwar 10 mV pro Grad Kelvin ab 
absolutem Nullpunkt.

Den Sensor kann man ohne Kalibrierung anschliessen und mit Kalibrierung. 
Für die Kalibrierung braucht man ein 10K Potentiometer plus ein 
kalibriertes Voltmeter plus ein kalibriertes Thermometer.

Bei 25 °C erwarte ich in etwa 2,982 V vom kalibrierten Sensor :-) Bei 
Aref=5V (wobei die Frage ist, wie genau die sind!) und 10-Bit ADC ist 
der erwartete ADC Wert 610.

Mache ich dann eine Messung und bekomme den Wert adcwert = 610 rechne 
ich den in Grad Kelvin ab dem Nullpunkt um:
gradkelvin  = (adcwert * 5 * 1000/10) / 1024 

Die Umrechnung Grad Kelvin in Grad Celcius ist eine einfache Rechnung.
gradcelcius = gradkelvin - 273.15 

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da in der ADC Messung Integerwerte benutzt werden und Nachkommastellen 
wegfallen, ist das Ergebnis nicht exakt 25 °C.

Autor: Seltsam (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deine magischen D = 30 verstehe ich nicht

>>> ADmux = &B11000000 `internereferenz von 2,56V benutzen

Die interne Referenz würde ich nur bei Temperaturen kälter -17,2 °C 
benutzen. Sonst ist beim kalibrierten Sensor der Messwert aus dem ADC 
Messbereich raus.

Autor: G. Matthias (knut89)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo also die Spg des LM halbiere ich über einen spg teiler zwei 10k 
das heißt ich habe bei 25° eine spg von 1,491 V und meine interne Vref 
ist 2,6 V
dauert ein bisschen bis er da aus dem Messbereich drausen ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.