Hallo, im AVR-GCC Tutorial wird eine Möglichkeit beschrieben, wie mit nur einem Pin ein Widerstand bzw. eine Spannung gemessen wird. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Messen_eines_Widerstandes Ich würde das gern mit einem ATtiny 2313 machen. Wie funktioniert das genau aus Code-Sicht? Gibt es einen Beispielcode dazu? Danke und Gruß
/* ADC initialisieren */
void ADC_Init(void) {
uint16_t result;
// ADMUX = (0<<REFS1) | (1<<REFS0); // AVcc als Referenz benutzen
ADMUX = (1<<REFS1) | (1<<REFS0); // interne Referenzspannung
nutzen
ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
ADCSRA |= (1<<ADEN); // ADC aktivieren
/* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man
liest
also einen Wert und verwirft diesen, um den ADC "warmlaufen zu
lassen" */
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC) ) {} // auf Abschluss der
Konvertierung warten
/* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
Wandlung nicht übernommen. */
result = ADCW;
}
/* ADC Einzelmessung */
uint16_t ADC_Read( uint8_t channel )
{
// Kanal waehlen, ohne andere Bits zu beeinflußen
ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while (ADCSRA & (1<<ADSC) ) {} // auf Abschluss der Konvertierung
warten
return ADCW; // ADC auslesen und zurückgeben
}
/* ADC Mehrfachmessung mit Mittelwertbbildung */
uint16_t ADC_Read_Avg( uint8_t channel, uint8_t average )
{
uint32_t result = 0;
for (uint8_t i = 0; i < average; ++i )
result += ADC_Read( channel );
return (uint16_t)( result / average );
}
...
/* Beispielaufrufe: */
int main()
{
uint16_t adcval;
ADC_Init();
while( 1 ) {
adcval = ADC_Read(0); // Kanal 0
// mach was mit adcval
adcval = ADC_Read_Avg(2, 4); // Kanal 2, Mittelwert aus 4 Messungen
// mach was mit adcval
}
}
OK, so macht man es, wenn man einen ADC hat... Wie macht man es, wenn man wie im Beispiel des AVR-GCC-Tutorials keinen ADC hat (z.B. ATtiny2313), sondern mithilfe eines RC-Glieds eine Zeit mißt und daruas auf eine Spannung schließt. (Ich meine jetzt nicht die Methode mit 3 Pins aus appnote AVR400).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.