Guest User

Untitled

a guest
Jun 17th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.98 KB | None | 0 0
  1. #include <avr/io.h>
  2. #include <util/delay.h>
  3. #include <avr/interrupt.h>
  4. #include <string.h>
  5. #include <stdio.h>
  6.  
  7. #define USART_BAUD 19200ul
  8. #define USART_UBBR_VALUE ((14745600/(USART_BAUD<<4))-1)
  9.  
  10. volatile uint8_t fla = 0;
  11. volatile uint8_t analog1 = 110;
  12. volatile uint8_t analog2 = 120;
  13.  
  14. //funkcja wyboru kanalu ADC zwracajaca jego konwersje
  15. uint8_t read_ADC(uint8_t channel)
  16. {
  17.     ADMUX &= 0xF0;
  18.     ADMUX |= (channel & 0x07);
  19.     ADCSRA |= (1<<ADSC);
  20.     loop_until_bit_is_clear(ADCSRA, ADSC);
  21.     return ADCH;
  22. }
  23.  
  24. //inicjalizacja CTC na Timer2
  25. void CTC_Init()
  26. {
  27.     TCCR2 = (1<<WGM21) | (1<<CS22);
  28.     TIMSK = (1<<OCIE2);
  29.     OCR2 = 114;
  30. }
  31.  
  32. void USART_Init(void)
  33. {
  34.     //ustawienie baud rate high zgodnie z dokumentacja
  35.     UBRRH = (uint8_t)(USART_UBBR_VALUE>>8);
  36.     //ustawienie baud rate low
  37.     UBRRL = (uint8_t)USART_UBBR_VALUE;
  38.     //wlaczenie rejestru UCSRC, bit parzystosci wylaczony, asynchroniczny, 1 bit stopu,
  39.     //rozmiar danych 8-bitow
  40.     UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
  41.     //pozwol na otrzymywanie danych, wysyl danych oraz wlacz przerwanie RXC (gdy odebrano dane)
  42.     UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
  43. }
  44.  
  45. uint8_t USART_ReceiveByte()
  46. {
  47.     //czekaj az dane trafia do buforu
  48.     while((UCSRA&(1<<RXC)) == 0);
  49.     //pobierz dane z bufora
  50.     return UDR;
  51. }
  52.  
  53. void USART_SendByte(uint8_t u8Data)
  54.  
  55. {
  56.     //czekaj az bufor bedzie pusty
  57.     while((UCSRA&(1<<UDRE)) == 0);
  58.     //wyslij
  59.     UDR = u8Data;
  60. }
  61.  
  62. int main()
  63. {
  64.     DDRB = (1<<PB0);
  65.  
  66.     ADCSRA = (1<<ADEN) //ADEN=1 włączenie przetwornika ADC)  
  67.              |(1<<ADPS0) // ustawienie preskalera na 128  
  68.              |(1<<ADPS1)  
  69.              |(1<<ADPS2);
  70.  
  71.     ADMUX  = (1<<REFS0) | (1<<ADLAR); // REFS1:0: wybór napięcia odniesienia ADC, 8 bitów high z ADC
  72.  
  73.     CTC_Init();
  74.     USART_Init();
  75.     sei();
  76.     while(1)
  77.     {
  78.         analog1 = read_ADC(0x4);
  79.         analog2 = read_ADC(0x5);
  80.     }
  81. }
  82.  
  83. //funkcja wysylajaca odczytane napiecia z czestotliwoscia 2kH
  84. ISR(TIMER2_COMP_vect)
  85. {
  86.     USART_SendByte(analog1);
  87.     USART_SendByte(analog2);
  88.     USART_SendByte('\r');
  89. }
Add Comment
Please, Sign In to add comment