PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lauflichtgeschwindigkeit über Poti regeln



rocketman123
22.02.2008, 18:13
Hallo,
hab gerade lauflichter programmiert. jetzt möcht ich die Geschwindigkeit meines lauflichts über ein Poti (ADC-Eingang) steuern.
kann mir jemand bei meinem code weiterhelfen


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

uint16_t auswertung (void);
volatile uint16_t wert=0;

zeit (void)
int n;


int main (void)
{
uint16_t =0,ergebnis=0;
n = 0;

//Ports initialisieren
DDRD = 0xFF; //Port C als Ausgang für die LED's
PORTD = 0XFF; //Pull Up's aktiviert


while(1)
{
zeit = n;
ergebnis = auswertung();

PORTD = (0b00000001);
_delay_ms(n);
PORTD = (0b00000010);
_delay_ms(n);
PORTD = (0b00000100);
_delay_ms(n);
PORTD = (0b00001000);
_delay_ms(n);
PORTD = (0b00010000);
_delay_ms(n);
PORTD = (0b00100000);
_delay_ms(n);
PORTD = (0b01000000);
_delay_ms(n);
PORTD = (0b10000000);
_delay_ms(n);
PORTD = (0b01000000);
_delay_ms(n);
PORTD = (0b00100000);
_delay_ms(n);
PORTD = (0b00010000);
_delay_ms(n);
PORTD = (0b00001000);
_delay_ms(n);
PORTD = (0b00000100);
_delay_ms(n);
PORTD = (0b00000010);
_delay_ms(n);

}



uint16_t auswertung (void)
{


//Initialisieren
ADCSRA = ((1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0));
ADMUX = ((1<<MUX3));//interner Vref wird benutzt 2,5V; ohne REFS1 und REFS2 wird angelegter Vref bentzt max 5V; MUX3 ist ADC0

//Dummy Auslesung als Warm-Up wie im Tutorial
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));

//Messung
ADCSRA |= (1<<ADSC);
while (ADCSRA & (1<<ADSC));

wert = ADCL; //ERR
wert += (ADCH<<8); //Alternativ 'wert = ADCW;'

ADCSRA &= ~(1<<ADEN); //ADC Disable

return wert;

}

zeit (void)//auslesen von adc und damit geschwindigkeit der leds festlegen
{

{if ( (ergebnis <= 256) & (ergebnis > 0) )
{n=10;}
if ( (ergebnis <= 512) & (ergebnis > 256) )
{n=100;}
if ( (ergebnis <= 768) & (ergebnis > 512) )
{n=500;}
if ( (ergebnis <= 1024) & (ergebnis > 768) )
{n=1000;}
else {n=0;}}
return n;
}

fluchtpunkt
22.02.2008, 18:19
der Wert von _delay_xs muss zur Compilezeit bekannt sein.

Wie waere es mit einer Schleife, in die dann das _delay_ms kommt, die je nach Potistellung n mal durchlaufen wird.


EDITH: Da ist ja noch viel mehr kaputt. Sicher das du C einigermassen beherrschst? Mit Codestueckchen abschreiben kommt man ohne Grundwissen nicht sehr weit, sieht man ganz deutlich da die einzelnen Stuecken recht korrekt aussehen, aber beim Verknuepfen der einzelnen Codeteile ist fast alles irgendwie falsch.
Lies mal einschlaegige Tutorials.