Beispiel #1
0
uint8_t cy8c20180_read(uint8_t address) {
	// request data like described in the datasheet page 9 - one byte of data
	// BUG: data only reads from chip #0 when both chips are sampled, and turns
	// 			up in the space for chip #1 - maybe it takes too long?
	
  uint8_t ret = 0x00;
	
  // request Register 00h: INPUT_PORT0

  i2c_start_wait(address);
  i2c_write(INPUT_PORT0);
  i2c_stop();

  i2c_start_wait(address);
	ret = i2c_readNak() << 4;
  i2c_stop();

//	if (address == 0) { ret |= 1 << 4; }

  // request Register 01h: INPUT_PORT1
  i2c_start_wait(address);
  i2c_write(INPUT_PORT1);
  i2c_stop();

  i2c_start_wait(address);
	ret |= i2c_readNak();
  i2c_stop();

  return ret;
}
Beispiel #2
0
uint8_t I2C_ReadRegister(uint8_t busAddr, uint8_t deviceRegister) {
    uint8_t data = 0;
    i2c_start_wait(busAddr+I2C_WRITE);
    i2c_write(deviceRegister);
    i2c_start_wait(busAddr+I2C_READ);
    data = i2c_readNak();
    i2c_stop();
    return data;
}
Beispiel #3
0
void ADXL345_init(void)
{
     //Configure the KXPS5 setup registers
    i2c_start_wait(ADXL345+I2C_WRITE);     // set device address and write mode
    i2c_write(POWER_CTL); 
    i2c_write(POWER_CTL_SET);         
    i2c_stop();

    i2c_start_wait(ADXL345+I2C_WRITE);     // set device address and write mode
    i2c_write(DATA_FORMAT); 
    i2c_write(DATA_FORMAT_SET);         
    i2c_stop();
}
Beispiel #4
0
/*******************************************************************************
 * Function: nunchuck_get_data() 
 * Description: Fills the nunchuck_buf array with data from the nunchuck's 
 * registers. The data from this array may be accessed using the get functions
 ******************************************************************************/
void nunchuck_get_data(void)
{
		i2c_start_wait(NUNCHUCK_ADDR+I2C_WRITE);
		i2c_write(0x00);
		i2c_stop();
		_delay_ms(10);
		i2c_start_wait(NUNCHUCK_ADDR+I2C_READ);		
		for (uint8_t i = 0 ; i < 5 ; i++)
		{
				nunchuck_buf[i] = nunchuck_decode_byte(i2c_readAck());
		}
		nunchuck_buf[5] = nunchuck_decode_byte(i2c_readNak());
		i2c_stop();
}
Beispiel #5
0
//Read 8bit data from register with 8bit address
void Gyroscope::cmr_read(byte address) {
  i2c_start_wait( (ADDR << 1) | I2C_WRITE ); // Start / Device address and Write (0)
  i2c_write(address); // 8bit register address 
  i2c_rep_start( (ADDR << 1) | I2C_READ ); // Repeated Start / Device address and Read (1)
  res = i2c_readNak(); // Read the result to res
  i2c_stop(); // End condition
}
Beispiel #6
0
void mcp4651_setWiper(uint8_t wiper,uint16_t value) {
	if (wiper>1) return;
	i2c_start_wait(MCP4651+I2C_WRITE);     	// set device address and write mode
   	i2c_write(((wiper&0x03)<<4)|((value&0x1FF)>>8));
   	i2c_write(value&0xFF);
  	i2c_stop();	
}
Beispiel #7
0
void writeI2Cbyte(uint8_t address, uint8_t location, uint8_t value)
{
    i2c_start_wait(address+I2C_WRITE);				// Set up device address
    i2c_write(location);							// Set up register address
    i2c_write(value); 								// Write byte
    i2c_stop();
}
void classic_maj_data(CLASSIC * classic) {
	u8 i;
	u8 data[6];
	//reset le pointeur de lecture
	i2c_start(0xa4);//adresse classic en écriture
	i2c_write(0);
	i2c_stop();

	_delay_us(200);//minimum observé fonctionnel : _delay_us(150);
	i2c_start_wait(0xa5);//adresse en lecture
	for(i=0; i<5; i++) {
		data[i]=i2c_readAck();
	}
	data[5]=i2c_readNak();//le dernier caractère lu ne doit pas avoir d'acknowledge
	i2c_stop();
	/*for(i=0;i<6;i++){
		phex(data[i]);
		print(" ");
	}*/
	classic->bouton1=~data[4];
	classic->bouton2=~data[5];
	classic->rx=(data[2]>>7)+(data[1]>>(6-1))+(data[0]>>(6-3));
	classic->ry=data[2]&0x1f;
	classic->lx=data[0]&0x3f;
	classic->ly=data[1]&0x3f;
	classic->lt=(data[3]>>5)+((data[2]&0x60)>>(5-3));
	classic->rt=data[1]&0x3f;
}
Beispiel #9
0
/*******************************************************************************
 * Function: nunchuck_init()
 * Description: initialize the wii nunchuck on the i2c bus by writing the 
 * device address, followed by performing a handshake.  
 ******************************************************************************/
