hallo zusammen.Für mein Projektarbeit hatte ich die Aufgabe,ein Roboter zu bringen,Hindernisse zu erkennen mittel ein Ultrastrahlsensor.
ich hab mich für den srf02 entschieden.Ich benutze dazu ein ATMEGAA8515L board.
ich hab folgenende Program geschrieben:
Code:
#include <avr/io.h>
#include "i2cmaster.h"

#define SRF02_ADRESSE 0xE0
#define F_CPU 8000000UL
#define BAUD 19200UL

#include <util/delay.h>

// 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) | (3<<UCSZ0); //ansync 8bit

x = UDR;
}

void sendeusart(char x)
{
while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich

UDR = x;
}



unsigned int read_cm(unsigned char address);

int main(void)
{


int distance =0;
initusart();
sendeusart(distance);

i2c_init();

DDRA = 0xff;
PORTA = 0xff;
while(1)
{
read_cm(SRF02_ADRESSE);

distance = read_cm(SRF02_ADRESSE);
sendeusart(distance);
}

return 0;
}

unsigned int read_cm(unsigned char SRF02)
{
unsigned char lowbyte,highbyte;
unsigned int distance;

i2c_init();
i2c_start(SRF02+I2C_WRITE);
while (i2c_write(0));
while (i2c_write(81));
i2c_stop();

i2c_start(SRF02+I2C_WRITE);
while (i2c_write(2));
i2c_stop();

_delay_ms(65);

i2c_start(SRF02+I2C_READ);
highbyte = i2c_readAck();
lowbyte = i2c_readNak();
distance = (highbyte*256)+lowbyte;
sendeusart(distance);

i2c_stop();

if(distance > 150)
{
PORTA = 0x00;
}

return distance;

}
ich benutze die bibliotek von Flury und ich hab versucht durch die RS232 vom Board zu senden und zu sehen was rauskommt, die Ergibnisse sehe ich auf dem Programm HTERM.
das problem ich bekomme nur Statische Werte also nix.
kann mir bitte jemand helfen und sagen was ich im programm noch ändern soll damit es funktionniert.Würde mich freuen über jeden Vorschlag.
danke
Grüsse Alex