Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void adc_init()
- {
- //Wlaczenie wewnetrznego napiecia referencyjnego (REFS0, REFS1)
- //Wynik przechowywany w rejestrze ADCH (bit ADLAR)
- ADMUX |= _BV(REFS0) | _BV(REFS1) | _BV(ADLAR);
- //Uruchomienie przetwornika w trybie pojedyńczej konwersji
- ADCSRA |= _BV(ADEN) | _BV(ADPS0) | _BV(ADPS2) | _BV(ADIE) | _BV(ADSC) | _BV(ADATE);
- }
- ISR(ADC_vect)
- {
- //zablokowanie globalnego systemu przerwan
- cli();
- //Pomiar 8 kolejnych wartosci z przetwornika ADC
- if( adc_licznik_2 < 8 )
- {
- //kolejny pomiar
- adc_licznik_2++;
- //dodawanie kolejnych pomiarow do tablicy (suma)
- adc_suma[adc_licznik_1] += ADCH;
- }
- else
- {
- //zerowy kanał przetwornika
- ADMUX = 0xE0;
- //zerowanie licznika pomiarow
- adc_licznik_2 = 0;
- //srednia z 8 pomiarów
- adc_zmierzone[adc_licznik_1] = ( adc_suma[adc_licznik_1] / 8 );
- //zerownie kolumny tablicy zniennej suma
- adc_suma[adc_licznik_1] = 0;
- adc_licznik_1++;
- ADMUX |= adc_licznik_1;
- }
- if( adc_licznik_1 == 4 )
- {
- // wykorzystanie pierwszych 4 kanalow przetwornika ADC
- ADMUX = 0xE0;
- adc_licznik_1 = 0;
- ADMUX |= adc_licznik_1;
- }
- //odblokowanie globalnego systemu przerwan
- sei();
- }
- static int USART_Transmit( char c, FILE *stream )
- {
- //while( !( UCSRA & ( 1 << UDRE )) );
- while ((UCSRA & (1 << UDRE)) == 0) {}
- UDR = c;
- return 0;
- }
- static FILE mystdout = FDEV_SETUP_STREAM( USART_Transmit, NULL, _FDEV_SETUP_WRITE );
- int main (void)
- {
- stdout = &mystdout;
- printf("ADC0 = %u | ADC1 = %u | ADC2 = %u | ADC3 = %u\n", adc_zmierzone[0], adc_zmierzone[1], adc_zmierzone[2], adc_zmierzone[3]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement