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); }
// 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); }
/**************************************************************************//** * @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) { } }
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; }
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", ®); //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); } } }
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; }
/***************************************************************** *I2C Functions */ void i2c_test() { uint8_t whoiam = 0; i2c_read_register(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_WHO_AM_I, &whoiam); uart_putchar(whoiam); }
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"); //*/ }
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; }
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; }
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; }
/** * @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; }
/**************************************************************************//** * @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){ } }
/* 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(); }
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; }
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 }
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); } }