-
-
Erfahrener Benutzer
Fleißiges Mitglied
So habs jetzt mal versucht, klappt leider noch nicht, hab ich da irgendwo noch nen fehler drin?
Hab ein 10k Poti zwischen VCC und GND geklemmt und den Abgang auf Port C.0 gesetzt. Hab zwischen VCC und GND 5V und kann das Poti auch bis 5V hochdrehen. Hab in nem Tutorial was von 2,56V gelesen am ADC Eingang...
#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 64 stellen
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
// Kanal des Multiplexers waehlen
// Interne Referenzspannung verwenden (also 2,56 V)
ADMUX = channel | (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)
{
//Endlosschleife
while(1)
{
uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0,
// also ADC0. In result steht das Ergebnis.
if(result>12
{
//LED an
PORTA = 0x01;
//Setze PinA.0 auf 1
}
else
{
//LED aus
PORTA = 0x00;
//Setze PinA.0 auf 0
}
} //Endlosschleife bis hier
//an diese Stelle wird das Programm wegen der Endlosschleife nicht mehr gelangen,
//außer du verlässt die while-Schleife mit einem break;
return 0;
}
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen