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.