PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SRF02 kann nicht abgefragt werden



jogsen
22.02.2007, 09:10
Hallo,

ich kann die gemessenen Werte nicht auslesen.

Kann mir jemand sagen was ich falsch mache.




#include "system.h"
#include "PIC16F877A.h"

#pragma CLOCK_FREQ 20000000

#pragma DATA 0x2007, _HS_OSC & _WDT_OFF & _PWRTE_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _DEBUG_ON & _CP_OFF

char RxHiData;
char RxLoData;

void Bus_reservieren();
void Bus_freigeben();

void main()
{
set_bit (trisc,3); // RC3 als Eingang
set_bit (trisc,4); // RC4 als Eingang
sspadd = 12;
sspcon = 8; // Master Mode
set_bit (sspcon, 5); // IIC einschalten

while (1)
{

Bus_reservieren();

sspbuf = 0xE4;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet

sspbuf = 0x0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet

sspbuf = 0x51;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Befehl gesendet

Bus_freigeben();

delay_ms(65); // warten

Bus_reservieren();

sspbuf = 0xE0;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet

sspbuf = 0x02;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Register gesendet

Bus_freigeben();

// bis hier scheint er fehlerfrei zu laufen

Bus_reservieren();

sspbuf = 0xE1;
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Adresse gesendet

set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxHiData = sspbuf; // Byte gelesen

set_bit (sspcon2, 4); // Ack senden

set_bit (sspcon2 ,3);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3);
RxLoData = sspbuf; // Byte gelesen

Bus_freigeben();
}

}

void Bus_reservieren()
{
clear_bit (pir1, 3);
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus übernommen
}
void Bus_freigeben()
{
set_bit (sspcon2, 0);
while (!(test_bit( pir1, 3)));
clear_bit (pir1, 3); // Bus freigegeben
}

Danke im voraus.