Salvador
28.04.2008, 12:42
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 ^^ :
'--------------------------------------------------------------------------'
' 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).
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 ^^ :
'--------------------------------------------------------------------------'
' 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).