ADC und Interrupt Problem

Gast #902729
Lesenswert?

Hallo, habe zwei Probleme mit dem AD Wandler, vieleicht hat ja einer von 
euch eine gute Antwort für mich die ich auch als Anfänger verstehe ;-).
Ich Programmiere in C auf einen Atmega32 mit LCD Display.

Mein erstes Problem ist das ich kein Komma zwischen den Werten habe, 
also 4,95V werden als 495 angezeigt.

xtr=buffer;
xtr = ((long)buffer*5000)/1024;
utoa(xtr,Buffer,10);
lcd_goto(0,1);
lcd_write_s( Buffer );


Mein zweites Problem ist das ich einen Interrupt auslösen will wenn die 
Spannung einen bestimmten Wert unterschreitet. Also wenn die Spannung zu 
niedrig ist das denn auf dem LCD "Niedrige Batterie Spannung" angezeigt 
wird. Nur leider hab ich gar keinen ansatz wie ich das machen kann?!


Danke schonmal im Vorraus für die Beantwortung meiner Fragen!
#902736
Lesenswert?

Der ADC wird dir einen solchen Interrupt nicht liefern. Wenn also eine 
regelmässige Messung nicht ausreicht, dann ist der Analog Comparator 
dein Ding. Genau dafür gibt es ihn.

Wenn es allerdings nur darum geht, diesen misslichen Zustand anzuzeigen, 
dann ist ein Interrupt dafür ziemlich überflüssig. AB und zu mal messen 
und anzeigen reicht dann ja.

Und für das fehlende Komma sei dir etwas Phantasie im Umgang mit 
Division und Divisionsrest nahegelegt
Gast #902779
Lesenswert?

Hi Dieter,
Um ADC und einen Comparator gleichzeitig/nacheinander zu benutzen
Schliesst du die zu messende Spannung an einen ADC Pin an. anschliessend 
kannst du den Comparator über den ADC Multiplexer an den ADC Pin per 
software anschliessen!
Gast #902847
Lesenswert?

Verstehe ich das richtig das der Atmega32 nur einen Analog Komperator 
hat und ich somit ansich nur eine einzige Spannung überwachen kann? Wenn 
ja ist das etwas ungünstig da ich insgesammt 2 Spannungen und 2 
Temperaturen überwachen muss!
Gast #902956
Lesenswert?

@ Dieter
Für dich nochmal ein wilder Hack.
Damit das Komma Platz hat, werden die Zeichen einfach etwas umsortiert.
:
utoa(xtr,Buffer,10);
Buffer[4]=0;            // String-Ende
Buffer[3]=Buffer[2];    // Einer
Buffer[2]=Buffer[1];    // Zehner
Buffer[1]=',';          // last, but not least: das Komma
lcd_goto(0,1);
:

Da gäbe es noch etliche andere Arten,
auf eine wurde bereits hingewiesen:
Beitrag "ADC Wert auf LCD"
Die allerletzte Zeile verweist auf
http://www.mikrocontroller.net/articles/Festkommaarithmetik#Ergebnis_ausgeben
Gast #903930
Lesenswert?

@ lkmiller irgendwie ist das voll komisch! Ich habe 40% des speichers 
belegt. Aber wenn ich die Zeilen von dir einfüge sind auf einmal 133% 
belegt?! Wie kann das denn?! Hat einer darauf eine Antwort
Gast #904142
Lesenswert?

HAllo, habe es hinbekommen... lag irgendwie am dem Projekt, habe den C
code einfach in ein neues Projekt rein kopiert und da ging es^^. Ich
kann Spannungen bis 9,99V super messen ( Also liegen mit einem
Spannungsteiler vorm Eingang des µC). Mein Problem ist im moment das ich
die Spannungen über 10V nicht richtig anzeigen kann... alles bis 10V
wird richtig angezeigt, nur wenn ich unte 9,9V komme wo er nun
eigentlich 09,9V oder halt nur 9,9V anzeigen sollte, zeigt er 99,9V an.

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