Morchen, wir ham enn problem mit dem sensor, er gibt nicht das richtige ergebnis aus. er durchlauft die routine ohne probleme. Aber es scheint als ob der sensor keine daten sendet. koennte mal jemand ueber unseren code drueber schauen. BYTE *HData,*LData; unsigned char S[14]; TWCR = 0xE4;//0b11100100; //Start while(!(TWCR & (1 << 7))); if (TWSR = 0x08) { TWDR = 0x04; //Adresse TWCR = 0xC5; while(!(TWCR &(1 << 6))); TWCR = 0xC5; } if (TWSR = 0x40) { while(!(TWCR &(1 << 7))); //Daten1 if (TWSR = 0x50) { *LData = TWDR; sprintf(buff,"1:%i",TWDR); LCD_sendS(2,1,buff); LED_signal(LED1);} TWCR = 0xC5; while(!(TWCR &(1 << 7))); //Daten2 if (TWSR = 0x50) { *HData = TWDR; sprintf(buff,"1:%i",TWDR); LCD_sendS(2,2,buff); LED_signal(LED2);} } TWCR = 0xD4;
Ich hab für den ATMega in Verbindung mit einem anderen Projekt einen Treiber geschrieben, vielleicht hilft der weiter... http://www.dehof.de/eib/index.html siehe unter EIB mit ATMEL
Ich weis das der Sensor nicht I2C konform ist. Aber wie soll ich ihn denn dann ansprechen, wenn nicht über TWI?
@ Steffen > Ich weis das der Sensor nicht I2C konform ist. > Aber wie soll ich ihn denn dann ansprechen, wenn nicht über TWI? "Per Hand", sprich du muss zwei IO-Pins mit den entspechenden Mustern ansteuern. MfG Falk
Da gibt es eine Appnote auf der Sensirion Seite. Versuch mich gerade selbst daran. Mfg Sascha
Das heisst ich muss die einzelnen Taktfolgen programmieren für den SCK und DATA? Das Beispiel von sensirion is auch so ähnlich aufgebaut. Ich dachte das könnte mit TWI funkionieren. Hier im Forum haben das auch schon welche gemacht!
@ Steffen > Das heisst ich muss die einzelnen Taktfolgen programmieren für den SCK > und DATA? Das Beispiel von sensirion is auch so ähnlich aufgebaut. Ja. > Ich dachte das könnte mit TWI funkionieren. > Hier im Forum haben das auch schon welche gemacht! Dann musst du dich aber SEHR gut mit dem TWI Modul auskennen, um es etwas abseits seiner Normalfunktion zu benutzen. Machs per Hand und du hast Ruhe. Ist auch nicht sonderlich aufwändig. MfG Falk
Also doch an den Code von Sensirion halten. Kann man das auch auf AVR-GCC protieren? Schonmal gemacht Falk?
@ Steffen > Also doch an den Code von Sensirion halten. Wahrscheinlich. > Kann man das auch auf AVR-GCC protieren? Wahrscheinlich. > Schonmal gemacht Falk? Nein, bab auf dem AVR bisher nur in ASM programmiert. Wie richtige Männer ;-) MfG Falk
Aber andere richtige Männer versuchen sich halt auch in C. Na jut dann werd ich das mal versuchen. Trotzdem Danke. Wenn trotzdem jemand nen Tip hat, her damit.
So haben uns jetz an den Code von sensirion gehalten mit allen zeiten usw. Es geht immernoch nix. Selbst wenn wir eine slave adresse angeben die es nicht gibt meldet er erfolgreich gesendet. Kann bitte jemand nochmal drüberschauen. Danke void S_SDA() { DDRC |= (1<<SDA); PORTC |= (1<<SDA); } void C_SDA(){ DDRC |= (1<<SDA); PORTC &= ~(1<<SDA); } void S_SCL(){ DDRC |= (1<<SCL); PORTC |= (1<<SCL); } void C_SCL(){ DDRC |= (1<<SCL); PORTC &= ~(1<<SCL); } unsigned char G_SDA(){ DDRC &= ~(1<<SDA); if ((PORTC & (1 << SDA)) == 1) { return 1;} else { return 0;}; } void SHT7Start(void) { S_SDA(); C_SCL(); delay_us(5); S_SCL(); delay_us(5); C_SDA(); delay_us(5); C_SCL(); delay_us(5); S_SCL(); delay_us(5); S_SDA(); delay_us(5); C_SCL(); } void SHT7Reset(void) { } unsigned char SHT7Read(unsigned char SHTACK) { unsigned char i, tempvalue=0; S_SDA(); //release DATA-line for (i=0x80;i>0;i/=2) //shift bit for masking { S_SCL(); //clk for SENSI-BUS if (G_SDA == 1) {tempvalue = (tempvalue | i);}; //read bit delay_ms(10); C_SCL(); delay_ms(100); } if (SHTACK == 0){S_SDA();} else {C_SDA();}; //in case of "ack==1" pull down DATA-Line S_SCL(); //clk #9 for ack delay_us(5); //pulswith approx. 5 us C_SCL(); delay_us(5); S_SDA(); //release DATA-line return tempvalue; } char SHT7Write(unsigned char Data) { unsigned char i,error=0; for (i=0x80;i>0;i/=2) //shift bit for masking { if ((i & Data) == i) {S_SDA();}//masking value with i , write to Bus else {S_SDA();}; S_SCL(); //clk for SENSI-BUS delay_us(5); //pulswith approx. 5 us C_SCL(); delay_ms(100); } S_SDA(); //release DATA-line S_SCL(); //clk #9 for ack error=G_SDA(); //check ack (DATA will be pulled down by SHT11) C_SCL(); return error; //error=1 in case of no acknowledge }
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.