Guest User

Untitled

a guest
Nov 17th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #define BAUD 9600
  2. #define FOSC 16000000
  3. #define MYUBRR FOSC/16/BAUD -1
  4.  
  5. #define T1_PB1 1
  6. #define T1_PB2 2
  7. #define T0_PD1 5
  8. #define T0_PD2 6
  9. #define T2_PD3 3
  10.  
  11. #define num_of_leds 5
  12.  
  13. float leds[num_of_leds];
  14. int out_p[num_of_leds] = {1, 2, 5, 6, 3};
  15.  
  16. volatile unsigned char data_in[22];
  17. volatile unsigned char *command_in;
  18.  
  19. volatile unsigned char data_count;
  20. volatile unsigned char ready;
  21.  
  22. void set_pwm(int i, int pwm) {
  23. switch(i) {
  24. case 1:
  25. OCR1A = pwm;
  26. break;
  27. case 2:
  28. OCR1B = pwm;
  29. break;
  30. case 5:
  31. OCR0A = pwm;
  32. break;
  33. case 6:
  34. OCR0B = pwm;
  35. break;
  36. case 3:
  37. OCR2B = pwm;
  38. break;
  39. default:
  40. break;
  41. }
  42. }
  43.  
  44. void uart_init(void) {
  45. UBRR0H = (MYUBRR >> 8);
  46. UBRR0L = MYUBRR;
  47.  
  48. UCSR0B |= (1 << RXEN0) | (1 << TXEN0);
  49. UCSR0B |= (1 << RXCIE0);
  50. UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00);
  51. }
  52.  
  53. // главная функция
  54. void process() {
  55. // разбивает строку на числа
  56. char* pch = strtok(command_in, ";");
  57. int i = 0;
  58. while (pch != NULL) {
  59. leds[i] = char_to_float(pch);
  60. pch = strtok(NULL, ";");
  61. i++;
  62. }
  63.  
  64. // присваивает значения шима регистрам
  65. int pwm;
  66. for(int i = 0; i < num_of_leds; i++) {
  67. pwm = (led[i]*255)/2;
  68. set_pwm(out_p[i], pwm);
  69. }
  70. }
  71.  
  72. int main(void) {
  73. pin_init();
  74. timer_init();
  75. uart_init();
  76. sei();
  77.  
  78. while(1) {
  79. if (ready == TRUE) {
  80. command();
  81. ready = FALSE;
  82. }
  83. }
  84. }
  85.  
  86. ISR (USART_RX_vect) {
  87. data_in[data_count] = UDR0;
  88. if (data_in[data_count] == 'n') {
  89. ready = TRUE;
  90. data_count = 0;
  91. } else {
  92. data_count++;
  93. }
  94. }
  95.  
  96. for(int i = 0; i < num_of_motors; i++) {
  97. pwm = (leds[i]*255)/period;
  98. print(pwm); // вывод: b'127n'
  99. set_pwm(out_p[i], pwm);
  100. }
Add Comment
Please, Sign In to add comment