Forum: Mikrocontroller und Digitale Elektronik Voltmeter mit Atmega8 und auf LCD anzeigen


von Florian L. (krabbenkutter79)


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

von Harald W. (wilhelms)


Lesenswert?

Florian Lorenzen schrieb:

> Ich möchte auch bis 18V messen können mit der internen Referenzspg.

Da brauchst Du einen Spannungsteiler vor dem ADC.
Gruss
Harald

von Florian L. (krabbenkutter79)


Lesenswert?

Hallo Harald,

danke für deine Antwort. Ich rechner mir mal den passenden Spgteiler 
aus. Nur dann kommt wieder die Frage, wie programmiere ich das.

Gruß
Florian

von Grübler (Gast)


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.

von Herr M. (herrmueller)


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.

von Dr. G. Reed (Gast)


Lesenswert?

Hier dürftest Du einige Anregungen finden:

http://www.loetstelle.net/projekte/vierkanaldvm/vierkanaldvm.php

Voltmeter mit Atmel und LCD Anzeige in Assembler...

...sogar Vierfach!

von olibert (Gast)


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

von Florian L. (krabbenkutter79)


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

von Herr M. (herrmueller)



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

von Florian L. (krabbenkutter79)


Lesenswert?

Hallo Herr Mueller,

ich hab es nun endlich geschafft :-). Nochmal ein Dankeschön.

Auch bei den Anderen möchte ich mich nochmal bedanken.

Schönes WE.

Gruß
Florian

von Herr M. (herrmueller)


Lesenswert?

Das freut mich zu hören. Viel Erfolg weiterhin.

herrmueller

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
Noch kein Account? Hier anmelden.