Forum: Mikrocontroller und Digitale Elektronik AD-Wert dezimal augeben


von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Samuel C. (dragonsam)


Lesenswert?

Deklariere die Variable in der das Ergebnis stehen soll einfach als 
Integer.

von Marvin K. (Firma: hab keine) (multi_bouncer)


Lesenswert?

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


Gruß Marvin

von Samuel C. (dragonsam)


Lesenswert?

www.gidf.de

von Marvin K. (Firma: hab keine) (multi_bouncer)


Lesenswert?

:D

von Dr.PillePalle (Gast)


Lesenswert?


von Marvin K. (Firma: hab keine) (multi_bouncer)


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

von Stefan B. (stefan) Benutzerseite


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.

von Paul Baumann (Gast)


Lesenswert?

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

MfG Paul

von Paul Baumann (Gast)


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

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
Noch kein Account? Hier anmelden.