PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Werter kleiner 0,51 addieren?



Maxxtro
31.12.2008, 13:45
Hallo allerseits,

ich habe eine Frage/ein Problem beim programmieren in Bascom - vorweg, ich bin Anfänger O:)

Ich möchte mit folgendem, zugegeben sehr primitivem Code


$regfile = "m8def.dat"
$crystal = 8000000

Config Pind.5 = Output
Config Pind.6 = Output

Led1 Alias Portd.5
Led2 Alias Portd.6


Dim Laenge As Byte
Laenge = 1


Do

Led1 = 1
Waitms 1
Led1 = 0
Waitms Laenge


Laenge = Laenge + ?

If Laenge > 30 Then Laenge = 1

Loop
End


(vorerst) eine LED aus"faden" und anschliesend wieder aufblitzen usw. lassen.

Wenn ich nun an der Stelle des Fragezeichens eine Zahl größer als 0,5 (.5) eingebe funktioniert das ganze, nur leider zu schnell. Gebe ich allerdings eine Zahl gleich oder kleiner 0,5 ein, so passiert im Endeffekt überhaupt nichts mehr, die LED leuchtet nur noch.

Warum ist das so? Und wie kann ich das ändern?

MfG,
maxxtro

linux_80
31.12.2008, 13:56
Hallo,

Du kannst hier nur mit ganzen Zahlen rechnen, Werte grösser 0.5 werden deshalb zu 1, kleinere zu 0.

Wenn Du genauere Wartezeiten haben möchtest, kannst Du es evtl. mit waitus für microsekunden probieren, die Werte aber dann entsprechend umrechnen.

PS:
Man kann aber nur Kostanten verwenden,
deswegen geht das mit waitus garnicht !

Dirk
31.12.2008, 13:56
Hallo Maxxtro,

der Befehl Waitms funktioniert nicht mit Variablen (also mit deiner Variable "Laenge"), sondern nur mit festen Werten (Konstanten).

Gruß Dirk

Maxxtro
31.12.2008, 17:11
Ah, vielen danke für euere Antworten!

Aber wie kann ich das Problem jetzt am geschicktesten umgehen? :-s

for_ro
31.12.2008, 17:16
@Dirk
ich denke, du meintest den Befehl Waitus, der nicht mit Variablen funktioniert.
Waitms geht, aber der dauert ihm zu lange.

@Linux_80
Waitus würde z.B. in einer Schleife funktionieren, nur muss man dann noch den Overhead der Schleifenbefehle bedenken.
Do
Waitus 100
Incr Zaehler
Loop Until Zaehler = Laenge

@Maxxtro
schau mal in der Hilfe unter Config Timer = PWM oder in der Suche nach PWM. Langsames Ausgehen kannst du über Puls-Weiten-Modulation hinbekommen. Dies geht hardware unterstützt, aber auch durch software. Bei beiden benutzt du einen Timer für die genauen, veränderlichen Schaltzeiten.

Gruß

Rolf

Maxxtro
27.01.2009, 16:42
So, nun gibts ein neues Problem, das eigentlich wieder das gleiche ist...
Ich bin am Temperatur messen - mit einem NTC... usw.
Um jetzt den Wert des ADC in eine Temperaturangabe umzuwandeln, muss der Wert des ADC in folgende Formel eingesetzt werden
f(x) = -0,0000499459x² - 0,0272477731x + 42,7370953761
Nur gehe ich (ohne es probiert zu haben) davon aus, dass sich so wieder nicht damit rechnen lässt, da die Parameter ja keine ganzen Zahlen mehr sind.

Nun, gibt es eine Lösung für das Problem?

MfG,
Maxxtro