FSTII
20.11.2006, 18:52
Hallo zusammen,
nachdem ich mittlerweile schon einige Zeit in Foren und Tutorien verbracht habe, habe ich jetzt versucht ein Programm zur AD-Wandlung zu schreiben.
Hier der Code:
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
volatile uint16_t ADCRaw = 0;
SIGNAL(SIG_ADC)
{
ADCRaw = ADC;
ADCSRA |= (1 << ADSC);
}
void Init_ADC(void)
{
DDRF &= ~(1<<DDF0);
PORTF |= (1<<PF0);
ADMUX = (1<<REFS1);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADCSRA |= (1 << ADSC);
sei();
}
void Init_Output(void)
{
DDRA = (1<<DDA0);
}
int main (void)
{
Init_Output();
Init_ADC();
while (1)
{
if(ADCRaw >= 512)
{
PORTA = (1<<PB0);
}
else
{
PORTA &= ~(1<<PB0);
}
}
return 0;
}
Allerdings wird hier nur ein Eingang gemessen. Da ich eigentlich einen Beschleunigungssensor auslesen will, müsste ich aber drei Kanäle nacheinander einlesen und die Ergebnisse auch getrennt voneinander ausgeben können.
Kann mir da jemand einen Tipp geben wie das zu realisieren ist, da ich noch nichts dazu gefunden habe was mir wirklich weiterhilft.
Gruß Matthias
nachdem ich mittlerweile schon einige Zeit in Foren und Tutorien verbracht habe, habe ich jetzt versucht ein Programm zur AD-Wandlung zu schreiben.
Hier der Code:
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/delay.h>
volatile uint16_t ADCRaw = 0;
SIGNAL(SIG_ADC)
{
ADCRaw = ADC;
ADCSRA |= (1 << ADSC);
}
void Init_ADC(void)
{
DDRF &= ~(1<<DDF0);
PORTF |= (1<<PF0);
ADMUX = (1<<REFS1);
ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
ADCSRA |= (1 << ADSC);
sei();
}
void Init_Output(void)
{
DDRA = (1<<DDA0);
}
int main (void)
{
Init_Output();
Init_ADC();
while (1)
{
if(ADCRaw >= 512)
{
PORTA = (1<<PB0);
}
else
{
PORTA &= ~(1<<PB0);
}
}
return 0;
}
Allerdings wird hier nur ein Eingang gemessen. Da ich eigentlich einen Beschleunigungssensor auslesen will, müsste ich aber drei Kanäle nacheinander einlesen und die Ergebnisse auch getrennt voneinander ausgeben können.
Kann mir da jemand einen Tipp geben wie das zu realisieren ist, da ich noch nichts dazu gefunden habe was mir wirklich weiterhilft.
Gruß Matthias