Hi Leute,

wollte mal die funktion Sin in Bascom ausprobieren. Geht nicht:

E ist Integer
F ist Integer
G ist Long

(hab auch schon alle Variationen durch mit Integer, Long und Single)

E = E + F
G = sin (e)

Hier kommt der Fehler: Integer or Long expected for ABS()

das ganze mit g=e*sin geht auch nicht, es kommt jedes mal der Fehler:

source variable does not match the target variable

Wenn ich G=sin(1) programmiere geht es, aber Variablen mag Bascom in der Klammer wohl nicht sehn?!

Wer sich das ganze antun will kann mal reinschauen, aber vorsicht, die Kommentare stimmen nicht und ich bin Bascom newbie und kann die wenigsten Befehle richtig programmieren, also nicht wundern wie das programmiert wurde ^^ :

Code:
'--------------------------------------------------------------------------'
'                        Ingo Lippenberger                                 '
'                   2007-Keine Gewähr auf Funktion                         '
'                          Freeware                                        '
'--------------------------------------------------------------------------'

$regfile = "m8def.dat"                                      'definieren des verwendeten Chips
$crystal = 8000000                                          'definieren des verwendeten externen Quarz (8MHz)
$baud = 9600                                                'definieren der Baudrate
$framesize = 32                                             'notwendig für größere Programme
$swstack = 32
$hwstack = 32


Dim A As Integer                                            'dimensionieren der verwendeten Variable
Dim B As Integer
Dim C As Integer
Dim D As Integer
Dim E As Integer
Dim F As Integer
Dim G As Long
Dim Abs As Long

Dim W As Long                                               'dimensionieren der verwendeten Variable
Dim X As Long
Dim Y As Long

Config Int1 = Rising                                        'configuriere Int0 Auf Low Level
Enable Interrupts                                           'einschalten der Interrupts
Enable Int1                                                 'einschalten Von Interrupt Int0
On Int1 Einstellen                                          'springe Zu einstellen_von _int0


 Config Portd.5 = Output
 Config Portd.6 = Output                                    'Ein Pin wird als Ausgang konfiguriert
 Config Portd.7 = Output                                    'Ein Pin wird als Eingang konfiguriert
 Config Pind.2 = Input
 Config Pind.3 = Input
 Config Pind.4 = Input
 Config Portc.1 = Output
 Config Portc.2 = Output
 Config Portc.3 = Output
 Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

 Led1 Alias Portd.5
 Led2 Alias Portd.6                                         'Portd.5 wird umbenannt zu Led1
 Summer Alias Portd.7
 Taster1 Alias Pind.2
 Taster2 Alias Pind.3
 Taster3 Alias Pind.4
 Ausgang1 Alias Portc.1
 Ausgang2 Alias Portc.2
 Ausgang3 Alias Portc.3


A = 500




Einstellen:

Led1 = 1
Led2 = 1

Do

If Taster1 = 1 Or Taster2 = 1 Or Taster3 = 1 Then
Waitms 1000
End If

If Taster1 = 1 And Taster2 = 1 And Taster3 = 1 Then
Led1 = 0
Led2 = 0
Return
End If

If Taster1 = 1 And Taster2 = 1 And Taster3 = 0 Then
A = A * 2
End If

If Taster1 = 0 And Taster2 = 1 And Taster3 = 1 Then
A = A / 2
End If

If Taster1 = 1 And Taster2 = 0 And Taster3 = 0 Then
Gosub Sinus
End If

If Taster1 = 0 And Taster2 = 0 And Taster3 = 1 Then
Gosub Dreieck
End If

If Taster1 = 0 And Taster2 = 1 And Taster3 = 0 Then
Gosub Rechteck
End If

Print A

Loop

   Sinus:

   B = A + A
   E = 0
   F = 0

   Do

   D = A / 10
   E = E + F
   G = Sin * E
   Y = G * 5
   Gosub Angleichvorgang
   F = F + 36

   If F > 300 Then
   F = 0
   End If

   Loop

      Dreieck:

      B = A + A
      E = 1
      F = 1

      Do

      D = A / 10
      Y = 0.5 * E
      Gosub Angleichvorgang
      E = E * F

      If E = 10 Or E = 1 Then
      F = F * -1
      End If

      Print "stufe" ; E
      Print "zählrichtung" ; F
      Print W ; "sollwert"
      Print "Frequenz" B "in ms"

      Loop


         Rechteck:
         B = A + A
         Print "Frequenz" B "ms"

         Do

         Led1 = 1
         Ausgang1 = 1
         Ausgang2 = 1
         Ausgang3 = 1
         Waitms A
         Led1 = 0
         Ausgang1 = 0
         Ausgang2 = 0
         Ausgang3 = 0
         Waitms A

         Loop



Angleichvorgang:


Do

W = Getadc(0)
X = W / 204.8

If X < Y Then
Led1 = 1
Led2 = 0
Ausgang1 = 1
Ausgang2 = 1
Ausgang3 = 1
End If

If X > Y Then
Led1 = 0
Led2 = 1
Ausgang1 = 0
Ausgang2 = 0
Ausgang3 = 0
End If

Waitms 1

Incr C

If C = D Then
Return
End If

Loop


End
PS: Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Das hab ich einfach mal von dem Sinus- Beispiel von der Bascom Hilfe reinkopiert, bringt aber auch keine Besserung (ich weis nichtmal was man damit festlegt).