Пример #1
0
static int tda9875_checkit(struct i2c_adapter *adap, int addr)
{
	int dic,rev;

	dic=i2c_read_register(adap,addr,254);
	rev=i2c_read_register(adap,addr,255);

	if(dic==0 || dic==2) { // tda9875 and tda9875A
		printk("tda9875: TDA9875%s Rev.%d detected at 0x%x\n",
		dic==0?"":"A", rev,addr<<1);
		return 1;
	}
	printk("tda9875: no such chip at 0x%x (dic=0x%x rev=0x%x)\n",addr<<1,dic,rev);
	return(0);
}
Пример #2
0
// Turns on interrupts, sets up the thresholds, and enables interrupts on the ADXL345
void i2c_init_registers()
{
	// Set range to 16g and FULL resolution
	i2c_write_register(ADXL345_REG_DATA_FORMAT, ADXL345_RANGE_16_G );

	// ADXL_BW_RATE = 50 hz, limited by I2C speed
	i2c_write_register(ADXL345_REG_BW_RATE, ADXL345_DATARATE_50_HZ);

	// Set up threshold for activity, found through trial and error
	i2c_write_register(ADXL345_REG_THRESH_ACT, 0x90);

	// Turn on the axes that will participate
	i2c_write_register(ADXL345_REG_ACT_INACT_CTL, ADXL345_ACT_ac_dc | ADXL345_ACT_X | ADXL345_ACT_Y | ADXL345_ACT_Z);

	// Set up interrupt outputs, sent to INT1 pin by default
	i2c_write_register(ADXL345_REG_INT_ENABLE, ADXL345_INT_Activity );

	//uint32_t value = i2c_read_register(ADXL345_REG_INT_ENABLE);

	// Clear interrupts by reading the INT_SOURCE register
	i2c_read_register(ADXL345_REG_INT_SOURCE);

	// Start measurement
	i2c_write_register(ADXL345_REG_POWER_CTL, 0x08);
}
Пример #3
0
/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{
	CHIP_Init();

	enter_DefaultMode_from_RESET();

	setup_utilities(USART1);

	delay(100);

	I2C_Init_TypeDef i2cInit = I2C_INIT_DEFAULT;
	I2C_Init(I2C0, &i2cInit);

	// Offset zero is Device ID
	uint16_t value = i2c_read_register(0);

	// Set an LED on the Starter Kit if success
	if (value == DEVICE_ID)
	{
		set_led(1,1);
	}

	// Infinite loop
	while (1) {
  }
}
Пример #4
0
char l3gd20_read( L3GD20Unit *unit )
{
	/* 全軸の測定データー読み込み */
	uint8_t data[6];

	/* マルチバイトリードを行うにはMSBを1にする必要がある */
	if ( !i2c_read_register( unit->address, 0x28 | 0x80, data, 6, I2CPolling ) ) {
		return 0;
	}

	/* なぜか別々にしか読めない? */
	/*
	for ( i = 0; i < 3; i++ ) {
		if ( !i2c_read_register( unit->address, 0x28 + i * 2, data + i * 2, 2, I2CPolling ) ) {
			return 0;
		}
	}
	*/

	unit->x = *(uint16_t *)( data + 0 );
	unit->y = *(uint16_t *)( data + 2 );
	unit->z = *(uint16_t *)( data + 4 );

	return 1;
}
Пример #5
0
static void baca_reg_fma(int argc, char **argv)
{
	unsigned char buf[32];

	int reg;
	unsigned char qq;
	
	if (argc > 1)
	{
		sprintf(buf, "%s", argv[1]);		//printf("isi buf: %s\r\n", buf);
		sscanf(buf, "%d", &reg);			//printf("isi buf: %d\r\n", reg+2);
		{
			struct t_env *env2;
			env2 = (char *) ALMT_ENV;
			//printf("k1: %d, k2: %d\r\n", env2->k1, env2->k2);
		}
		{
			//portENTER_CRITICAL();
			i2c_read_register(0x68, reg, &qq);		//i2c_read( 0x68, reg, 1, &dat, 1);
			//portEXIT_CRITICAL();
			printf("register fma %d (0x%02X) = %d\r\n", reg, reg, qq);
		}
		
	}
}
Пример #6
0
int int_berganti(void)
{
	char a;
	
	//if ( FIO0PIN & GPIO_INT )
	if (I2C_INT_PIN & GPIO_INT )
	{
		//return 1;
		// cek keypad yang ditekan
		out("KEY \r\n");
					if (i2c_read_register(0x68, 0x68, &a))
					{
						out("\r\n Read failed !\r\n");
					}
					else
					{
						out(" Read OK =");
						a = a + '0';
						outc((char) a);
						out(" \r\n");
					}
	}
	else
		return 0;
}
Пример #7
0
/*****************************************************************
*I2C Functions
*/
void i2c_test()
{
	uint8_t whoiam = 0;
	
	i2c_read_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_WHO_AM_I, &whoiam);
	
	uart_putchar(whoiam);
}
Пример #8
0
void baca_register_tsc_lagi() {
	unsigned char qq;
	int ww, zz;
	
	//printf("\t%s\r\n", __FUNCTION__);
	i2c_read_register(ADDR_FMA1, TSC_TOUCH_BYTE, &qq);
	printf("0x%02X: TOUCH_BYTE: %d\r\n", TSC_TOUCH_BYTE, qq);
	
	for (ww=0; ww<8; ww++) 
	{
		i2c_read_register(ADDR_FMA1, (TSC_ALPHA_00+ww), &qq);		// TSC_ALPHA_00
		printf("0x%02X: ALPHA%d: %d   ", (TSC_ALPHA_00+ww), ww, qq);

		i2c_read_register(ADDR_FMA1, (TSC_STR_THRES_00+ww), &qq);
		printf("0x%02X: STR_THRES%d: %d   ", (TSC_STR_THRES_00+ww),  ww, qq);

		//*	
		i2c_read_register(ADDR_FMA1, (TSC_STRENGTH_00+ww), &qq); // TSC_STRENGTH_00   0x50
		printf("0x%02X: STRENGTH%d: %d   ", (TSC_STRENGTH_00+ww), ww, qq);

		i2c_read_register(ADDR_FMA1, (TSC_IMP_00+ww), &qq);	// SC_IMP_00   0x58
		printf("0x%02X: IMP%d: %d   ", (TSC_IMP_00+ww), ww, qq);
		
		i2c_read_register(ADDR_FMA1, (TSC_REF_IMP_00+ww), &qq);		// 0x60
		printf("0x%02X: REF_IMP%d: %d\r\n", (TSC_REF_IMP_00+ww), ww, qq);
	}
	printf("\r\n");
	//*/
}
Пример #9
0
char l3gd20_read_temp( L3GD20Unit *unit )
{
	/* 温度を読む */
	uint8_t data;

	if ( !i2c_read_register( unit->address, 0x26, &data, 1, I2CPolling ) ) {
		return 0;
	}

	unit->temp = data;

	return 1;
}
Пример #10
0
int joystick_click_get_y(int8_t *y)
{
    if (y == NULL) {
        fprintf(stderr, "joystick: Cannot store Y coordinate using null pointer.\n");
        return -1;
    }

    if (i2c_read_register(JOYSTICK_ADDRESS, Y_REG, (uint8_t*)y) == -1) {
        fprintf(stderr, "joystick: Failed to read Y coordinate from device.\n");
        return -1;
    }

    return 0;
}
Пример #11
0
char l3gd20_data_ready( L3GD20Unit *unit )
{
	/* 新しいデーターがあるか確認 */
	uint8_t data;

	if ( !i2c_read_register( unit->address, 0x27, &data, 1, I2CPolling ) ) {
		return 0;
	}

	if ( data & 0x08 ) {
		return 1;
	}

	return 0;
}
Пример #12
0
/**
 * @brief Reads multiple 8-bit registers from an I2C slave
 * @param[in] slaveId The slave device ID
 * @param[in] startRegisterAddress The first register address
 * @param[in] registerCount The number of registers to read; Must be larger than zero.
 * @param[out] buffer The buffer to write into
 * @return 0 is successful, 1 if not
 */
