Hallo Heute hatte ich Zeit, um mich mit der Programmierung des Atmega8 zu befassen. Ich habe erfolgreich ein LCD versorgt, und an einem analogen Eingang eine Spannung gemessen und am LCD angezeigt. Mein Ziel war es, eine Spannung von 0-5V am ADC0 zu messen und im LCD rechtsbündig mit 2 Kommastellen anzuzeigen. Es funktioniert soweit - nur ob es so richtig gemacht wird weis ich nicht. Irgendwo im Netz habe ich gelesen, dass die Verarbeitung von Flieskommastellen den Controller mehr als auslastet, und das keine optimale Lösung sei. Schließlich soll der µC nebenbei auch noch andere Aufgaben erfüllen, zB. in der zweiten Zeile des LCD etwas anderes anzeigen, o.ä. Wie man es richtig macht, wurde aber leider nicht erwähnt. Deshalb möchte ich die Profis hier bitten, mal einen Blick darauf zu werfen, und meine Fehler aufdecken. lg
@Jonny S. (zonk) > Voltmeter.JPG >Es funktioniert soweit - nur ob es so richtig gemacht wird weis ich >nicht. Der Anhang ist schon mal ein FAIL! Schon mal was von (Quell)textdateien gehört? Siehe Netiquette! >Irgendwo im Netz habe ich gelesen, dass die Verarbeitung von >Flieskommastellen den Controller mehr als auslastet, Quark. > und das keine >optimale Lösung sei. Sie ist hier vollkommen OK. > Schließlich soll der µC nebenbei auch noch andere >Aufgaben erfüllen, zB. in der zweiten Zeile des LCD etwas anderes >anzeigen, o.ä. Das ist läppisch, der COntroller langweilt sich auch damit mehr als genug. >Wie man es richtig macht, wurde aber leider nicht erwähnt. Wenn es WIRKLICH um sehr hohe Rechenleistung geht, nimmt man ggf. Festkommaartithmetik >Deshalb möchte ich die Profis hier bitten, mal einen Blick darauf zu >werfen, und meine Fehler aufdecken. Im Prinzip OK, aber wenn du schon mit Fließkomma arbeitest, kann man das auch in einer einzigen Multiplikation machen. ;-) Volt = Wert * 0.00488
Falk B. schrieb: > Der Anhang ist schon mal ein FAIL! Schon mal was von (Quell)textdateien > gehört? Siehe Netiquette! Wie mache ich es das nächste mal richtig? Soll ich die *.bas-Datei als Anhang hochladen, oder den Quellcode hier direkt einfügen? lg P.S. Danke für dein Feedback
Direkt rein, code Tags benutzen. [code] blablubb [/code.] Ohne Punkt
@Jonny S. (zonk) >Wie mache ich es das nächste mal richtig? Soll ich die *.bas-Datei als >Anhang hochladen, Ja. > oder den Quellcode hier direkt einfügen? Nur, wenn er kürzer als 1 Bildschirmseite ist.
@Jonny S. Auch wenn das Teil nie meine Lieblingssprache wird, so schön formatiert bekommt man selten BASCOM Code zu sehen. Gratulation!
Carl D. schrieb: > Auch wenn das Teil nie meine Lieblingssprache wird, so schön formatiert > bekommt man selten BASCOM Code zu sehen. Gratulation! Danke für die Blumen :-) Ja, ich hab mir Mühe gegeben (und vor dem Screenshot noch mal extra aufgeräumt) ;-) lg
Ich würde es aber an einem Punkt noch ändern: Wenn die Spannung zunächst grösser/gleich 10V war und dann unter 10V fällt, dann bleibt die 10er Stelle stehen da du bei <10V den Cursor ja auf X=11 positionierst. Beispiel: Erste Messung war 12V, die nächste 3V. Nun bleibt die 1 stehen und dahinter schreibst du die 3V -> Anzeige "13V". Daher besser den If-Then-Block ersetzen durch
1 | if volt <10 then Ausgabe = " " + Ausgabe |
2 | Locate 1,10 |
3 | lcd Ausgabe |
Dann wird einfach für die nicht vorhandene 10er-Stelle ein Blank gesetzt und danach positionierst du immer auf 1,10, d.h. die "12V" werden überschrieben durch " 3V". Oder du wertest direkt die Länge des Strings 'Ausgabe' aus:
1 | if len(Ausgabe) < 8 then Ausgabe = " " + Ausgabe |
2 | Locate 1,10 |
3 | lcd Ausgabe |
Ersteres ist aber einfacher und eingängiger.
bascom beherscht auto-formatierung. für den code kann bascom nix. aber formartieren kann er es. grrrr.......
no_1 schrieb: > bascom beherscht auto-formatierung. > für den code kann bascom nix. > aber formartieren kann er es. > > grrrr....... BASCOM kann das vielleicht schon, das Formatieren. Aber viele seiner Nutzer finden den Knopf dafür nicht ;-)
Paul P. schrieb: > if volt <10 then Ausgabe = " " + Ausgabe > Locate 1,10 > lcd Ausgabe Daran habe ich gar nicht gedacht, dass das LCD nicht gelöscht wird - ansonst wäre ja die Zehnerstelle weg. Aber dann flackert das LCD. Dein Lösungsvorschlag ist OK! Danke Paul. @ no_1 > bascom beherscht auto-formatierung. dann man raus mit der Sprache ...
:
Bearbeitet durch User
Dim Wert As Integer Dim Text As String * 10 Dim Volt As Single Dim Adc_max As Integer Dim Faktor As Single Dim Sp_teiler As Single Dim Uref As Single Dim Spaces As Byte Cursor Off Cls Adc_max = 1023 Uref = 5 Sp_teiler = 200 '(R1+R2)/R2 (mit R2 gegen Bezugspunkt) Faktor = Uref * Sp_teiler Faktor = Faktor / Adc_max Do Wert = Getadc(0) Volt = Wert * Faktor Text = Fusing(volt , "#.##") + " V" Spaces = 10 - Len(text) Locate 1 , 11 Lcd Spc(spaces) ; Text Locate 2 , 1 Lcd "Spaces: ";Spaces Waitms 30 Loop End 'Sp-teiler' ist das Verhältnis des Spannungsteilers, falls du höhere Spannungen als Vcc messen willst. Zum Testen bis Anzeige "1000.00 V" habe ich ihn auf 200 gesetzt. Für Messungen bis 5.00 V steht er auf 1.
Ich seh grad, du hast ein 16x2 Display, das Beispiel ist für meine 20x4. Einfach Locate 1,7 setzen, für den Test mit 4 Stellen vor dem Komma. Für 2 Vorkommastellen: Spaces = 8 - Len(text) Locate 1 , 9 P.S. Spaces darf nicht 0 sein, sonst macht Bascom 255 Leerzeichen... :)
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.