PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Floating Point mit sin()



Andy1988
31.08.2006, 00:30
Hallo,
Ich hab grade eben mal angefangen ne kleine Software für meinen Omniwheel-Bot zu bauen.
Ich hab da mit meinem Mathelehrer ne kleine Funktion gebastelt, die mit dem Sinus arbeitet und eigentlich so funktionieren müsste.
Nur kompiliert Bascom genau das nicht. ABS() will angeblich immer einen Integer oder Long.
Dabei benutz ich die Funktion gar nicht und wie kann bei sin() ein Integer rauskommen? Es sei denn das wird noch mit 100 multipliziert.

Könnt ihr mir helfen?

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

Config Pind.4 = Output 'OC1A
Config Pind.5 = Output 'OC1B
Config Pind.7 = Output 'OC2

Config Pina.3 = Output 'A IN 1
Config Pina.4 = Output 'A IN 2
Config Pina.5 = Output 'B IN 1
Config Pina.6 = Output 'B IN 2
Config Pina.7 = Output 'C IN 1
Config Pinc.0 = Output 'C IN 2

Porta.3 = 1
Porta.5 = 1
Porta.7 = 1


Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1
'Config Timer2 = Pwm , Compare A Pwm = Clear Up , Prescale = 1

' TIMER2
' may control another chopper, phase 90
'won't work with BASCOM!
'Config Timer2 = Pwm , Compare Pwm = Clear Up , Prescale = n
'her is hard coded replace
' 7 = 0 always in PWM mode
' 6:3 = 11 Fast PWM 8bit
' 5:4 = 10 clear on compare match
' 2:1:0 = 001 / 1 ; 010 / 8 ; 011 / 32 : 100 / 64 : 101 / 128 : 110 / 256 : 111 / 1024 Prescale
' / 1 ~ 8MHz used
Tccr2 = &B01101001
Ocr2 = 0



Dim Motor1 As Single
Dim Motor2 As Single
Dim Motor3 As Single

Dim I As Integer

Do

For I = 1 To 360
Motor1 = Sin(i)
Motor2 = Sin(i -((2 / 3) * 3.14159265358979))
Motor3 = Sin(i -((1 / 3) * 3.14159265358979))
Next

'Compare1a = 75
'Compare1b = 75
'Ocr2 = 75
Loop

digitali
31.08.2006, 08:30
Motor2 = Sin(i -((2 / 3) * 3.14159265358979))
Motor3 = Sin(i -((1 / 3) * 3.14159265358979))


Hallo,

also meines Wissens kann Bascom nicht mehrere Berechnungen in einer Zeile durchfuehren. Das duerfte schonmal den ersten Fehler beim Compilieren erzeugen. Solche Berechnungen muss man in einzelne Schritte aufloesen. Vielleicht hat sich das aber im letzten Bascom-Update geaendert? ;)

Mit freundlichen Gruessen
Digitali

PicNick
31.08.2006, 08:51
sin() erwartet ein Bogenmaß als input. 0-360 geht nicht.

Andy1988
31.08.2006, 14:18
Ah ok. Dazu gibts ja auch noch Funktionen, die das Umformen.

Danke!