void nunchuck_init(void)
{
	i2c_start_wait(NUNCHUCK_ADDR+I2C_WRITE); // address the nunchuck
	i2c_write(0x40); // This is a handshake. write 0x00 to address 0x40.
	i2c_write(0x00);
	i2c_stop();
}
void _rtc_dev_init( uint8_t address, uint8_t year_offset )
{
	i2c_start_wait(address+RTC_DEV_WRITE_ADDRESS); // Addresses the RTC
	i2c_write(0x00); // Set memory address 0x00
	i2c_write(RTC_CONFIG_COMMAND);
	i2c_stop();
}
int main (void)
{
	uint16_t heading;
	int16_t pitch, roll;
	uint16_t headingIntegerPart, headingFractionPart;
	int16_t pitchIntegerPart, pitchFractionPart;
	int16_t rollIntegerPart, rollFractionPart;

	// initialize the hardware stuff we use
	InitTimer ();
	InitUART ();
	i2c_init ();

	fdevopen (UART0_PutCharStdio, UART0_GetCharStdio);

	// set the LED port for output
	LED_DDR |= LED_MASK;

	printf ("\nHoneywell HMC6343 I2C Compass Test\n\n");

	// Flash the LED for 1/2 a second...
	turnOnLED ();
	ms_spin (500);
	turnOffLED ();

	while (1)	// outer loop is once every 250 ms (more or less)
	{
		// send the HEADING command to the compass
		i2c_start_wait (COMPASS_ADDRESS_WRITE);
		i2c_write (COMPASS_HEADING_COMMAND);

		// now read the response
		i2c_rep_start (COMPASS_ADDRESS_READ);
		heading = (i2c_readAck () * 256) + i2c_readAck ();
		pitch = (i2c_readAck () * 256) + i2c_readAck ();
		roll = (i2c_readAck () * 256) + i2c_readNak ();
		i2c_stop ();

		headingIntegerPart = heading / 10;
		headingFractionPart = heading - (headingIntegerPart * 10);
		pitchIntegerPart = pitch / 10;
		pitchFractionPart = pitch - (pitchIntegerPart * 10);
		if (pitchFractionPart < 0)
			pitchFractionPart *= -1;
		rollIntegerPart = roll / 10;
		rollFractionPart = roll - (rollIntegerPart * 10);
		if (rollFractionPart < 0)
			rollFractionPart *= -1;

		printf ("Heading: %3d.%1d   Pitch: %3d.%1d   Roll: %3d.%1d\n", headingIntegerPart, headingFractionPart, pitchIntegerPart, pitchFractionPart, rollIntegerPart, rollFractionPart);

		turnOnLED ();
		ms_spin (100);
		turnOffLED ();
		ms_spin (150);
	}

	// we'll never get here...
	return 0;
}
Beispiel #12
0
unsigned char ds1307_setdate(unsigned char year, unsigned char month, unsigned char day, unsigned char hour, unsigned char minute, unsigned char second)
{
	//sanitize data
	if (second < 0 || second > 59 ||
		minute < 0 || minute > 59 ||
		hour < 0 || hour > 23 ||
		day < 1 || day > 31 ||
		month < 1 || month > 12 ||
		year < 0 || year > 99)
		return 8;

	//sanitize day based on month
	if(day > pgm_read_byte(ds1307_daysinmonth + month - 1))
		return 0;

	//get day of week
    unsigned char dayofweek = ds1307_getdayofweek(year, month, day);

	//write date
	i2c_start_wait(DS1307_ADDR | I2C_W);
	i2c_wrt(0x00);//stop oscillator
	i2c_wrt(ds1307_dec2bcd(second));
	i2c_wrt(ds1307_dec2bcd(minute));
	i2c_wrt(ds1307_dec2bcd(hour));
	i2c_wrt(ds1307_dec2bcd(dayofweek));
	i2c_wrt(ds1307_dec2bcd(day));
	i2c_wrt(ds1307_dec2bcd(month));
	i2c_wrt(ds1307_dec2bcd(year));
	i2c_wrt(0x00); //start oscillator
	i2c_stop();

return 1;
}
Beispiel #13
0
void rnlcd_readmode_Scancode(void) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(119);
	i2c_write(1);
	i2c_stop();
}
Beispiel #14
0
void rnlcd_cursor_state(const uint8_t state) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(67);
	i2c_write(state);
	i2c_stop();
}
Beispiel #15
0
void rnlcd_light_state(const uint8_t state) {
#ifdef RNLCD_NO_LIGHT
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(76);
	i2c_write(RN_LCD_OFF);
	i2c_stop();
#else
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(76);
	//i2c_write(state);
	i2c_write(RN_LCD_OFF);
	i2c_stop();
#endif
}
void _rtc_get_date_dev(Date* tm, uint8_t year_offset, uint8_t addr)
{
   uint8_t c;
   i2c_start_wait(addr+RTC_DEV_WRITE_ADDRESS);  // set device address and write mode
   i2c_write(0x02);                            // write memory address = 0x02
   i2c_rep_start(addr+RTC_DEV_READ_ADDRESS);    // set device address and read mode
   
   c = i2c_readAck();                     // 0x02
   tm->seconds = rtc_bcd_to_binary(c);
   
   c = i2c_readAck();                     // 0x03
   tm->minutes = rtc_bcd_to_binary(c);
	  
   // Throw away AMPM information
   i2c_readAck();                         // 0x04
   
   c = i2c_readAck();                     // 0x05
   tm->day = rtc_bcd_to_binary(c & 0x3F);
   tm->year =  ((rtc_bcd_to_binary(c) >> 6) & 0x3) + 1970 + year_offset;
         
   c = i2c_readNak();                     // 0x06: don't acknowledge the last byte
   
   // Throw away day of week information
   //tm->dayOfWeek = ((c >> 5) & 0x7);
   tm->month = (c & 0x1F);
      
   i2c_stop();					          // stop i2c bus
}
void _rtc_setCounting_dev(uint8_t count, uint8_t addr)
{
   i2c_start_wait(addr+RTC_DEV_WRITE_ADDRESS); // Addresses the RTC
   i2c_write(0x00); // Set memory address 0x00
   i2c_write(RTC_CONFIG_COMMAND | (((count == 0) & 0x1)<<7));
   i2c_stop();
}
Beispiel #18
0
void writePage64(unsigned char *dataArray) {

    /*unsigned int i=0;
    unsigned char  ret = 0;
    unsigned int increment = 0;
    unsigned int arrayLenght = sizeof(dataArray);
    char iterationAmount = arrayLenght/64;

    metka:
    i2c_init();
    for(i=0;i<iterationAmount;i++){
    	ret = i2c_start(Dev24C02+I2C_WRITE);

    	if(ret!=0){
    		i2c_write((i*64)>>8);   //HSB
    		i2c_write(i*64);        //LSB

    		while(increment++<64){
    			i2c_write(dataArray[increment]);
    		}
    		i2c_stop();
    	}
    	else{
    		goto metka;
    	}		*/
    i2c_init();                             // initialize I2C library

    // write 0x75 to EEPROM address 5 (Byte Write)
    i2c_start_wait(Dev24C02+I2C_WRITE);     // set device address and write mode

    i2c_write(0x05);                        // write address = 5
    i2c_write(0x75);                        // write value 0x75 to EEPROM
    i2c_stop();

}
Beispiel #19
0
void rnlcd_readmode_ASCII(void) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(119);
	i2c_write(0);
	i2c_stop();
}
Beispiel #20
0
void ds1307_enable_sq(uint8_t setting)
{
    i2c_start_wait(DS1307_ADDR | I2C_WRITE);
    i2c_write(0x07);//set register pointer to sq register
    i2c_write(setting);
    i2c_stop();
    
}
void
lis302_write_register(uint8_t register_address, uint8_t value)
{
  i2c_start_wait(I2C_7BIT_WRITE(LIS302_I2C_ADDRESS));
  i2c_write(register_address);
  i2c_write(value);
  i2c_stop();
}
Beispiel #22
0
void rnlcd_setxy(const uint8_t x, const uint8_t y) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	i2c_write(27);
	i2c_write(79);
	i2c_write(x);
	i2c_write(y);
	i2c_stop();
}
Beispiel #23
0
unsigned char getTemp() {
  i2c_init();
  i2c_start_wait(TC74Address + I2C_WRITE);
  i2c_write(0x00);
  i2c_rep_start(TC74Address + I2C_READ);
  char temp = i2c_readNak();
  i2c_stop();
  return temp;
}
Beispiel #24
0
uint8_t rtc_read(unsigned char addr) {
     uint8_t ret;
     i2c_start_wait(DevRTC);                  // set device address and write mode
     i2c_write(addr);                         // write address = 0
     i2c_rep_start(DevRTC+1);                 // set device address and read mode
     ret = i2c_readNak();                     // read one byte form address 0
     i2c_stop();                              // set stop condition = release bus
     return ret;
}
Beispiel #25
0
int16_t MPU6050_signed_readreg(uint8_t accel, uint8_t reg)//read signed 16 bits
{
	i2c_start_wait(accel+I2C_WRITE); // set device address and write mode
	i2c_write(reg);                                  // ACCEL_OUT
	i2c_rep_start(accel+I2C_READ);    // set device address and read mode
	char raw1 = i2c_readAck();                    // read one intermediate byte
	int16_t raw2 = (raw1<<8) | i2c_readNak();        // read last byte
	i2c_stop();
	return raw2;
}
Beispiel #26
0
//Given a 8-bit number from EEPROM (Slave address 0x50), write value to MLX sensor (Slave address 0x60)
void writeTrimmingValue(byte val)
{
    i2c_start_wait(MLX90620_WRITE); //Write to the sensor
    i2c_write(0x04); //Command = write oscillator trimming value
    i2c_write((byte)val - 0xAA);
    i2c_write(val);
    i2c_write(0x56); //Always 0x56
    i2c_write(0x00); //Always 0x00
    i2c_stop();
}
uint8_t
lis302_read_register(uint8_t register_address)
{
  uint8_t result = -1;
  i2c_start_wait(I2C_7BIT_WRITE(LIS302_I2C_ADDRESS));
  i2c_write(register_address);
  i2c_rep_start(I2C_7BIT_READ(LIS302_I2C_ADDRESS));
  result = i2c_readNak();
  i2c_stop();
  return result;
}
Beispiel #28
0
void rnlcd_putc_times(const char c, const uint8_t times) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);
	for(uint8_t i=0; i<times; i++) {
		i2c_write(c);
#ifdef RN_USE_DELAY
		__RN_LCD_DO_DELAY();
#endif
	}

	i2c_stop();
}
Beispiel #29
0
void rnlcd_puts_l_P(PGM_P str, const uint8_t len) {
	i2c_start_wait(RN_LCD_ADDR + I2C_WRITE);

	for(uint8_t i=0; i<len; i++) {
		i2c_write(pgm_read_byte(str+i));
#ifdef RN_USE_DELAY
		__RN_LCD_DO_DELAY();
#endif
	}

	i2c_stop();
}
Beispiel #30
0
int twi_read_byte(uint8_t addr, uint8_t reg, uint8_t* target){
	i2c_start_wait(addr << 1);
	if(i2c_write(reg)){
		return 1;
	}
	if(i2c_rep_start((addr << 1) + 1)){
		return 1;
	}
	*target = i2c_readNak();
	i2c_stop();
	return 0;
}