-
Ich arbeite mit dem SRF08-Modul. Mit dem SRF04-Modul habe ich eine Routine geschrieben in Assembler die eben die gesamte C-Control lahmlegt während der Messung. Das SRF-08 Modul hat den Vorteil das es selbstständig arbeitet durch die integrierte Logik. Das Ganze kann man auch besser an den eigens programmierten I²C-Bus hängen. Ein alter Stand als Basis den ich aber nicht mehr nutze hab ich hier mal reinkopiert. Den hab ich mal geschrieben und hatte meines Wissens noch Fehler, aber die kann man ja selbst noch beheben
Code:
Port1Data .EQU 1 ;Adresse Byteport 1 (Daten)
Port2Data .EQU 2 ;Adresse Byteport 2 (Daten)
Port1Dir .EQU 5 ;Adresse Byteport 1 (Richtung)
Port2Dir .EQU 6 ;Adresse Byteport 2 (Richtung)
SCL .EQU 0 ;Port 1 - I2C-Bus
SDA .EQU 1 ;Port 2 - I2C-Bus
Trigger .EQU 2 ;Port 3 - Ultraschall-Sonar
Echo .EQU 3 ;Port 4 - Ultraschall-Sonar
DistanzL .EQU $A5 ;Byte[5]
DistanzH .EQU $A6 ;Byte[6]
Param0 .EQU $91 ;Übergabeparameter 0 (intern)
Param1 .EQU $92 ;Übergabeparameter 1 an Routine
D0 .EQU 0 ;Bit 0
D7 .EQU 7 ;Bit 7
CCB_Get .EQU $0CB5 ;CCBASIC Get
CCB_PuWoSt .EQU $17B1 ;BeSy: Push Port auf Rechenstack
;----------------------------------------------------------------------------------------------
.ORG $0101
;----------------------------------------------------------------------------------------------
;-----------------------+----------------------------------------------------------------------
; Information zum Sonar | => @4MHz CPU-Takt : 1 Cycle = 0,5us
;-----------------------+ => eine Einheit : 18 Cycles = 9,0us
; => rechnerische Genauigkeit: 00,15cm = 1,5mm
;
; Distanz[Word] * 1716
; Formel: Entfernung[cm] = --------------------
; 2889 * fCPU[MHz]
;
; Distanz(cm) | Echo(ms) | Distanz(Word) | Kommentar:
; ------------+----------+---------------+-------------------------------
; 577,5 cm | 35,00 ms | 3889 | Kein Objekt erkannt
; 429,0 cm | 26,00 ms | 2889 | Maximale Entfernung (unsicher)
; 400,0 cm | 24,24 ms | 2694 | Im Messbereich (unsicher)
; 350,0 cm | 21,21 ms | 2357 | Im Messbereich (unsicher)
; 300,0 cm | 18,18 ms | 2020 | Maximale Entfernung (sicher)
; 250,0 cm | 15,15 ms | 1683 | Im Messbereich (sicher)
; 200,0 cm | 12,12 ms | 1349 | Im Messbereich (sicher)
; 165,0 cm | 10,00 ms | 1111 | Im Messbereich (sicher)
; 150,0 cm | 9,09 ms | 1010 | Im Messbereich (sicher)
; 100,0 cm | 6,06 ms | 673 | Im Messbereich (sicher)
; 50,0 cm | 3,03 ms | 337 | Im Messbereich (sicher)
; 16,5 cm | 1,00 ms | 111 | Im Messbereich (sicher)
; 10,0 cm | 0,61 ms | 67 | Im Messbereich (sicher)
; 3,0 cm | 0,18 ms | 20 | Im Messbereich (sicher)
; 1,6 cm | 0,10 ms | 11 | Im Messbereich (unsicher)
; 1,0 cm | 0,06 ms | 7 | Im Messbereich (unsicher)
; 0,1 cm | 0,01 ms | 1 | Minimale Entfernung (unsicher)
;
; Eventuell muß noch eine Konstante zum Messergebniss addiert oder subtrahiert werden um die
; Distanz abzugleichen. Dies erfolgt wiederum in 1,5mm-Schritten. Diese Daten sind Idealfall
;
;----------------------------------------------------------------------------------------------
Sonar: ; *** Auf eintreffendes Echo warten und messen ***
JSR GoPosMotoren ;GoSub GoPosMotoren
MesseEcho1: BRCLR Echo, Port1Data, MesseEcho1 ;If Not Echo Then GoTo Sonar
MesseEcho2: LDA #1 ;Distanz = Distanz + 1
ADD DistanzL
BCS MesseEcho3
NOP ;Zeitkorrektur um 1us
BRA MesseEcho4
MesseEcho3: INC DistanzH
MesseEcho4: BRCLR Echo, Port1Data, MesseEcho2 ;If Echo Then GoTo MesseEcho2
SonarEnde: RTS ;Zurück nach BASIC