-         

Ergebnis 1 bis 4 von 4

Thema: Floating Point mit sin()

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2004
    Ort
    Nettetal
    Alter
    29
    Beiträge
    107

    Floating Point mit sin()

    Anzeige

    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?
    Code:
    $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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.11.2005
    Ort
    QTH: JO43BC
    Alter
    49
    Beiträge
    112
    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

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    sin() erwartet ein Bogenmaß als input. 0-360 geht nicht.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    20.08.2004
    Ort
    Nettetal
    Alter
    29
    Beiträge
    107
    Ah ok. Dazu gibts ja auch noch Funktionen, die das Umformen.

    Danke!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •