Hallo an alle
Ich hab nun die I2C Routine fertig geschriebenJedoch funktioniert sie noc nicht. Ich finde jedoch keinen Fehler
Hier der Code
Ich hoffe es kann mir wer helfen.Code:#include <avr/io.h> #include <stdlib.h> #include "lcd.h" #define TRUE 1 #define FALSE 0 #define ACK TRUE #define NACK FALSE #define START 0x08 #define TW_MT_SLA_ACK 0x18 #define TW_MT_DATA_ACK 0x28 void lm75_read(void); void i2c_init(void); int i2c_send_start(uint8_t adress); int i2c_send_byte(uint8_t data); void i2c_send_stop(void); int i2c_read(uint8_t adress, uint8_t ackflag); struct TEMPERATUR { uint8_t high; uint8_t low; } temp; void i2c_init(void) { TWBR |= (1 << 5); //TWBR = 32 = 10 0000 // Prescaler = 1 } int i2c_send_start(uint8_t adress) { TWCR |= ((1 << TWINT) | (1 << TWSTA) | (1 << TWEN)); //Sende start Condition while(!(TWCR & (1 << TWINT))); //Warte bis ende if((TWSR & 0xF8) != START) return -1; TWDR = adress; TWCR = (1 << TWINT) | (1 << TWEN); while(!(TWCR & (1 << TWINT))); if((TWCR & 0xF8) != TW_MT_SLA_ACK) return -1; return 0; } int i2c_send_byte(uint8_t data) { TWDR = data; TWCR = (1 << TWINT) | (1 << TWEN); while(!(TWCR & (1 << TWINT))); if((TWSR & 0xF8) != TW_MT_DATA_ACK) return -1; return 0; } void i2c_send_stop(void) { TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO); while(!(TWCR & (1 << TWSTO))); } int i2c_read(uint8_t adress, uint8_t ackflag) { if(ackflag == ACK) TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWEA); else TWCR = (1 << TWINT) | (1 << TWEN); while(!(TWCR & (1 << TWINT))); return TWDR; } void lm75_read(void) { i2c_send_stop(); i2c_send_start(0x9E); temp.high = i2c_read(0x9F,ACK); temp.low = i2c_read(0x9F, NACK); i2c_send_stop(); } int main(void) { uint8_t nachkomma, ganzzahl; i2c_init(); lcd_init(LCD_DISP_ON); lcd_home(); lcd_clrscr(); lcd_clrscr(); lm75_read(); if(bit_is_set(temp.low, 0)) nachkomma = 5; else nachkomma = 0; temp.low >>= 1; temp.high <<= 7; ganzzahl= temp.low | temp.high; lcd_put_d(ganzzahl); lcd_putc('A'); lcd_put_d(nachkomma); return 0; }
Danke im Voraus
Gruß Robert







Zitieren

Lesezeichen