PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Odometrie - Anfängerproblem



Katja
18.03.2006, 16:40
Hi,

tausend Dank für eure Hilfe bei meinem letzen Problem :-). Hab jetzt aber schon wieder ein neues. Wollte mal ein kleines Programm schreiben was einfach die FrontLED einschaltet wenn ein Odometriesensor hell bzw. Dunkel wird. Also das man an dem Rad dreht und die FrontLED geht an und aus. Hab jetzt schon stundenlang damit rumgemacht und bekomms einfach nicht hin :-(
Vielleicht weiß ja jemand von euch Rat...


#include <avr/io.h>
#include <avr/interrupt.h>

volatile uint16_t speicher = 0x0000;

void init(void) {
DDRD |= (1<<DD7); //PD7 wird Ausgang
DDRD |= (1<<DD6); //PD6 wird Ausgang
PORTD |= (1<<PD7); //PD7 wird 1 gesetzt -> Odometrie LEDs an

ADMUX |= (1<<0) | (1<<REFS0); //ADC0 als eingang, Kondensator an AREF benutzen
//ADMUX |= (1<<ADLAR);
ADCSRA |= (1<<ADEN); //ADC enablen
ADCSRA |= (1<<2) | (1<<1) | (1<<0); //Presacler auf 128 einstellen
}


int main(void) {

init();
while(1){
ADCSRA |= (1<<ADSC); //Messung starten
while (! (ADCSRA & (1<<ADIF))) //Warten bis Messung fertig ist
speicher = ADCL + (ADCH<<8); //Messwert in Speicher schreiben

if (speicher < 600) {
PORTD |= (1<<PD6); //PD6 auf 1 setzen -> FrontLED an
ADCSRA |= (1 << ADIF);
}
else {
PORTD &= ~(1<<PD6); //PD6 auf 0 setzen -> FrontLED aus
ADCSRA |= (1 << ADIF);
}

speicher = 0x0000; //Speicher löschen
}
return 0;
}


lg Katja

fwallenwein
18.03.2006, 23:37
while (! (ADCSRA & (1<<ADIF))) //Warten bis Messung fertig ist
speicher = ADCL + (ADCH<<8); //Messwert in Speicher


Probier doch mal


while ( (ADCSRA & (1<<ADSC))); //Warten bis Messung fertig ist

- Semikoleon am Ende nicht übersehen.
- ADIF ist jetzt ADSC
- ! am Anfang rausgenommen