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
Hallo Wie gibst du denn bisher etwas auf das LCD aus?? Da wird doch bestimmt auch eine Variable dabei sein. Gruß Joachim
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
Wenn du in Bascom programmierst, schau doch mal im Roboternetz.de - Forum vorbei.
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
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
> 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.
1 | $regfile = "m48def.dat" |
2 | $crystal = 4000000 |
3 | $baud = 19200 |
4 | $hwstack = 32 |
5 | $swstack = 10 |
6 | $framesize = 40 |
7 | |
8 | ' ### Initialisierungen ### |
9 | Ddrd = &B01111110 |
10 | Ddrc = &B00000000 |
11 | Ddrb = &B11111111 |
12 | Admux = &B11000000 |
13 | Adcsra = &B11100010 |
14 | Portd = &B11111101 |
15 | Portc = &B11111100 |
16 | Portb = &B11111111 |
17 | Mcucr = &B00001110 |
18 | Sreg.7 = 1 |
19 | |
20 | Config Lcdpin = Pin , Port = Portb , E = Portd.6 , Rs = Portd.5 |
21 | |
22 | Dim Lb As Word |
23 | Dim Hb As Word |
24 | Dim A As Word |
25 | Dim B As Word |
26 | Dim C As Word |
27 | Dim D As Word |
28 | |
29 | Config Lcd = 20 * 4 |
30 | |
31 | ' ### Hauptprogramm ### |
32 | Cls |
33 | Lcd "Willkomen" |
34 | Waitms 500 |
35 | Cls |
36 | |
37 | If A > 601 Then ' ### A = 0 ### |
38 | Portd.1 = 1 |
39 | Elseif A < 586 Then |
40 | Portd.1 = 0 |
41 | Waitms 1 |
42 | End If |
43 | |
44 | Do |
45 | Hb = Adch.0 |
46 | Lb = Adcl.0 |
47 | Hb = Hb And &B00000011 |
48 | Hb = Hb * 256 |
49 | A = Lb + Hb |
50 | Udr = A |
51 | A = B ' ### B=0 => A=0 ### |
52 | D = &B100100101 / &B00001010 |
53 | C = B / D ' ### B=0 => C=0 ### |
54 | Cls |
55 | Locate 3 , 1 : Lcd "Kuehlagregat" |
56 | Locate 4 , 12 : Lcd C |
57 | Waitms 500 |
58 | Loop |
59 | End |
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
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.
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)
@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
> 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."
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
> 5%
Das verstehe ich nicht bzw. bezweifele das, wenn ich mir das Datenblatt
des Sensors ansehe.
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.
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:
1 | gradkelvin = (adcwert * 5 * 1000/10) / 1024 |
Die Umrechnung Grad Kelvin in Grad Celcius ist eine einfache Rechnung.
1 | gradcelcius = gradkelvin - 273.15 |
Da in der ADC Messung Integerwerte benutzt werden und Nachkommastellen wegfallen, ist das Ergebnis nicht exakt 25 °C.
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.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.