Hallo uffi;
danke für die Erklärung,ich hab genau geschrieben ,was du mir gesagt hast ,leider das Ergibniss ist immer das gleiche hier ist mein Code nochmal :
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(SRF);
i2c_write(0x00);
i2c_write(0x51);
i2c_stop();
_delay_ms(70);
i2c_start(SRF);
i2c_write(0x02);
i2c_stop();
i2c_start(0xE1);
Hbyte=i2c_readAck();
Lbyte=i2c_readNak();
distance=(Hbyte*256)+Lbyte;
sendeusart(distance);
i2c_stop();
}
}
Danke und ich hoffe das du mir hilfen kannst
Gruss Alexandra
Lesezeichen