Atmega8, Bascom: erste Gehversuche

OP #4367237
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
Angehängte Dateien:
#4367251
@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
#4367541
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.
OP #4367623
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 ...
Gast #4368386
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.
Gast #4368398
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... :)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.