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