void TWI_write_int( uint8_t SLA, uint8_t data) { TWI_start(); TWI_write(SLA); TWI_write(data); TWI_stop(); }
void TWI_write_buf( uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) { TWI_start(); TWI_write(SLA); TWI_write(adr); while (len--) TWI_write(*buf++); TWI_stop(); }
void TWI_read_buf(uint8_t SLA, uint8_t adr, uint8_t len, uint8_t *buf) { TWI_start(); TWI_write(SLA); TWI_write(adr); TWI_start(); TWI_write(SLA + 1); while (len--) *buf++ = TWI_read( len ? ACK : NACK ); TWI_stop(); }
void sfp_read_vendor_name(uint8_t *buf) { uint8_t len=15; TWI_start(); TWI_write(0xa0); TWI_write(0x14); TWI_start(); TWI_write(0xa1); while (len--) *buf++ = TWI_read( len ? ACK : NACK ); TWI_stop(); }
void sfp_read_to_buf(uint8_t SLA, uint8_t len, uint8_t *buf) { TWI_start(); TWI_write(SLA); TWI_write(0xa0); TWI_start(); TWI_write(SLA + 1); while (len--) *buf++ = TWI_read( len ? ACK : NACK ); TWI_stop(); }
uint8_t TWI_read_int(uint8_t SLA) { uint8_t data; TWI_start(); TWI_write(SLA); TWI_start(); TWI_write(SLA + 1); data = TWI_read(NACK); TWI_stop(); return data; }
void EI2C_read_buf(uint8_t device, uint16_t subAddr, uint16_t len, uint8_t *buf) { while (len--) { TWI_start(); TWI_write(device | ((subAddr>>8)<<1) ); TWI_write(subAddr); TWI_start(); TWI_write(device + 1); *buf++ = TWI_read( NACK ); TWI_stop(); subAddr++; } }
// funkcja do odczytu z EXPANDERA PCF8574 ********************* uint8_t PCF8574_read( uint8_t SLA ) { uint8_t res=0; TWI_start(); TWI_write(SLA + 1); res = TWI_read( NACK ); TWI_stop(); return res; }
void send_tape_value(uint8_t value){ uint8_t s[4]; s[0] = CMD_SENSOR_DATA; s[1] = 2; s[2] = TAPE_VALUE; s[3] = value; TWI_write(COMM_ADDRESS, s, 4); }
void send_number_of_diods(uint8_t diod){ uint8_t s[4]; s[0]= CMD_SENSOR_DATA; s[1]= 2; s[2]= DIOD; s[3]= diod; TWI_write(CONTROL_ADDRESS,s,4); }
void send_tape(uint8_t tape){ uint8_t s[4]; s[0] = CMD_SENSOR_DATA; s[1] = 2; s[2] = TAPE; s[3] = tape; TWI_write(GENERAL_CALL, s, 4); }
void send_sensor_mode(uint8_t mode){ uint8_t s[3]; s[0] = CMD_SENSOR_MODE; s[1] = 1; s[2] = mode; TWI_write(SENSOR_ADDRESS, s, 3); }
void send_line_pos(uint8_t pos){ uint8_t s[4]; s[0] = CMD_SENSOR_DATA; s[1] = 2; s[2] = LINE_POSITION; s[3] = pos; TWI_write(GENERAL_CALL, s, 4); }
//Funktion för att skicka differensen void send_differences(uint8_t diff, uint8_t rot){ uint8_t s[6]; s[0] = CMD_SENSOR_DATA; s[1] = 4; s[2] = IRDIFF; s[3] = diff; s[4] = IRROT; s[5] = rot; TWI_write(GENERAL_CALL, s, 6); }
int main(void) { unsigned char temp[2]; unsigned int j; DDRB = 0x3F; TWI_first_init(); sei(); TWI_write(DS1631,"\xAC\x0C",2); // Continues conversion mode, 12 bit precision TWI_write(DS1631,"\x51",1); // Start conversion TWI_write(DS1631,"\xAA",1); // Start reading temperature for(;;) { for(j=0; j<50000; j++) wait();// Wait a while, the GCC optimizer trashes empty loops so a volatile nop is inserted TWI_read(DS1631,temp,2); // Read the temperature PORTB = ~temp[0]; } }
void send_reg_params(uint16_t p, uint16_t d){ uint8_t s[8]; s[0] = CMD_REG_PARAMS; s[1] = 6; s[2] = REG_P; s[3] = p >> 8; s[4] = p; s[5] = REG_D; s[6] = d >> 8; s[7] = d; TWI_write(COMM_ADDRESS, s, 8); }
void send_long_ir_data(uint8_t long1, uint8_t long2){ uint8_t s[6]; s[0] = CMD_SENSOR_DATA; s[1] = 4; s[2] = IR_LONG_LEFT; s[3] = long1; s[4] = IR_LONG_RIGHT; s[5] = long2; TWI_write(CONTROL_ADDRESS, s, 6); }
int main(void) { TWI_init(); UART_init(); sei(); while(1) { TWI_read(0x50,dat,128); // Czytaj 24c02 EEPROM (A0=A1=A2 = 0) DEBUG_hextable(dat,128); TWI_write(0x50,dat,128); // Zapisz do PCF8583 (A0 = 1) TWI_read(0x51,dat,128); // Czytaj z PCF8583 (A0 = 1) DEBUG_hextable(dat,128); delayms(500); } }
void send_sensor_values(uint8_t ll, uint8_t lr, uint8_t sl, uint8_t sr, uint8_t sb){ uint8_t s[12]; s[0] = CMD_SENSOR_DATA; s[1] = 10; s[2] = IR_LONG_LEFT; s[3] = ll; s[4] = IR_LONG_RIGHT; s[5] = lr; s[6] = IR_SHORT_LEFT; s[7] = sl; s[8] = IR_SHORT_RIGHT; s[9] = sr; s[10] = IR_SHORT_BACK; s[11] = sb; TWI_write(COMM_ADDRESS, s, 12); }