AD-Wert dezimal augeben

OP (Firma: hab keine) #1614023
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
OP (Firma: hab keine) #1614412
Lesenswert?

Hey! Danke ;-)

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

7
Config Portd = Output
8

9

10
Dim W As Word
11
Dim V As Single
12
Const Prescale_value = 10 / 1024
13
Config Portc.0 = Input
14
Portc.0 = 1
15

16

17
If Portc.0 = 0 Then
18
Gosub Ad_start
19
End If
20

21

22
Ad_start:
23

24

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

27
W = Getadc(0)
28
V = Prescale_value * W
29

30
V = Round(v)
31

32
If V < 1 Then
33
Portd = 0
34
Elseif V > 1 Then
35
Portd.0 = 1
36
Waitms 1000
37
Elseif V > 2 Then
38
Portd.0 = 1
39
Portd.1 = 1
40
Waitms 1000
41
Elseif V > 3 Then
42
Portd.0 = 1
43
Portd.1 = 1
44
Portd.2 = 1
45
Waitms 1000
46
Elseif V > 4 Then
47
Portd.0 = 1
48
Portd.1 = 1
49
Portd.2 = 1
50
Portd.3 = 1
51
Waitms 1000
52
Elseif V > 5 Then
53
Portd.0 = 1
54
Portd.1 = 1
55
Portd.2 = 1
56
Portd.3 = 1
57
Portd.4 = 1
58
Waitms 1000
59
Elseif V > 6 Then
60
Portd.0 = 1
61
Portd.1 = 1
62
Portd.2 = 1
63
Portd.3 = 1
64
Portd.4 = 1
65
Portd.5 = 1
66
Waitms 1000
67
Elseif V > 7 Then 'Überspannungsanzeigecode (3 LEDs an)
68
Portd.1 = 1
69
Portd.3 = 1
70
Portd.5 = 1
71
End If
72

73
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
Persönliche Seite #1614615
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:
1
Do
2
  If Portc.0 = 0 Then
3
    Gosub Ad_start
4
  End If
5
Loop
6
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.
Gast #1614643
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

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