void LED_readPage( uint8_t len, uint8_t page ) { // Software shutdown must be enabled to read registers LED_writeReg( 0x0A, 0x00, 0x0B ); // Page Setup uint8_t pageSetup[] = { 0xE8, 0xFD, page }; // Setup page while ( I2C_Send( pageSetup, sizeof( pageSetup ), 0 ) == 0 ) delay(1); // Register Setup uint8_t regSetup[] = { 0xE8, 0x00 }; // Read each register in the page for ( uint8_t reg = 0; reg < len; reg++ ) { // Update register to read regSetup[1] = reg; // Configure register while ( I2C_Send( regSetup, sizeof( regSetup ), 0 ) == 0 ) delay(1); // Register Read Command uint8_t regReadCmd[] = { 0xE9 }; // Request single register byte while ( I2C_Send( regReadCmd, sizeof( regReadCmd ), 1 ) == 0 ) delay(1); dbug_print("NEXT"); } // Disable software shutdown LED_writeReg( 0x0A, 0x01, 0x0B ); }
uint8_t IO2::digitalRead(uint8_t pin) { int fd; unsigned char buff[1] = {GET_PORT}, data, result; I2C_Open(&fd, address); I2C_Send(&fd, buff, 1); I2C_Close(&fd); I2C_Open(&fd, address); I2C_Read(&fd, &data, 1); I2C_Close(&fd); return !!(data & pin); }
void LED_zeroPages( uint8_t startPage, uint8_t numPages, uint8_t pageLen ) { // Page Setup uint8_t pageSetup[] = { 0xE8, 0xFD, 0x00 }; // Max length of a page + chip id + reg start uint8_t fullPage[ 0xB3 + 2 ] = { 0 }; fullPage[0] = 0xE8; // Set chip id, starting reg is already 0x00 // Iterate through given pages, zero'ing out the given register regions for ( uint8_t page = startPage; page < startPage + numPages; page++ ) { // Set page pageSetup[2] = page; // Setup page while ( I2C_Send( pageSetup, sizeof( pageSetup ), 0 ) == 0 ) delay(1); // Zero out page while ( I2C_Send( fullPage, pageLen + 2, 0 ) == 0 ) delay(1); } }
void main(void) { OPTION=0xFF; GIE=0; while(1) { pause(1); I2CBUFF[1]++; I2CBUFF[2]--; I2CBUFF[3]++; I2CBUFF[4]--; I2CBUFF[0]=0; I2C_Send(0x74,I2CBUFF,5); } }
/* Read GPIO Analog Inputs */ void ReadADC(unsigned char value) { int fd; unsigned char buff[5]; unsigned char data[5]; switch(value) { case 255: ReadADC(0); ReadADC(1); ReadADC(2); ReadADC(3); ReadADC(5); break; case 0: case 1: case 2: case 3: case 5: buff[0]=0x10+value; data[0]=0x00; /* Open I2C-BUS */ I2C_Open(&fd, 0x21); /* Write register */ I2C_Send(&fd, buff,1 ); /* Read the ADC */ I2C_Read(&fd, data, 2); /* Convert to Volts. Vref = 3.3V, ADC is 10 bits */ float volts = data[0] * 0.003222656 + data[1]*0.825; printf("ADC%u: %1.3fV\n",value, volts); /* Close I2C-BUS */ I2C_Close(&fd); break; default: printf("ADC%u not found\n",value); } }
void Sync_RTC(void){ time_t ltime; struct tm *rtc_tm; ltime = time(NULL); rtc_tm = localtime(<ime); int fd; unsigned char buff[10]; unsigned char data[10]; buff[0] = 0x02; /* Open I2C-BUS */ I2C_Open(&fd, 0x51); /* Write register */ I2C_Send(&fd, buff, 1) ; /* Read the RTC */ I2C_Read(&fd, data, 7); /* Close I2C-BUS */ I2C_Close(&fd); data[0] &= 0x7F; data[1] &= 0x7F; data[2] &= 0x3F; data[3] &= 0x3F; data[4] &= 0x07; data[5] &= 0x1F; data[6] &= 0xFF; rtc_tm -> tm_sec = BCDtoInt(data[0]); rtc_tm -> tm_min = BCDtoInt(data[1]); rtc_tm -> tm_hour = BCDtoInt(data[2]); rtc_tm -> tm_mday = BCDtoInt(data[3]); rtc_tm -> tm_wday = BCDtoInt(data[4]); rtc_tm -> tm_mon = BCDtoInt(data[5]); rtc_tm -> tm_year = BCDtoInt(data[6]); const struct timeval tv = {mktime(rtc_tm), 0}; settimeofday(&tv, 0); }
uint16_t IO2::analogRead(uint8_t pin) { int fd; uint16_t result; unsigned char buff[1] = {pin}, data[2]; I2C_Open(&fd, address); I2C_Send(&fd, buff, 1); I2C_Close(&fd); I2C_Open(&fd, address); I2C_Read(&fd, data, 2); I2C_Close(&fd); result = (data[1] << 8) | data[0]; return result; }
/* Set GPIO Outputs */ void Set_LAT(unsigned char value){ int fd; unsigned char buff[5]; buff[0]=0x02; buff[1]=value; /* Open I2C-BUS */ I2C_Open(&fd, 0x21); /* Write register */ I2C_Send(&fd, buff,2 ); /* Close I2C-BUS */ I2C_Close(&fd); }
void Read_RTC(void){ int fd; unsigned char buff[10]; unsigned char data[10]; buff[0] = 0x02; /* Open I2C-BUS */ I2C_Open(&fd, 0x51); /* Write register */ I2C_Send(&fd, buff, 1) ; /* Read the RTC */ I2C_Read(&fd, data, 7); /* Close I2C-BUS */ I2C_Close(&fd); data[0] &= 0x7F; data[1] &= 0x7F; data[2] &= 0x3F; data[3] &= 0x3F; data[4] &= 0x07; data[5] &= 0x1F; data[6] &= 0xFF; printf("Sec: %d\n",BCDtoInt(data[0])); printf("Min: %d\n",BCDtoInt(data[1])); printf("Hour: %d\n",BCDtoInt(data[2])); printf("MDays: %d\n",BCDtoInt(data[3])); printf("WDays: %d\n",BCDtoInt(data[4])); printf("Month: %d\n",BCDtoInt(data[5])); printf("Year: %d\n",BCDtoInt(data[6])); }
/* Switch Relay On */ void RelayOn(unsigned char value){ int fd; unsigned char buff[5]; buff[0]=0x41; buff[1]=value; /* value: * 1 - switch relay 1 on * 2 - switch relay 2 on * 3 - switch both relays on * / /* Open I2C-BUS */ I2C_Open(&fd, 0x21); /* Write register */ I2C_Send(&fd, buff,2 ); /* Close I2C-BUS */ I2C_Close(&fd); }
/* Set New I2C device address */ void Set_Address(unsigned char value){ int fd; unsigned char buff[5]; buff[0]=0xF0; buff[1]=value; /* value: * New Address to be setted * / /* Open I2C-BUS */ I2C_Open(&fd, 0x21); /* Write register */ I2C_Send(&fd, buff,2 ); /* Close I2C-BUS */ I2C_Close(&fd); }
unsigned char I2C_LoginSector0(unsigned char *buf,unsigned char bufsize) { return(I2C_Send(IIC_ComLoginSector0,sizeof(IIC_ComLoginSector0),buf,bufsize));}
unsigned char I2C_ComReadUltralightPage5(unsigned char * buf, unsigned char bufsize) { return(I2C_Send(IIC_ComReadUltralightPage5,sizeof(IIC_ComReadUltralightPage5),buf,bufsize));}
unsigned char I2C_ComRedLedOff(unsigned char * buf, unsigned char bufsize) { return(I2C_Send(IIC_ComRedLedOff,sizeof(IIC_ComRedLedOff),buf,bufsize));}
unsigned char I2C_ComCopyValue(unsigned char * buf, unsigned char bufsize) { return(I2C_Send(IIC_ComCopyValue,sizeof(IIC_ComCopyValue),buf,bufsize));}
unsigned char I2C_ComReadPurse1(unsigned char * buf, unsigned char bufsize) { return(I2C_Send(IIC_ComReadPurse1,sizeof(IIC_ComReadPurse1),buf,bufsize));}
unsigned char I2C_ReadBlock1(unsigned char *buf,unsigned char bufsize) { return(I2C_Send(IIC_ComReadBlock1,sizeof(IIC_ComReadBlock1),buf,bufsize));}
unsigned char I2C_SelectCard(unsigned char *buf,unsigned char bufsize) { return(I2C_Send(IIC_ComSelectCard,sizeof(IIC_ComSelectCard),buf,bufsize));}