fsoender
Member level 2
- Joined
- Aug 7, 2012
- Messages
- 45
- Helped
- 0
- Reputation
- 0
- Reaction score
- 0
- Trophy points
- 1,286
- Activity points
- 1,553
I need some help with my project. Im reading a accelerometer with ADC on port PA0 on a Atmega16. Im reading only X-axes. I want to add Y and Z also, but I dont know how.
Im reading the input with TeraTerm, line by line downwards. I want the y and Z to be added on the side of the X value.
IM using AVR studio 4.
Can anyone help me with this?
Im reading the input with TeraTerm, line by line downwards. I want the y and Z to be added on the side of the X value.
IM using AVR studio 4.
Can anyone help me with this?
Code:
#include<avr/io.h>
#include<util/delay.h>
#include<avr/interrupt.h>
#define LONGOUT 7
char buffer[LONGOUT];
void adc_init(void);
unsigned int adc_read(void);
void adc_conversion(uint16_t);
// ADC configuration
void ADC_init(void) {
ADMUX=(1<<REFS0);
ADCSRA=(1<<ADEN)|(7<<ADPS0);
}
uint16_t ADC_get_reading(void) {
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
return ADC;
}
uint16_t ADC_read(void) {
uint8_t i;
uint16_t retval = 0;
ADC_get_reading(); // dummy read - just discarded
for (i=0; i<8; i++) {
retval += ADC_get_reading();
}
return retval / 8;
}
void init_UART(void)
{
UCSRB = ((1 << RXCIE) | (1 << RXEN) | (1 << TXEN));
UCSRC = ((1 << UCSZ1) | (1 << UCSZ0));
//Baud rate till 19200.
UBRRL = 25;
UBRRH = 0;
}
void uart_sendchar(char c) {
while(!(UCSRA & (1<<UDRE)));
UDR = c;
}
void uart_printstring(char * str) {
while (*str) {
uart_sendchar(*str++);
}
}
void main(void) {
DDRC = 0x00;
init_UART();
ADC_init();
while(1)
{
if (PINC & 0x01) //If PortC pin 0 is True, program stops.
{
ADC_read();
char buffer[8];
itoa(ADC, buffer, 10);
uart_printstring(buffer);
uart_printstring("\r\n");
_delay_ms(1500);
}
}
}