Voltmeter mit Atmega8 und auf LCD anzeigen

OP #2383778
Lesenswert?

Moin zusammen,

ich brauche ein wenig Hilfe von Euch. Ich habe schon ein paar 
Erfahrungen mit Atmega8. Bislang habe ich nur in Assembler programmiert. 
Wie ich eine A/D Wandlung mache weiß ich. Nur dann die Daten für ein 
LCD-Display weiter zuverarbeiten habe ich probleme bzw. habe eigentlich 
garkeinen  Ansatz, wie ich zur einer Lösung komme.
Ich möchte auch bis 18V messen können mit der internen Referenzspg.

Vllt. kann mir ja einer weiterhelfen.

Ein Dankeschön im Voraus,
Florian
Gast #2383835
Lesenswert?

Florian Lorenzen schrieb:
> Nur dann kommt wieder die Frage, wie programmiere ich das.

1. Durch Multiplikation oder/und Division
   den Dualen Wert des ADC auf den gewünschten
   Zielwert bringen.
   Bei dir z.B:
   Max-AD-Wert umwandeln in (int)1800. Entspricht
   dem Spannungswert in hundertstel Volt.

2. Umwandlung der Dualzahl in eine BCD-Zahl
   Programmbeispiele findest du hier in den Tuts.

3. Umwandeln der BCD-Zahl in ASCII-Zeichen
   Kriegst du selbst raus, ist super einfach.

4. Senden der ASCII-Zeichen an das LCD.
#2383844
Lesenswert?

Wenn Du den Spannungsteiler hast, bekommst Du dann Werte 0-1023 für 
0-18V.
Um also eine Anzeige von 1800 (wird dann mit festem Komma 18.00 V) bei 
1023 (18V)  zu bekommen, musst Du die 1023 mit 1.759 multiplizieren. 
Kommazahlen sind in Assembler ungünstig, deshalb kannst Du den Faktor 
1.759 mit 256 (1Byte) multiplizieren -> ~450 , also dann *450. Das 
Ergebnis wird dann auch  um das 256fache mehr, was man dann einfach 
durch das Weglassen des letzten Bytes wieder runterteilen kann.
Ungenauigkeit durch Rundungsfehler 2/100 V. Wenn mehr gewünscht wird (je 
nach ADC Genauigkeit)  mit 256^2 multiplizieren und 2 Byte weglassen.
Den 2Byte-Wert  0-1800 musst Du dann entsprechend in einzelne ASCII 
Stellen umrechnen und anzeigen.
Gast #2383861
Lesenswert?

Florian Lorenzen schrieb:
> Nur dann kommt wieder die Frage, wie programmiere ich das.

Ich hatte ein aehnliches Problem, um relativ hohe Anodenspannungen zu 
messen. Das Ganze ist ein Teil eines Monitoringssytems an einem 
Roehrenverstaerker.

Zusaetzlich musste ich noch Frank Links Motorpoti-Fernsteuerung noch um 
ein paar Features erweitern (RC5-Codes auf seriellen Port ausgeben, L293 
H-Bruckes statt parallelgeschaltete Ausgaenge).

Hiermit habe ich das alles hinbekommen:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
OP #2389226
Lesenswert?

Hallo,

erstmal möchte ich mich für Eure Hilfe bedanken. Das hat bis jetzut 
super geklappt und ich habe endlich eine Anzeige auf meinem LCD. Nur 
weiß ich nicht weiter wie ich nun die zweite Zahl vor dem Komma 
hinbekommen. Bis 5V kann ich mir die Spg. jetzt anzeigen lassen, aber es 
soll ja bis 18V messen können.
Vllt. könnt Ihr mir da auch so toll weiter helfen.
Ein Dankeschön im Voraus.
Gruß
Florian
#2389522
Lesenswert?

Auf die Gefahr hin, dass ich mich wiederhole (ich gehe immernoch von 
Assembler aus).
Du benutzt einen Spannungsteiler, der die 18V auf Deine gewählte 
ADC-Ref.Spannung runterteilt. Damit hast Du dann einen ADC Wert von 1023 
bei 18V.

1: Den ADC Wert auslesen, erst Low-,dann Highbyte. (2Byte)

2: Diesen Wert mit 450 multiplizieren. (2 Byte * 2 Byte = 4 Byte)

3a: Höchstes Byte=0, also vergessen.
3b:niedrigstes Byte auch vergessen, dadurch wird das Ergebnis wieder 
durch
256 geteilt.

4: beiden mittleren Bytes ergeben nun 0-1800. Diesen Wert als 4-stellige 
BCD Zahl anzeigen lassen.
Falls gewünscht, die 1.Stelle auf 0 testen und statt 0 eine Leerstelle 
drucken und nach der 2. Stelle ein Komma(Punkt) drucken.



PS: Ich kenne es zwar nicht persönlich, aber ich glaube am Anfang kommt 
man mit solchen Sachen mit BASCOM schneller zum Ziel.

Viele Gruesse
herrmueller

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren