BASTIUniversal
03.03.2006, 13:03
Hallo!
Ich hab da ein kleines Problem mit einer Function. Ich möchte, je nach dem was über die SPI-Schnittstelle angekommen ist, einen ADC auslesen.
Da ich 3 Werte des ADC auslesen möchte und einen Mittelwert daraus berechnen will, hab ich mir gedacht das ich dafür eine Funktion benutze (hab ich bisher noch nie gemacht).
In der Simulation klappt das aber nicht so recht, hier mal ein paar Code-Fetzen:
Declare Function Adcx(byval Adcnummer As Byte) As Byte
.
.
Adcsr = &B10000101 'ADC konfigurieren
.
.
Select Case A 'Je nachdem was über SPI gekommen ist...
Case 0 : C = Adcx(32)
Case 1 : C = Adcx(&B00100001)
End Select
.
.
Function Adcx(byval Adcnummer As Byte) As Byte
Local B0 As Byte , B1 As Byte , B2 As Byte , B3 As Byte , B4 As Byte
Local X0 As Byte
Admux = Adcnummer
X0 = 0
For B4 = 0 To 2
Adcsr.adsc = 1
While Adcsr.adif = 0
Wend
Select Case B4
Case 0 : B1 = Adch
Case 1 : B2 = Adch
Case 2 : B3 = Adch
End Select
Next
B0 = B1 + B2
B0 = B0 + B3
B0 = B0 / 3
Adcx = B0
End Function
Laut dem Simulator von Bascom wird anstatt der Zahl "32" nur "186" übergeben, und das Bit im Register Adcsr.adsc (also ADC Starten) wird auch nicht gesetzt.
In folge dessen kommt das Programm auch nicht mehr aus der While...Wend Schleife (wenn der ADC nicht läuft kann das Flat Adif auch nicht gesetzt werden).
Kann ich überhaupt Zahlen in eine Function übergeben und dort Register ändern?
MfG
Basti
Ich hab da ein kleines Problem mit einer Function. Ich möchte, je nach dem was über die SPI-Schnittstelle angekommen ist, einen ADC auslesen.
Da ich 3 Werte des ADC auslesen möchte und einen Mittelwert daraus berechnen will, hab ich mir gedacht das ich dafür eine Funktion benutze (hab ich bisher noch nie gemacht).
In der Simulation klappt das aber nicht so recht, hier mal ein paar Code-Fetzen:
Declare Function Adcx(byval Adcnummer As Byte) As Byte
.
.
Adcsr = &B10000101 'ADC konfigurieren
.
.
Select Case A 'Je nachdem was über SPI gekommen ist...
Case 0 : C = Adcx(32)
Case 1 : C = Adcx(&B00100001)
End Select
.
.
Function Adcx(byval Adcnummer As Byte) As Byte
Local B0 As Byte , B1 As Byte , B2 As Byte , B3 As Byte , B4 As Byte
Local X0 As Byte
Admux = Adcnummer
X0 = 0
For B4 = 0 To 2
Adcsr.adsc = 1
While Adcsr.adif = 0
Wend
Select Case B4
Case 0 : B1 = Adch
Case 1 : B2 = Adch
Case 2 : B3 = Adch
End Select
Next
B0 = B1 + B2
B0 = B0 + B3
B0 = B0 / 3
Adcx = B0
End Function
Laut dem Simulator von Bascom wird anstatt der Zahl "32" nur "186" übergeben, und das Bit im Register Adcsr.adsc (also ADC Starten) wird auch nicht gesetzt.
In folge dessen kommt das Programm auch nicht mehr aus der While...Wend Schleife (wenn der ADC nicht läuft kann das Flat Adif auch nicht gesetzt werden).
Kann ich überhaupt Zahlen in eine Function übergeben und dort Register ändern?
MfG
Basti