Hallo
Also Controller setze ich grad einen ATMega 8 ein. Ich hab den AD-Wandler gestern gestartet bekommen und Simuliere den Sensor nun mit einem Poti...
.
Habe externe Ref. Spg. gewählt, da mir der Sensor später eh einen Wert zwischen 0 und 5 V ausgibt. Auf Vref liegt bei mir jetzt Vcc also 5V.
Kann mir die Digitalen Werte auch auf dem Port über LED`s anzeigen lassen. Das funktioniert. Heute werde ich mal versuchen noch ein Servo anzusteuern. Nur für die eigentliche Regelung mit Sollwert vorgabe und so hab ich echt keinen Plan und auch keine Idee. Einer meiner Professoren hat mir heute gesagt dass es passieren kann daß das so gar nicht funktioniert und ich Probleme mit dem Speicherplatz auf dem Controller bekommen werde.
AD-Wandler hab ich jetzt mal den 8 Bit genommen. Ach ja Quarz ist ein 4 MHz drin.
Wäre euch wirklich für weitere Hilfe dankbar. Vor allem was die Regelung angeht...
Grüße!!
Bean
PS: Hier mal noch mein bisheriger Code:
Code:
#include <avr/io.h>
#include <inttypes.h>
uint16_t readADC(uint8_t channel)
{
uint8_t i;
uint16_t result = 0;
// Den ADC aktivieren und Teilungsfaktor auf 32 stellen
ADCSRA = (1<<ADEN) | (1<<ADPS0) | (1<<ADPS2);
// Kanal des Multiplexers waehlen (ADC 0)
ADMUX = (!(1<<MUX0)) | (!(1<<MUX1)) | (!(1<<MUX2));
// externe Referenzspannung verwenden (also 5,0 V)
ADMUX |= (!(1<<REFS1)) | (!(1<<REFS0));
// Den ADC initialisieren und einen sog. Dummyreadout machen
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
// Jetzt 3x die analoge Spannung and Kanal channel auslesen
// und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC);
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren
ADCSRA &= ~(1<<ADEN);
result /= 3;
return result;
}
int main(void)
{
uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
// also ADC0. In result steht das Ergebnis.
DDRD = 0xff; //PORT D als Ausgang definieren (Hier sind 8 LED`s angeschlossen)
PORTD = result;//Den Digitalen Wert mit Hilfe der LED`s anzeigen
return 0;
}
Lesezeichen