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
Lesezeichen