int i2c_read_registers(register uint8_t slaveId, register uint8_t startRegisterAddress, register uint8_t registerCount, register uint8_t *buffer){
	if(registerCount < 1)
    return -1;
	
	if (registerCount >= 2){
		i2c_read_registers_internal(slaveId, startRegisterAddress, registerCount, buffer);
	}else{
		if(registerCount != 1)
      return -1;
		register uint8_t result = i2c_read_register(slaveId, startRegisterAddress);
		buffer[0] = result;
	}
  
  return 0;
}
Пример #13
0
/**************************************************************************//**
 * @brief  Main function
 *****************************************************************************/
int main(void)
{
      CHIP_Init();

      //delay(100);

      	  	  I2C_HMC_Initialization();

            // Offset zero is Device ID

            GPIO_I2C1Init();
            uint16_t value = i2c_read_register(0);
            // Set an LED on the Starter Kit if success
            if (value == DEVICE_ID) {
                ///  set_led(1,1);
            }

            i2c_write_register(ConfigurationRegisterA,0x70);
            //i2c_write_register(ConfigurationRegisterB,0xA0);//..for Gain = 5
            i2c_write_register(ConfigurationRegisterB,0x80);//..440lsb/Gauss
            i2c_write_register(ModeRegister,Measurement_SingleShot);
            //uint16_t valuex = i2c_read_register(0x06);

            for (int i=0;i<100;i++);

            int8_t RecData[6] = {0,0,0,0,0,0};
           	int16_t XVal = 0, YVal = 0, ZVal = 0;
           	int i =0;

           	// Measurement data starts at DATAX0, and ends at DATAZ1, 6 bytes long
           	cmd_array[0] = DataRegisterBegin;

            // Read 6 bytes at once
            i2c_transfer(HMC_ADDRESS, cmd_array, data_array, 1, 6, I2C_FLAG_WRITE_READ);


			XVal = (data_array[1]<<8) | data_array[0];
			ZVal = (data_array[3]<<8) | data_array[2];
			YVal = (data_array[5]<<8) | data_array[4];

            // Infinite loop
    	while (1){

    		}
}
Пример #14
0
/* DS1307 version, checks clock halt bit in seconds register */
void dsrtc_init(void) {
  int16_t tmp;

  rtc_state = RTC_NOT_FOUND;
  uart_puts_P(PSTR("DS1307 "));
  tmp = i2c_read_register(RTC_ADDR, REG_SECOND);
  if (tmp < 0) {
    uart_puts_P(PSTR("not found"));
  } else {
    if (tmp & STATUS_OSF) {
      rtc_state = RTC_INVALID;
      uart_puts_P(PSTR("invalid"));
    } else {
      rtc_state = RTC_OK;
      uart_puts_P(PSTR("ok"));
    }
  }
  uart_putcrlf();
}
Пример #15
0
char l3gd20_init( L3GD20Unit *unit, uint8_t address , L3GD20DataRate rate, L3GD20FullScale scale )
{
	/* 初期化 */
	uint8_t data;
	unit->address = address;

	/* デバイスID確認 */
	if ( !i2c_read_register( unit->address, 0x0F, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* デバイスIDが間違っていれば失敗 */
	if ( data != 0xD4 ) {
		return 0;
	}

	/* バンド幅とデーターレート設定 */
	data = rate | 0x30 | 0x07;
	unit->ctrl_1 = data;

	if ( !i2c_write_register( unit->address, 0x20, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* フルスケールを設定,データ読み込み中にデーターが更新されないようにしている */
	data = 0x80 | scale;

	if ( !i2c_write_register( unit->address, 0x23, &data, 1, I2CPolling ) ) {
		return 0;
	}

	/* FIFOを有効にする */
	data = 0x04;

	if ( !i2c_write_register( unit->address, 0x24, &data, 1, I2CPolling ) ) {
		return 0;
	}


	return 1;
}
Пример #16
0
portTASK_FUNCTION(ambilcepat, pvParameters )	{
    vTaskDelay(500);

    int loopambil=0;

#ifdef PAKAI_SHELL
    printf(" Monita : Ambil cepat init !!\r\n");
#endif

#if defined(PAKAI_I2C) && defined(PAKAI_TSC)
    unsigned char st_tsc=0;
    char a;
    int i;
    int c=0;

    if (setup_fma())	printf(" NO ack !\r\n");
    else	{
        printf("Init TSC OK ack !!!\r\n");
        st_tsc = 1;
    }
#endif

#ifdef PAKAI_GPS
    int hasil_gpsnya;
    awal_gps();
#endif

#ifdef PAKAI_ADC
    extern unsigned char status_adcnya;
#endif

#ifdef PAKAI_GPIO_DIMMER
    //init_remang();
#endif

#ifdef PAKAI_PM
    int almtSumber=0;
    int sPM=0;

#ifdef AMBIL_PM
    printf("Init ambil PM ..-ambilcepat-..!!!\r\n");
    vTaskDelay(3000);
#endif
#endif

    int waktunya=0;
    char dataserial[50];

    vTaskDelay(50);
    for(;;) {
        vTaskDelay(1);

#ifdef DATA_RANDOM
        data_f[loopambil%10] = (float) ((rand() % 100));
        //printf("%d: data: %.1f\r\n", loopambil%10, data_f[loopambil%10]);
#endif

        loopambil++;
#ifdef PAKAI_GPS
        if (serPollGPS())
        {
            hasil_gpsnya = proses_gps();
#if 0
            info_gps(hasilGPS);
#endif
        }
#endif

#ifdef PAKAI_PM
#ifdef AMBIL_PM			// AMBIL_PM
        sedot_pm();
#endif
#endif

#ifdef PAKAI_ADC
        if (status_adcnya) {
            proses_data_adc();
            //printf("proses adc ... %d !!\r\n", status_adcnya);

#ifdef BOARD_KOMON_420_SAJA
            hitung_datanya();
#endif

            simpan_ke_data_f();
        }
#endif

#ifdef BOARD_KOMON_KONTER
        if (loopambil%20==0) {		// 5x20 = 100
            hitung_rpm();
        }
        data_frek_rpm();
#endif

#ifdef BOARD_KOMON_KONTER_3_0
        if (loopambil%20==0) {		// 5x20 = 100
            hitung_rpm();
            data_frek_rpm();
        }
#endif

#ifdef PAKAI_I2C
#if 0
        if (st_tsc) {
            if (loopambil%500==0) {	// 2*250: 500ms = 0.5 detik
                printf("__detik: %3d\r\n", c++);
                //baca_register_tsc();

#if 1
                if (int_berganti() == 0)
                {
                    printf("disentuh\r\n");
                }
                else
                    printf("HIGH\r\n");
                //vSerialPutString(0, "HIGH\r\n");
#endif
            }
        }
#endif
#if 0
        if (st_tsc) {
            if (xSerialGetChar(1, &c, 0xFFFF ) == pdTRUE)
            {
                vSerialPutString(0, "Tombol ditekan = ");
                xSerialPutChar(	0, (char ) c);
                vSerialPutString(0, " \r\n");

                if ( (char) c == 's')
                {
                    printf(" Set\r\n");
                    /*
                    if (i2c_set_register(0x68, 1, 8))
                    {
                    	out(" NO ACK !!\r\n");
                    }
                    else
                    	out(" OK\r\n");
                    */

                    if (setup_fma())
                    {
                        printf(" NO ack !\r\n");
                    }
                    else
                        printf(" OK ack !\r\n");


                }
                else
                {
                    printf("====\r\n");
                    for (i=0; i<16; i++)
                    {
                        if (i == 8) printf("****\r\n");

                        if (i2c_read_register(0x68, (0x50 + i), &a))
                        {
                            printf(" Read failed !\r\n");
                        }
                        else
                        {
                            printf(" Read OK =");
                            a = a + '0';
                            printf("%c", (char) a);
                            printf(" \r\n");
                        }
                    }

                    printf("KEY \r\n");
                    if (i2c_read_register(0x68, 0x68, &a))
                    {
                        printf(" Read failed !\r\n");
                    }
                    else
                    {
                        printf(" Read OK =");
                        a = a + '0';
                        printf("%c", (char) a);
                        printf(" \r\n");
                    }
                    //a = read_key();
                    //a = a + '0';
                    //xSerialPutChar(	0, (char ) a);
                }
            }
        }
#endif

#endif


#ifdef PAKAI_GPIO_DIMMER
        //remangkan();
        /*
        loop_pwm++;

        #ifdef DEBUG_PWM_GPIO
        if (loop_pwm>500) {
        	loop_pwm=0;
        	blink_pwm=1-blink_pwm;
        	if (blink_pwm) {
        		FIO1SET = BIT(30);
        	} else {
        		FIO1CLR = BIT(30);
        	}
        }
        #endif
        //*/
#endif
    }

#ifdef PAKAI_GPS
    deinit_gps();
#endif
}
Пример #17
0
void display_service(void) {
  if (menustate == MENU_NONE) {
    /* No menu active, upload+run system menu */
    uint8_t i;

    /* Dummy read to reset the interrupt line */
    i2c_read_register(DISPLAY_I2C_ADDR, DISPLAY_MENU_GETSELECTION);

    display_menu_reset();
    i = 0;
    while (pgm_read_byte(systemmenu+i)) {
      ustrcpy_P(displaybuffer, systemmenu+i);
      display_menu_add(displaybuffer);
      i += ustrlen(displaybuffer)+1;
    }
    display_menu_show(0);
    menustate = MENU_SYSTEM;

  } else if (menustate == MENU_SYSTEM) {
    /* Selection on the system menu */
    uint8_t sel = i2c_read_register(DISPLAY_I2C_ADDR, DISPLAY_MENU_GETSELECTION);

    switch (sel) {
    case SYSMENU_CHDIR:
      menu_chdir();
      break;

    case SYSMENU_CHADDR:
      menu_chaddr();
      break;

    case SYSMENU_STORE:
      menustate = MENU_NONE;
      write_configuration();
      break;

    case SYSMENU_CANCEL:
      menustate = MENU_NONE;
      return;
    }
  } else if (menustate == MENU_CHADDR) {
    /* New address selected */
    uint8_t sel = i2c_read_register(DISPLAY_I2C_ADDR, DISPLAY_MENU_GETSELECTION);

    device_address = sel+4;
    menustate = MENU_NONE;
    display_address(device_address);
  } else if (menustate == MENU_CHDIR) {
    /* New directory selected */
    uint8_t sel = i2c_read_register(DISPLAY_I2C_ADDR, DISPLAY_MENU_GETSELECTION);
    path_t path;
    cbmdirent_t dent;

    menustate = MENU_NONE;
    if (sel == 0)
      /* Cancel */
      return;

    /* Read directory name into displaybuffer */
    path.part = current_part;
    path.dir  = partition[current_part].current_dir;

    if (sel == 1) {
      /* Previous directory */
      dent.name[0] = '_';
      dent.name[1] = 0;
    } else {
      i2c_read_registers(DISPLAY_I2C_ADDR, DISPLAY_MENU_GETENTRY, sizeof(displaybuffer), displaybuffer);

      if (first_match(&path, displaybuffer, FLAG_HIDDEN, &dent))
        return;
    }

    chdir(&path, &dent);
    update_current_dir(&path);
  }
}