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
.
ich würde mich sehr freuen für eine Antwort.danke jungsCode:#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); } }
Alexandra







Zitieren

Lesezeichen