-
-
Neuer Benutzer
Öfters hier
Danke für eure Antwort.Also ich hab die Wartezeit und das Programm verändert aber leider immer nichts
.
Ich hab festgesteht dass, mein Board die stk 500 kein Pullup Wiederstand hat,deswegen hab ich 2 Wiederstände am Sensor gelötet :ein hat 7k und der andere 10 k Ohm,aber ich bekomme immer noch 255 als Wert oder 127 wennn ich der Hand vor dem sensor stelle.
Bin echt am druchdrehen
bitte brauche eure hilfe.An was kann dann hängen und was muss ich noch ändern ?
hier nochmal das Programm:
#include <avr/io.h>
#include <C:\Dokumente und Einstellungen\java\Eigene Dateien\sensor\i2cmaster.h>
#define SRF02_ADRESSE 0xE0
#define F_CPU 8000000L
#define BAUD 19200L
#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(int x)
{
while (!(UCSRA & (1<<UDRE))); // warten bis Senden moeglich
{
}
UDR = x;
}
unsigned int read_cm();
int main(void)
{
int distance =0;
initusart();
sendeusart(distance);
i2c_init();
PORTA = 0xff;
DDRA = 0xff;
while(1)
{
read_cm();
distance = read_cm(SRF02_ADRESSE);
sendeusart(distance);
}
return 0;
}
unsigned int read_cm()
{
unsigned char lowbyte,highbyte;
unsigned int distance;
i2c_init();
i2c_start_wait(SRF02_ADRESSE+I2C_WRITE);
i2c_write(0);
i2c_write(81);
i2c_stop();
_delay_ms(100);
i2c_start_wait(SRF02_ADRESSE+I2C_WRITE);
i2c_write(2);
i2c_stop();
_delay_ms(100);
i2c_rep_start(SRF02_ADRESSE+I2C_READ);
highbyte = i2c_readAck();
lowbyte = i2c_readNak();
distance = (highbyte*256)+lowbyte;
i2c_stop();
if(distance > 150)
{
PORTA = 0x00;
}
return distance;
}
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen