Hallo zusammen ,ich hab ein Problem mit dem SRF02,ich hab bis jetzt nur falsche Messung bekommen. ich versuche euch zu erklären was ich genau mache:
-benutze ein STK500
-benutze die ATMEGA8515L
-SRF02
-programmiere mit dem AVR studio 4 also mit c
-benutze die Bibliothek von P.Fleury. hab versucht da was zu ändern wir z.B. Port und Pin nun für SDA und SCL.
-auslesen mit dem Programm :Hterm. eingestellt auf 9600.data 8,stop1 und Parity none
Also den Sensor steuere ich mit dem I2C Schnittstelle und auslesen mit RS232 am PC.
Ich hab am Sensor die Pullup wiederstände angebaut .und kann ausschliessen dass ein Hardware fehler gibt.
Also wenn ich mit (start Debugging) versuche ,bleibt bei i2c_start(0xE0); hängen.
Wenn ich kompiliere läuft alles ok aber beim auslesen bekomme ich nur 255.Ich weiß dass die 255 bekommt man wenn der Sensor nicht mit messen fertig ist aber ich weiß nicht wie ich es bringe fertig zu sein .-)
Also ich würde mich freuen wenn jemand von euch mir sagen kann was ich hier falsch mache.
Hier ist mein Code
.
Code:
#include <avr/io.h>
#include "i2cmaster.h"
#define SRF 0xE0
#define F_CPU 8000000UL
#include <util/delay.h>
#define BAUD 9600
#include <avr/iom8515.h>
#include <avr/sfr_defs.h>
#define SDA 0 // SDA Port E, Pin 0
#define SCL 1 // SCL Port E, Pin 1
#define SDA_PORT PORTE // SDA Port E
#define SCL_PORT PORTE // SCL Port E
// USART_INIT--
void initusart(void) // Hauptfunktion
{
unsigned char x; //Hilfsvariable
// #idef UBRRL //USART-Schnittstelle
UBRRL = (F_CPU / (16UL*BAUD)) -1; //Baudrate mit TAKT und Baud
UCSRB |= (1<<TXEN) | (1<<RXEN); //Sender und Empfänger ein
UCSRC |= (1<< URSEL) | (1<< UCSZ1) | (1<<UCSZ0); //ansync 8bit
x = UDR;
}
void sendeusart(int x)
{
while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich
{
}
UDR = x;
}
int distance;
int main(void)
{
int distance =0;
i2c_init();
initusart();
//sendeusart(distance);
unsigned char Lbyte,Hbyte;
DDRE = 0xff;
PORTE = 0xff;
while(1)
{
i2c_init();
i2c_start(0xE0);
i2c_write(0x00);
i2c_write(0x51);
i2c_stop();
_delay_ms(70);
i2c_start(0xE0);
i2c_write(0x02);
i2c_start(0xE0);
i2c_write(0xE1);
Lbyte=i2c_readNak();
Hbyte=i2c_readAck();
distance=(Hbyte*256)+Lbyte;
i2c_stop();
sendeusart(distance);
}
}
ich würde mich sehr freuen für eine Antwort.danke jungs
Alexandra
Lesezeichen