Gast
#285824
hallo, der befehl ADMUX=(1<<MUX0)|(1<<REFS0) wird nicht ausgeführt wenn
"motorspeed=4".
auch wenn ich den befehl ADMUX=(1<<MUX0)|(1<<REFS0) bei if(seite==1)
einfüge geht er nicht.
was mache ich verkehrt. da ich noch ein bascom habe, kann ich prüfen ob
die steuerung funktioniert,
und sie geht. nur in winavr-c kann ich den adcport1 nicht mit diesem
programm abfragen.
danke.
mfg karlheinz
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
#include <stdint.h>
#include "rc5.c"
#include "motor.c"
#define delay_us(us) _delayFourCycles_( ( ( 1*(F_CPU/4000) )*us)/1500
)
volatile uint16_t radzaehler=0;
volatile uint16_t toggle=0;
volatile uint16_t adc_wert;
volatile uint8_t seite;
volatile int8_t motor_speed;
static inline void _delayFourCycles_(uint16_t z)
{
uint16_t i;
for (i=0; i<z; i++)
asm volatile("nop");
}
static inline void delay_ms(uint16_t z)
{
uint16_t i;
for (i=0; i<z; i++)
delay_us(999);
}
SIGNAL (SIG_ADC)
{
if(seite==1)
{
ADMUX=(1<<REFS0);
adc_wert = ADC;
if (adc_wert >400 && toggle==1)
{
radzaehler++;
toggle=0;
}
if (adc_wert <100 && toggle==0)
{
radzaehler++;
toggle=1;
}
}
if(seite==2)
{
ADMUX=(1<<MUX0)|(1<<REFS0);
adc_wert = ADC;
if (adc_wert >400 && toggle==1)
{
radzaehler++;
toggle=0;
}
if (adc_wert <100 && toggle==0)
{
radzaehler++;
toggle=1;
}
}
}
int main(void)
{
uint8_t robby_odo;
DDRD&=~(1 << PD2);
ADCSRA|=(1<< ADEN) | (1<<ADIE) | (1<<ADPS1) | (1<<ADPS2)| (1<<ADSC)
|(1<<ADATE);
ADMUX=(1<<REFS0);
sei();
robby_init();
for (;;)
{
rc5_t_a_c();
motor_speed=rc5_code;
if (motor_speed==0)
{
robby_aus();
}
if (motor_speed==1)
{
seite=1;
robby_odo=10;
radzaehler=0;
m_wert_a=80;
m_wert_b=80;
robby_vor();
while (radzaehler<robby_odo)
{
delay_ms(5);
}
robby_aus();
rc5_code=99;
}
if (motor_speed==2)
{
seite=1;
robby_odo=10;
radzaehler=0;
m_wert_a=80;
m_wert_b=80;
robby_rueck();
while (radzaehler<robby_odo)
{
delay_ms(5);
}
robby_aus();
rc5_code=99;
}
if (motor_speed==3)
{
seite=1;
robby_odo=5;
radzaehler=0;
m_wert_a=80;
m_wert_b=0;
robby_links();
while (radzaehler<robby_odo)
{
delay_ms(5);
}
robby_aus();
rc5_code=99;
}
if (motor_speed==4)
{
seite=2;
robby_odo=5;
radzaehler=0;
m_wert_a=0;
m_wert_b=80;
robby_rechts();
while (radzaehler<robby_odo)
{
delay_ms(5);
}
robby_aus();
rc5_code=99;
}
delay_ms(5);
}
}