void initialize( void ) { CPU_PRESCALE(0); USART_Init(BAUD_RATE); USART_Transmit('\f'); // Send form feed to clear the terminal. USART_SendString("WunderBoard initializing...\r\n"); USART_SendString("\tSetting ADC prescaler and disabling free running mode...\r\n"); SetupADC(ADC_PRESCALER_32, FALSE); USART_SendString("\tEnabling ADC...\r\n"); ADCEnable(); USART_SendString("\tSetting ADC reference to Vcc...\r\n"); ADCSetReference(ADC_REF_VCC); // Configure IO // USART_SendString("\tConfiguring IO...\r\n"); //DDRx corresponds to PORTx/PINx, dependng on direction of data flow -- PORT for output, PIN for input DDRA = 0x00; // Buttons and switches DDRB = 0xE7; // Red enable, green enable and audio out DDRC = 0xff; // Discrete LEDs DDRE = 0x47; // LED Column DDRF = 0x00; // Accelerometer // Disable pullups and set outputs low // PORTA = 0x00; PORTB = 0x01; PORTC = 0x81; PORTE = 0x00; PORTF = 0x00; //Set OC1A to toggle TCCR1A = 0b01000000; // Clk/64 and CTC mode TCCR1B = 0b00001011; OCR1A = 24; USART_SendString("\tSetting SPI\r\n"); //Set the SPI bus appropriately to use the LED array SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); }
int ServoError(uint8_t destination) { uint8_t position; ADCSetReference(ADC_REF_VCC); position = ReadADC(POT_ADC); if (destination > UPPER_BOUND) { destination = UPPER_BOUND; // Set it to the upper bound } else if (destination < LOWER_BOUND) { destination = LOWER_BOUND; // Set it to the lower bound } return position - destination; }