hi
also ich benutze ein zweites Netzteil mit dem ich 0V-2,5V anlegen kann und das is wie folgt angeschlossen
erste Stromquelle nur an VCC und GND um das board zu versorgen
zweite stromquelle am +pol mit dem gewünschten ADCpin verbunden (in meinem fall PA1) und am -pol mit GND verbunden
dann noch einen Kondensator von AREF zu GND (wobei es auch ohne den kondensator geht)
alles andere ist konfigurationssache des programms
mein programm:
ADC.c
main.cCode:#include <avr/io.h> #include <avr/iom16.h> #include <inttypes.h> #include "ADC.h" uint16_t ReadChannel(uint8_t mux) { uint8_t i; uint16_t result; ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // Frequenzvorteiler // setzen auf 8 (1) und ADC aktivieren (1) ADMUX = mux; // Kanal waehlen ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen /* 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 } result = ADCW; // ADCW muss einmal gelesen werden, // sonst wird Ergebnis der nächsten Wandlung // nicht übernommen. /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */ result = 0; for( i=0; i<4; i++ ) { ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while ( ADCSRA & (1<<ADSC) ) { ; // auf Abschluss der Konvertierung warten } result += ADCW; // Wandlungsergebnisse aufaddieren } ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2) result /= 4; // Summe durch vier teilen = arithm. Mittelwert return result; }
ADC.hCode:#include <avr/io.h> #include <avr/iom16.h> #include <inttypes.h> #include "ADC.h" #define F_CPU 4000000UL #include <util/delay.h> int main (void) { DDRA = 0; DDRD = 1; _delay_ms(500); PORTD = 0xff; _delay_ms(500); PORTD = 0x00; _delay_ms(500); uint16_t adcval = 0x00; while(1) { adcval = ReadChannel(0); /* MUX-Bits auf 0b0000 -> Channel 0 */ PORTD = adcval; _delay_ms(250); } return 0; }
ich benutze übrigens auch den ATmega 16 und das pollin board (allerdings zusammen mit dem addonboard)Code:uint16_t ReadChannel(uint8_t mux);
mfg Grandalf







Zitieren

Lesezeichen