Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.21 KB | None | 0 0
  1. /*
  2. * Servomotor.c
  3. *
  4. * Created: 18.03.2019 13:44:05
  5. * Author : lgoeke
  6. */
  7.  
  8. #include <avr/io.h>
  9. #include <avr/interrupt.h>
  10.  
  11.  
  12. volatile int iI;
  13.  
  14.  
  15.  
  16. ISR(TIMER0_OVF_vect)
  17. {
  18. if(iI == 0)
  19. {
  20. PORTB = 0x01; //Pin 1 auf High
  21. TCNT0 = 0x43; //Timer auf 1,5 ms
  22. iI++; //iI + 1
  23. }
  24.  
  25. else if(iI == 1)
  26. {
  27. PORTB = 0x00; //Pin 1 auf low
  28. TCNT0 = 0xC0; //Timer auf 0,5 ms
  29. iI++; //iI + 1
  30. }
  31.  
  32. else if((iI > 1) && (iI < 11))
  33. {
  34. TCNT0 = 0x05; // Timer auf 2ms
  35. iI++; //iI + 1
  36. }
  37.  
  38. else if(iI == 11)
  39. {
  40. TCNT0 = 0x05; //Timer auf 2ms
  41. iI = 0; //iI auf 0
  42. }
  43. }
  44.  
  45.  
  46.  
  47. int main(void)
  48. {
  49. sei(); //Interrupt wird freigegeben
  50. DDRB = 0xFF; //Alle Ausgänge
  51. TIMSK = 0x01; //Overflow tritt ein
  52. TCCR0 = 0x02; //Prescaler wird auf 8 festgelegt
  53. PORTB = 0xFF; //alle Ausgänge auf High
  54.  
  55. while (1)
  56. {
  57. }
  58. }
  59.  
  60.  
  61.  
  62.  
  63. //Taktfrequenz = 1MHz
  64. //1Mhz/8 = 125000 Hz = (Kehrwert 8/1Mhz =) 8µs pro Schritt (256 * 8µs = 2,048ms)
  65.  
  66.  
  67. //Timer auf 1,5ms
  68. //1,5ms/8µs = 187,5 Schritte
  69. //TCNT0 = 255 - 188 = 67 => 0x43(hexa)
  70.  
  71. //Timer auf 0,5ms
  72. //0,5ms/8µs = 62,5 Schritte
  73. //TCNT0 = 255 - 63 = 192 => 0xC0(hexa)
  74.  
  75. //Timer auf 2ms
  76. //2ms/8µs = 250 Schritte
  77. //TCNT0 = 255 - 250 = 5 => 0x05(hexa)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement