Advertisement
Guest User

Untitled

a guest
Sep 13th, 2017
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. void adc_init()
  2. {
  3.     //Wlaczenie wewnetrznego napiecia referencyjnego (REFS0, REFS1)
  4.     //Wynik przechowywany w rejestrze ADCH (bit ADLAR)
  5.     ADMUX |= _BV(REFS0) | _BV(REFS1) | _BV(ADLAR);
  6.     //Uruchomienie przetwornika w trybie pojedyńczej konwersji
  7.     ADCSRA |= _BV(ADEN) | _BV(ADPS0) | _BV(ADPS2) | _BV(ADIE) | _BV(ADSC) | _BV(ADATE);
  8. }
  9.  
  10. ISR(ADC_vect)
  11. {
  12.  
  13.     //zablokowanie globalnego systemu przerwan
  14.     cli();
  15.  
  16.         //Pomiar 8 kolejnych wartosci z przetwornika ADC
  17.         if( adc_licznik_2 < 8 )
  18.         {
  19.             //kolejny pomiar
  20.             adc_licznik_2++;
  21.             //dodawanie kolejnych pomiarow do tablicy (suma)               
  22.             adc_suma[adc_licznik_1] += ADCH;
  23.         }
  24.         else
  25.         {
  26.             //zerowy kanał przetwornika
  27.             ADMUX = 0xE0;
  28.             //zerowanie licznika pomiarow
  29.             adc_licznik_2 = 0;
  30.             //srednia z 8 pomiarów
  31.             adc_zmierzone[adc_licznik_1] = ( adc_suma[adc_licznik_1] / 8 );
  32.             //zerownie kolumny tablicy zniennej suma
  33.             adc_suma[adc_licznik_1] = 0;
  34.  
  35.             adc_licznik_1++;
  36.  
  37.             ADMUX |= adc_licznik_1;
  38.         }
  39.  
  40.         if( adc_licznik_1 == 4 )
  41.         {
  42.             // wykorzystanie pierwszych 4 kanalow przetwornika ADC
  43.             ADMUX = 0xE0;
  44.             adc_licznik_1 = 0;
  45.             ADMUX |= adc_licznik_1;
  46.         }
  47.  
  48.     //odblokowanie globalnego systemu przerwan
  49.     sei();
  50. }
  51.  
  52. static int USART_Transmit( char c, FILE *stream )
  53. {
  54.     //while( !( UCSRA & ( 1 << UDRE )) );
  55.     while ((UCSRA & (1 << UDRE)) == 0) {}
  56.     UDR = c;
  57.  
  58.     return 0;
  59. }
  60.  
  61.  
  62. static FILE mystdout = FDEV_SETUP_STREAM( USART_Transmit, NULL, _FDEV_SETUP_WRITE );
  63. int main (void)
  64. {
  65.     stdout = &mystdout;
  66.     printf("ADC0 = %u | ADC1 = %u | ADC2 = %u | ADC3 = %u\n", adc_zmierzone[0],     adc_zmierzone[1], adc_zmierzone[2], adc_zmierzone[3]);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement