mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AD-Wert dezimal augeben


Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend!
Geht es, dass der µC sozusagen "rundet"?
Ich hab nämlich beim AD ein Wert, z.B. bei 10 Volt von 10/1024*Getad = 
Fließkommastelle.
Wie mach ich (in Bascom) aus dieser Fließkommastelle nur eine 
Dezimalzahl?
Ich komm einfach nicht drauf -.-, habt ihr ne Idee?

Gruß Marvin

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Samuel C. (dragonsam)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Deklariere die Variable in der das Ergebnis stehen soll einfach als 
Integer.

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dankepfööön!
Wenn ich sowas mal selbst finden möchte, wo kann man das suchen?


Gruß Marvin

Autor: Samuel C. (dragonsam)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
www.gidf.de

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
:D

Autor: Dr.PillePalle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Marvin K. (Firma: hab keine) (multi_bouncer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey! Danke ;-)

Jetzt hab ich meinen Code fertig gemacht
Jeder Ausgansport ist mit einer LED verbunden
:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portd = Output


Dim W As Word
Dim V As Single
Const Prescale_value = 10 / 1024
Config Portc.0 = Input
Portc.0 = 1


If Portc.0 = 0 Then
Gosub Ad_start
End If


Ad_start:


Config Adc = Single , Prescaler = Auto , Reference = Avcc

W = Getadc(0)
V = Prescale_value * W

V = Round(v)

If V < 1 Then
Portd = 0
Elseif V > 1 Then
Portd.0 = 1
Waitms 1000
Elseif V > 2 Then
Portd.0 = 1
Portd.1 = 1
Waitms 1000
Elseif V > 3 Then
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Waitms 1000
Elseif V > 4 Then
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Waitms 1000
Elseif V > 5 Then
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Waitms 1000
Elseif V > 6 Then
Portd.0 = 1
Portd.1 = 1
Portd.2 = 1
Portd.3 = 1
Portd.4 = 1
Portd.5 = 1
Waitms 1000
Elseif V > 7 Then 'Überspannungsanzeigecode (3 LEDs an)
Portd.1 = 1
Portd.3 = 1
Portd.5 = 1
End If

Return

Nur funktioniert da garnix, außer dass Portd.0 ab und zu high ist.
Stimmt das mit der Variable V? Die soll dann aus dem AD-Wert einen 
Dezimalwert mit einer Stelle machen..
Gibts ne einfachere Methode um je nach Spannung dementsprechende Anzahl 
an LEDs anzumachen?

Hoffe ihr könnt mir helfen ;-), denn gidf.de wills nicht..

Gruß Marvin

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bau deine If-Abfragen logisch auf.

Spiele mal µC: Wenn V gleich 8 ist, dann ist es auch >7 und >2 usw. Was 
denkst du in welchen If-Fall es in deinem Code reinrutscht? In den 
ersten im Programm zutreffenden und das ist der >1 Fall!

Also zuerst Abfragen ob >7, dann >6, dann >5... und nicht zuerst 
Abfragen >1, dann >2, dann >3...

Und wie oft soll das Programm laufen? Ich denke "ewig", d.h. solange 
Saft da ist und kein Reset gedrückt wird. Also gehört da eine 
Endlosschleife her:
Do
  If Portc.0 = 0 Then
    Gosub Ad_start
  End If
Loop
End

Bei der Abfrage auf Benutzereingabe (If Portc.0 = 0 Then) hätte ich in 
Assembler und in C Bauchweh, mag sein, dass das in BASCOM geht, aber in 
ASM und C fragt man nicht den PORTx ab sondern den PINx. Also hier 
nachforschen, falls du an dieser Stelle Probleme beim Testen hast.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan hat Recht: Pinc.0 ist richtig zum Abfragen.
Du könntest mit "Select-Case" noch die Abfragen übersichtlicher machen.

MfG Paul

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe gerade noch etwas Anderes: Wenn die Portpins an Port D einmal
gesetzt worden sind, bleiben sie gesetzt, auch wenn die Spannung wieder
sinkt. Du mußt also die Portpins an Port D wieder rücksetzen, wenn
das nicht als Peak-Anzeige gedacht sein sollte.

MfG Paul

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.