View difference between Paste ID: uLqg5dwW and wnVJWGFH
SHOW: | | - or go back to the newest paste.
1
#include <stdio.h>
2
#include <stdint.h>
3
#include <ctype.h> 
4
#include <avr/io.h>		    // include I/O definitions (port names, pin names, etc)
5
#include <avr/interrupt.h>	// include interrupt support
6
#define USART_BAUDRATE 9600
7
#define F_CPU 8000000
8
#define MYUBRR F_CPU/16/USART_BAUDRATE-1
9
static volatile unsigned char temp; //so it is global, because we can not return from interrupt
10
11
int printCHAR(char character, FILE *stream)
12
{
13
   while ((UCSR0A & (1 << UDRE)) == 0) {};
14
15
   UDR0 = character;
16
17
   return 0;
18
}
19
20
FILE uart_str = FDEV_SETUP_STREAM(printCHAR, NULL, _FDEV_SETUP_RW);
21
uint16_t samples[64];
22
uint8_t sample;
23-
void adc_init(void) // Function to initialise the ADC feature
23+
24
void setup(void)
25-
	ADCSRA=0X00; // Clear previous ADC results and status flags
25+
26-
	ADMUX |= (1 << ADLAR) | (1 << REFS0);
26+
	
27-
	ADCSRA |= (1 << ADSC) | (1 << ADEN) | (1 << ADPS1) | (1 << ADPS2)|(1<<ADIE); //interrpts now enabled
27+
	ADMUX=(1<<1); //single ended adc2/pb4
28
	ADCSRA=(1<<7) | (1<<ADATE)|(1<<ADIE) | (1<<ADPS2)|(1<<ADPS1); //125khz /64
29
	ADCSRB=0;
30
	ADCSRA|=(1<<ADSC);
31
	//RingBuffer_InitBuffer(&txBuffer, txBuffer_Data, sizeof(txBuffer_Data));
32
}
33
34
35
36
37
/*unsigned char adc_start(unsigned char channel) // Function to perform an ADC conversion, Takes 0-8 as input
38
// to select which input to convert
39
{
40
	unsigned char i;
41
	ADCH=0x00; // Clear the previous result
42
43
	i=channel&0x07; // Decide which line to perform ADC conversion on
44
	ADMUX=i|0x60; // Enter which line to perform in the ADC control register
45
	ADCSRA|=1<<ADSC;
46
  
47
	while(ADCSRA & (1<<ADSC));  // wait for conv. to complete
48-
ISR(ADC_vect){
48+
49-
// NOT USING ADC CHANNEL SELECTOR FOR NOW
49+
50-
//
50+
51-
//
51+
52-
//		unsigned char i;
52+
ISR(ADC_vect,ISR_NOBLOCK)
53-
//	ADCH=0x00; // Clear the previous result
53+
54-
//	i=channel&0x07; // Decide which line to perform ADC conversion on
54+
	sample++;
55-
//	ADMUX=i|0x60; // Enter which line to perform in the ADC control register
55+
	if(sample>63) sample=0;
56-
 // wait for conv. to complete
56+
	samples[sample]=ADCL;
57-
	temp = ADCH; //unsigned int temp=ADC;   for 10 bits
57+
	samples[sample]|=( ((uint16_t)ADCH)<<8 );
58-
	printf("read: %d \n\r", temp);
58+
59
60
int main (void)
61
{
62
   
63
   UCSR0B |= (1 << RXEN) | (1 << TXEN);   // Turn on the transmission and reception circuitry
64
   UCSR0C |= (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
65
   UBRR0H = (MYUBRR >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
66
   UBRR0L = MYUBRR; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
67
   stdout = &uart_str; 
68
   printf("Hello World\n\r"); 
69
   uint8_t result=0;
70
   setup();
71
   sei();//global interrupts enable
72-
   adc_init();
72+
   uint16_t a;
73
	uint8_t i,j;
74
   ADCSRA|=1<<ADSC;
75-
   while(1){
75+
  while(1)
76-
   }
76+
	{
77
		//USI_UART_Transmit_Byte('a');
78
		//ADCSRA|=(1<<ADSC);
79
		//while(ADCSRA&(1<<ADSC));
80
		a=0;
81
		for(i=0;i<64;i++)
82
			a+=samples[i];
83
		a|=( ((uint16_t)ADCH)<<8 );
84
		printf("S: %u\r\n",a);
85
	
86
		
87
	}
88
89
}