PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie genau ist Waitms?



lektrikman1001
28.02.2006, 22:16
Hallo,

Hab ein Poti am AD dran, was ich auslese und an Waitms ranhänge

z.b.

Do

Wert = Getadc(0)
Waitms Wert
Toggle Portb.1

Loop

am Portb.1 hängt ein kleiner Lautsprecher, wo ein Ton entsteht.
Das funzt auch soweit, der Ton ändert sich auch wenn man am Poti dreht.
Der Ton steigt nicht gleichmässig an, sondern mehr stufig.

Hat jemand da einen Idee oder anhaltspunkt warum das sein kann? Bin nicht der Held wenn es um Bascom geht.

Gruß

Torsten_G
28.02.2006, 22:32
Ganz einfach:

Du drehst am Poti und das Programm hängt derweil im Waitms-Befehl.
Der Analogwert wird ja erst wieder gelesen, wenn die Wartezeit abgelaufen ist.
Das "merkst" Du dann aber erst bei niedrigen Frequenzen.

Das nächste Problem ist höchstwahrscheinlich die Auflösung.
Mit einer Millisekunde Wartezeit erzeugst Du ein 500Hz-Signal. Mit 2ms 250Hz, u.s.w. Die Sprünge werden zwar mit abnehmender Frequenz kleiner, aber da schlägt dann schon das oben geschilderte Problem zu...

Versuchs mal mit "Waitus Wert", dann sollte es etwas besser werden.

Mit Bascom an sich hat das eigentlich nichts zu tun... O:)

Viele Grüße

Torsten

lektrikman1001
28.02.2006, 23:16
@Torsten_G
Danke für die schnelle Antwort.

Anders gefragt, wie bekomme ich es hin das von 0Hz bis 1kHz fast stufenlos gleichmässig abdecken kann.

>Mit Bascom an sich hat das eigentlich nichts zu tun...
das stimmt! deshalb ja auch ----> "Bin nicht der Held" wenn es ums Bascom geht.


Gruß

Windi
28.02.2006, 23:53
Versuchs mal mit "Waitus Wert", dann sollte es etwas besser werden.

Geht leider nicht.
Schau Dir mal die Syntax von Waitus an.

Syntax
WAITUS uS

Remarks

US The number of microseconds to wait. (1-65535)
This must be a constant. Not a variable!

Das kann man dann höchstens in eine for-next-Schleife packen.

Ratber
01.03.2006, 06:24
Anders gefragt, wie bekomme ich es hin das von 0Hz bis 1kHz fast stufenlos gleichmässig abdecken kann.


Das ist zwar nicht komplex aber auch nicht mal eben mit 5 Zeilen zu erledigen.

Das Poti soll ja nur als Bedienelement eingesetzt werden und da der Bediener kaum mit Überschallgeschwindigkeit daran herumdoktert ist es auch nicht nötig es pausenlos abzufragen.

20x die Sekunde reicht auch.
Damit wir mit x=Getadc(y) nicht sinnlos auf dsie Konversion warten müssen sollte man das ganze über den Interrupt erledigen.
Dh. die Wandlung wird gestartet und erst wenn der IRQ kommt wird schnell ausgelesen.
Damit ist die Sollwertvorgabe auf ein Minimum an Rechenzeit beschränkt.
Die Samplerate kannste später noch anpassen.

Die Frequenzerzeugung würde ich über einen Timer erledigen (Periodendauer) dann bist du relativ Präzise und da der Timer ebenfalls wie der AD-Wandler für sich alleine Arbeitet kannst du auch hier Rechenzeit einsparen.


Mein Tip:

Fress dich durch das Handbuch(oder Hilfe oder PDF usw.) und mach dich mit den beiden oben angesprochenen Vertraut.
Is eine super Möglichkeit die vielen Spielarten von Timer und ADC zu erlernen und,was viel wichtiger ist,auch zu begreifen