I hope this is legal putting this here. This is modified code from the Make: AVR Programming book. If you wanting to hop from Arduino to C Programming, this book is INCREDIBLE! Seriously, just freakin’ buy it.
This code measures a voltage coming into PC0 and spits it out through the serial monitor. The scaling isn’t right, but adjusting the voltage on PC0 with a potentiometer delivers reasonable results.
// ************ ADC works well enough
//p.135 AVR Programming Make Book Mostly ********************
// The scaling is screwy, but I can adjust a potentiometer
//and get reasonable 8-bit data
// ADC is reading PC0.
#include <avr/io.h>
#include <util/delay.h>
#include "pinDefines.h"
#include "USART.h"
static inline void initADC0(void) {
ADMUX |= (1 << REFS0); // reference voltage
ADCSRA |= (1 << ADPS1) | (1 << ADPS0); // ADC clock prescaler /8
ADCSRA |= (1 << ADEN); // enable ADC
}
int main(void){
// Inits
uint16_t adcValue;
//uint8_t i;
initADC0();
initUSART();
printString("Hello!\r\n");
while (1) {
ADCSRA |= (1 << ADSC); // start ADC conversion
loop_until_bit_is_clear(ADCSRA, ADSC);
// wait until finished
adcValue = ADC; // Read ADC in
_delay_ms(50);
transmitByte(adcValue);
_delay_ms(1000);
} // end big loop
return(0);
}