.: robotitaly.NET :. - la community italiana sulla robotica  

Vai indietro   .: robotitaly.NET :. - la community italiana sulla robotica > Prodotti DROIDS > 990.005 MuIn - Multi Inteface Board

Rispondi
 
Strumenti della discussione Modalità di visualizzazione
  #1  
Vecchio 04-12-2013, 08:14 AM
peppe89kl peppe89kl non è collegato
Nuovo Roboter
 
Registrato dal: Mar 2013
Messaggi: 8
predefinito srf08 problema acquisizione 12c

Ciao a tutti.
Sto lavorando ad un progetto in cui devo acquisire una misura di distanza da un sensore ad ultrasuoni (srf08), ma la routine non funziona come dovrebbe, in quanto non riesco a comunicare con il sensore, in particolare quando provo a leggere il bus dati rimane allo stato iniziale, cioè non ricevo nulla...
Il codice che ho scritto è il seguente:
codice:
#include <p18f2520.h>  
#include <adc.h>         
#include <usart.h>       
#include <delays.h>    
#include <stdlib.h>  
#include <i2c.h>    


#pragma config OSC = HSPLL	    
#pragma config WDT = OFF		 
#pragma config LVP = OFF		

int address1=0xE2;
unsigned char cmdCm=0x51;		//result in centimeters
unsigned char cmdRange=0x32;    //massima distanza 2.3m

unsigned char cmdGain=0x04;
unsigned char registroCm=0x00;
unsigned char registroGain=0x01;
unsigned char registroRangeAndEcho1=0x02;
unsigned char d1;

char dato[5];
void main()
{

	LATA = 0x00;       
 	TRISA = 0b0000000;
        LATB = 0x00;
        TRISB = 0b00000000;
        LATC = 0x00;
        TRISC = 0b00000000;
		 
OpenUSART( USART_TX_INT_OFF &
                USART_RX_INT_OFF &   			 
                USART_ASYNCH_MODE &				
                USART_EIGHT_BIT &				
                USART_CONT_RX &
                USART_BRGH_HIGH,129 );


	//inizializzo la comunicazione con l'SRF08
		OpenI2C(MASTER, SLEW_OFF);
		SSPADD=99;

		// imposto il range 
		StartI2C();
                        IdleI2C();
			WriteI2C(0XE2);           //indirizzo con permesso a scrivere
			IdleI2C();
			WriteI2C(registroRangeAndEcho1);   
			IdleI2C();
			WriteI2C(cmdRange);          //valore da mettere nel registro
			IdleI2C();
		StopI2C();
		
	
		// imposto il guadagno
		StartI2C();
            IdleI2C();
			WriteI2C(0XE2);            //indirizzo con permesso a scrivere
			IdleI2C();
			WriteI2C(registroGain);
			IdleI2C();
			WriteI2C(cmdGain);
			IdleI2C();
		StopI2C();


//Lettura della distanza
	while(1)
	{
		Delay10KTCYx(100);
			
		StartI2C();
                                IdleI2C();
				WriteI2C(0XE2);
				IdleI2C();
				WriteI2C(registroCm);
				IdleI2C();
				WriteI2C(cmdCm);
			StopI2C();
			

			Delay10KTCYx(100);

			
			// effettuo la lettura
			StartI2C();
		                IdleI2C();
				WriteI2C(0XE2);
				IdleI2C();
				WriteI2C(registroRangeAndEcho1); 
				IdleI2C();
				RestartI2C();
				
				Delay10KTCYx(100);

				WriteI2C(0XE3);      //indirizzo + permesso a leggere
				IdleI2C();
				d1=ReadI2C();
		                IdleI2C();
			StopI2C();
			// end
							
			
			while(BusyUSART());
            WriteUSART(d1);
			
 			Delay10KTCYx(100);          
			
	}
}
Qualcuno saprebbe dirmi quale può essere il problema? Ho provato ad eliminare i vari idle quando non sono strettamente necessari, ma il risultato non cambia.
Rispondi quotando
  #2  
Vecchio 04-13-2013, 10:17 AM
blueice80 blueice80 non è collegato
Roboter Attivo
 
Registrato dal: Mar 2009
Messaggi: 89
predefinito

Al posto di scrivere
codice:
StartI2C();
IdleI2C();
WriteI2C(0XE2);           //indirizzo con permesso a scrivere
IdleI2C();
WriteI2C(registroRangeAndEcho1);   
IdleI2C();
WriteI2C(cmdRange);          //valore da mettere nel registro
IdleI2C();
StopI2C();
prova ad usare questa funzione (si usa per la eeprom ma va bene comunque):
codice:
EEByteWrite(0xE2, registroRangeAndEcho1, cmdRange);
e per leggere i valori usa:
codice:
d1=EERandomRead(0xE2, registro);
Rispondi quotando
Rispondi

Segnalibri

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilie sono attive
Il codice IMG è attivo
il codice HTML è disattivato

Salto del forum


Tutti gli orari sono GMT. Attualmente sono le 08:11 AM.


Powered by vBulletin versione 3.8.7
Copyright ©: 2000 - 2017, Jelsoft Enterprises Ltd.