fugitivus
09.01.2012, 12:40
Hi !
Ich habe hier ein kleines problem beim umschalten der adc Kanähle...
Irgendwie scheinen sie sich gegenseitig zu beeinflussen....
was mache ich hier falsch ? werde nicht schlau draus...
Würde mich über jedliche hilfe freuen !
//CLK = 8MHz Timer0 = 100KHz ADC = 62,5KHz //Controller = Tiny85
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define T0REL 176
#define LEDS PORTB
#define LED1 2
#define LED2 4
volatile int _adc2 = 0;
volatile int _adc3 = 0;
volatile int _timer = 0;
void cfgPorts(void)
{
DDRB = 0b00000110;
PORTB = 0b00000000;
}
void cfgTimer0(void)
{
TCNT0 = T0REL;
TCCR0B |= (1<<CS00);
TIMSK |=(1<<TOIE0);
}
void cfgAdc(void)
{
ADCSRA|= (1<<ADEN);
ADCSRA |= (1<<ADPS1);
ADCSRA |= (1<<ADPS2);
ADCSRA |= (1<<ADPS0);
ADMUX &=~ (1<<REFS0);
ADMUX |= (1<<MUX0);
ADMUX |= (1<<MUX1);
}
int getAdc(unsigned char channel)
{
int output=0;
ADMUX = channel;
ADCSRA |= (1<<ADSC);
//while (!(ADCSRA & (1<<ADIF)))
while ((ADCSRA & (1<<ADSC)))
{
output = ADCL | (ADCH<<8);
}
return output;
}
void enableInterrupts(void)
{
SREG |= 128;
}
int main(void)
{
cfgPorts();
cfgTimer0();
cfgAdc();
enableInterrupts();
while(1)
{
_adc2 = getAdc(2);
_adc3 = getAdc(3);
_delay_ms(10);
}
return 0;
}
//soft pwm für Anzeige Leds
ISR(TIMER0_OVF_vect)
{
TCNT0 = T0REL;
if(_timer++> 1024)_timer = 0;
if(_adc2 > _timer)
{
LEDS |= LED1;
}else
{
LEDS &=~ LED1;
}
if(_adc2 > _timer)
{
LEDS |= LED2;
}else
{
LEDS &=~ LED2;
}
}
achso am adc hängen 2 potis an dem einen 10K an dem anderen 100K
wenn ich nur einen adc auslese funktioniert alles wunderbar...
Mfg Fugitivus
Ich habe hier ein kleines problem beim umschalten der adc Kanähle...
Irgendwie scheinen sie sich gegenseitig zu beeinflussen....
was mache ich hier falsch ? werde nicht schlau draus...
Würde mich über jedliche hilfe freuen !
//CLK = 8MHz Timer0 = 100KHz ADC = 62,5KHz //Controller = Tiny85
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define T0REL 176
#define LEDS PORTB
#define LED1 2
#define LED2 4
volatile int _adc2 = 0;
volatile int _adc3 = 0;
volatile int _timer = 0;
void cfgPorts(void)
{
DDRB = 0b00000110;
PORTB = 0b00000000;
}
void cfgTimer0(void)
{
TCNT0 = T0REL;
TCCR0B |= (1<<CS00);
TIMSK |=(1<<TOIE0);
}
void cfgAdc(void)
{
ADCSRA|= (1<<ADEN);
ADCSRA |= (1<<ADPS1);
ADCSRA |= (1<<ADPS2);
ADCSRA |= (1<<ADPS0);
ADMUX &=~ (1<<REFS0);
ADMUX |= (1<<MUX0);
ADMUX |= (1<<MUX1);
}
int getAdc(unsigned char channel)
{
int output=0;
ADMUX = channel;
ADCSRA |= (1<<ADSC);
//while (!(ADCSRA & (1<<ADIF)))
while ((ADCSRA & (1<<ADSC)))
{
output = ADCL | (ADCH<<8);
}
return output;
}
void enableInterrupts(void)
{
SREG |= 128;
}
int main(void)
{
cfgPorts();
cfgTimer0();
cfgAdc();
enableInterrupts();
while(1)
{
_adc2 = getAdc(2);
_adc3 = getAdc(3);
_delay_ms(10);
}
return 0;
}
//soft pwm für Anzeige Leds
ISR(TIMER0_OVF_vect)
{
TCNT0 = T0REL;
if(_timer++> 1024)_timer = 0;
if(_adc2 > _timer)
{
LEDS |= LED1;
}else
{
LEDS &=~ LED1;
}
if(_adc2 > _timer)
{
LEDS |= LED2;
}else
{
LEDS &=~ LED2;
}
}
achso am adc hängen 2 potis an dem einen 10K an dem anderen 100K
wenn ich nur einen adc auslese funktioniert alles wunderbar...
Mfg Fugitivus