// Perform a 10-bit conversion // starts conversion, waits until conversion is done, and returns result unsigned short a2dConvert10bit(unsigned char ch) { a2dSetChannel(ch); a2dCompleteFlag = FALSE; // clear conversion complete flag outb(ADMUX, (inb(ADMUX) & ~ADC_MUX_MASK) | (ch & ADC_MUX_MASK)); // set channel sbi(ADCSR, ADIF); // clear hardware "conversion complete" flag sbi(ADCSR, ADSC); // start conversion //while(!a2dCompleteFlag); // wait until conversion complete //while( bit_is_clear(ADCSR, ADIF) ); // wait until conversion complete while( bit_is_set(ADCSR, ADSC) ); // wait until conversion complete // CAUTION: MUST READ ADCL BEFORE ADCH!!! return (inb(ADCL) | (inb(ADCH)<<8)); // read ADC (full 10 bits); }
void init_peripherals() { // LED DDRC |= (1<<2); // accel pins lis3l_init(); // UART uartInit(); uartSetBaudRate(19200); uartSetFrameFormat(8, 0, 1); rprintfInit(uartAddToTxBuffer); cbi(DDRB, 1); // XBee CTS on PB1 // I2C itg3200_i2cInit(200); sbi(PORTC, 0); // i2c SCL on ATmega163,323,16,32,etc sbi(PORTC, 1); // i2c SDA on ATmega163,323,16,32,etc cbi(TWCR, TWIE); // disable interrupt // itg3200_i2cSetBitrate(200); // todo, check if if w ecan do 200 // SPI mySpiInit(); // a2d a2dInit(); a2dSetReference(ADC_REFERENCE_256V); a2dSetChannel(7); cbi(PORTA, 7); cbi(DDRA, 7); a2dStartConvert(); _delay_ms(50); // accel BOOL accelOkay = lis3l_Reset(); itg3200_init(); // switch xbee to higher baudrate // rprintfStr("+++"); // _delay_ms(55); // rprintfStr("ATBD6,CN\r"); }