Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * ATmega32L_ADC_test.c
- *
- * Created: 03.12.2011 18:53:45
- * Author: Sabesto
- */
- #define F_CPU 8000000UL
- #define USART_BAUDRATE 9600
- #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
- #include <avr/io.h>
- #include <util/delay.h>
- #include <avr/interrupt.h>
- volatile uint8_t newSampleReady = 0;
- volatile uint8_t channel = 0;
- volatile uint8_t ad[7];
- void uartinit (void)
- {
- UCSRB |= (1 << RXEN) | (1 << TXEN);
- UCSRC |= (1 << UCSZ0) | (1 << UCSZ1);
- UBRRH = (BAUD_PRESCALE >> 8);
- UBRRL = BAUD_PRESCALE;
- }
- void USART1_Transmit(unsigned char data)
- {
- while (!(UCSRA & (1<<UDRE)));
- UDR = data;
- }
- void USART1_TransmitString (const char *str) {
- while (*str)
- {
- USART1_Transmit(*str);
- str++;
- }
- }
- void adcinit (void){
- ADCSRA |= (1 << ADPS2) | (1 << ADPS1); // | (1 << ADPS0); // Set ADC prescalar to 64(128) - 125KHz sample rate @ 16MHz
- ADMUX = 0b01100000;
- //ADMUX |= (1 << REFS0); // Set ADC reference to AVCC
- //ADMUX |= (1 << ADLAR); // Left adjust ADC result to allow easy 8 bit reading
- ADCSRA |= (1 << ADATE); // Set ADC to Free-Running Mode
- ADCSRA |= (1 << ADEN); // Enable ADC
- ADCSRA |= (1 << ADIE); // enable adc interrupt
- ADCSRA |= (1 << ADSC); // Start A2D Conversions
- }
- int main (void)
- {
- uartinit();
- adcinit();
- sei();
- while(1)
- {
- if (newSampleReady == 1)
- {
- for (uint8_t x = 0;x<7;x++)
- {
- USART1_Transmit(ad[x]);
- _delay_ms(100);
- }
- _delay_ms(4000);
- newSampleReady = 0;
- ADCSRA |= (1<<ADIE);
- }
- }
- }
- ISR(ADC_vect)
- {
- ad[channel] = ADCH; // Store the result (8-bits, discard the 3 LSB)
- // ADCSRA &= ~(1 << ADEN); // Disable the ADC
- channel ++;
- if (channel == 7)
- {
- ADCSRA &= ~(1<<ADIE);
- // disable interrupts for now
- newSampleReady = 1; // 7 channels sampled
- channel = 0; // Reset to channel 0
- }
- ADMUX &= 0xE0;//Update the ADMUX register
- ADMUX |= channel;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement