Forum: Mikrocontroller und Digitale Elektronik AVR: Bascom / waitms / mit Variable


von Tony H. (maxton)


Lesenswert?

Bascom 1.11.9.3, ATMega32, STK500

Hallo,

ich hänge an folgendem Problem und komme nicht weiter:
Über einen ATMega32 lese ich am ADC0 ein analoges Signal ein, bearbeite 
es und will den Wert in einem waitms-Befehl verarbeiten:
1
Dim Adc0 As Word
2
Dim Adc01 As Single
3
Dim Tdelay As Single 
4
5
Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56
6
7
Start Adc
8
9
Begin:
10
11
Do
12
13
Adc0 = Getadc(0)
14
15
Adc01 = Adc0
16
17
Adc01 = Adc01 / 100
18
19
Adc01 = Round(adc01)
20
21
Tdelay = 10 + Adc01
22
23
LCD Tdelay 'funktioniert; gewollter ganzzahliger Wert zwischen 10 und 20
24
25
PORTB.0 = 1
26
27
waitms Tdelay
28
29
PORTB.1 = 1
30
31
Loop
32
33
End
Leider wird der wait-Befehl einfach übersprungen und an beiden Ausgängen 
liegt gleichzeitig ein Signal an. Woran kann es liegen?

Das Programm ist so nicht vollständig, ich habe nur das dargestellt, was 
für das Problem interessant sein sollte. Kann Bascom mit "wait" 
überhaupt Variablen verarbeiten? Dass es nicht geht, habe ich bisher nur 
über den "waitus"-Befehl in der Hilfe lesen können.

Gruß,

maxton

von gast (Gast)


Lesenswert?

weil wait und delay  außerhalb von initialisierungen  eh unsinnig sind 
^^
und tunlichst vermieden werden sollten

von Tony H. (maxton)


Lesenswert?

Ja das hilft mir nicht unmittelbar weiter, aber danke.
Ob es die feinste Art der Programmierung ist, sei dahin gestellt. Nur 
wenn es mit einem festen Zahlenwert geht, sollte es doch auch mit einer 
Variable gehen!?

von E.T. (Gast)


Lesenswert?

statt waitms tdelay:

for i = 1 to tdelay
   waitms 1
next i

der Fehler durch die paar mikrosekunden für die For-SChleife dürfte 
gering sein und sinkt mit steigendem Systemtakt noch weiter.

von E.T. (Gast)


Lesenswert?

.. und falls Deine Ports auch irgendwann wieder 0 werden sollen müßtest 
Du sie natürlich auch irgendwo wieder ausschalten.. :-)

von Gast (Gast)


Lesenswert?

funktioniert nicht, weil der Wert für waitms ein Word (16Bit) sein muss 
und kein Single (32Bit).

von Tony H. (maxton)


Lesenswert?

Danke euch. Damit sollte ich schon mal weiterkommen.

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.