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
Deklariere die Variable in der das Ergebnis stehen soll einfach als Integer.
Dankepfööön! Wenn ich sowas mal selbst finden möchte, wo kann man das suchen? Gruß Marvin
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
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.
Stefan hat Recht: Pinc.0 ist richtig zum Abfragen. Du könntest mit "Select-Case" noch die Abfragen übersichtlicher machen. MfG Paul
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.