Hi Leute,
so nun hab ich meinen Überwachungsroboter "Alarmbot" fast fertig
Ich habe zuerst die Kompassrichtung immer über den PWM ausgelesen
aber das stellt sich als nicht so zuverlässig dar.
GRUND: PWM Motorspitzen und die allgemeine Genauigkeit lässt durch alle
möglichen Störeinflüsse die Genauigkeit sinken.
Da wir ja schon an anderer Stelle hier im Forum mal über eine I²C Lösung mit PicBasic oder Proton+ geräzelt haben hier nun die Lösung wie es geht.
PS: So ne 405 Seitige Englische Anleitung von Proton+ ist sehr Interessant, mir hats viel gebracht bis jetzt
Code:
'****************************************************************
'* Name : I2C_Compass.BAS *
'* Author : Sommer xxxx *
'* Notice : Copyright (c) 2005 *
'* : All Rights Reserved *
'* Date : 09.05.2005 *
'* Version : 1.0 *
'* Notes : CMPS03 I2C Test *
'* : *
'****************************************************************
'===========================================================================================
'---[ PIC CONFIG ]--------------------------------------------------------------------------
'===========================================================================================
Device 16F877
XTAL = 4
SCL_PIN = PORTC.3 'Clock PIN
SDA_PIN = PORTC.4 'Data pin
'===========================================================================================
'---[ Variablen ]---------------------------------------------------------------------------
'===========================================================================================
Dim ARRAY[10] AS BYTE
X var Word 'Schleifenzähler
CMPS1 var Word 'Kompasswert als Byte
CMPS1_L var Word 'Kompasswert als Word
CMPS2 var Word
CMPS2_L var Word
'===========================================================================================
MAIN_THREAD: '-----------------------------------------------------------------------------
'===========================================================================================
BSTART 'Busstart
BUSOUT $C0 'Ziel ist Adresse 0xC0
BUSOUT 0 'Erst high Byte
BUSOUT 0 'dann low Byte
BRESTART 'Bus neustart
BUSOUT $C1 'mit read/write bit 0xC1
CMPS1 = BUSIN 'lese Register 1 // Wert 0 --> 255
BUSACK 'erneutes ACK
CMPS2 = BUSIN 'lese Register 2,3 // Wert 0 --> 3599
BSTOP 'Busstop
SEROUT PORTC.6,84, [dec4 CMPS1,"...",dec4 CMPS2,10,13] 'Ausgabe der Werte über RS232 (9600Baud)
delayms 500 '500ms Pause damit man auch was sieht :-)
goto MAIN_THREAD 'Endlosschleife]
Also viel Spaß beim testen und Basteln.
Bye euer Ulli
Lesezeichen