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
Also viel Spaß beim testen und Basteln.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]
Bye euer Ulli







Zitieren

Lesezeichen