samir82show

servo motor control (Master code)

Jan 20th, 2014
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. #include <mega32.h>
  2. #define MAXANGLE 1999
  3. #define MINANGLE 999
  4. #define MOTOR_PLUS 0x01
  5. #define MOTOR_MINUS 0x02
  6.  
  7. // SPI functions
  8. #include <spi.h>
  9. // Declare your global variables here
  10. unsigned char mode = 0;
  11. unsigned char state = 1;
  12. unsigned int OCR1Avar = 1499;
  13. interrupt [TIM0_COMP] void timer0_comp_isr(void)
  14. {
  15. // Place your code here
  16. if(mode == 1)
  17. {
  18. switch(state)
  19. {
  20. case 1: //forward Axial movement
  21. if(OCR1A++ < MAXANGLE);
  22. else
  23. state = 2;
  24. break;
  25. case 2: //forward Vertical movement
  26. if(OCR1B++ < MAXANGLE);
  27. else
  28. state = 3;
  29. break;
  30. case 3: // grabbing object
  31. if(OCR1Avar <= MAXANGLE)
  32. {
  33. spi(MOTOR_PLUS);
  34. OCR1Avar++;
  35. }
  36. else
  37. state = 4;
  38. break;
  39. case 4: //reverse Vertical movement
  40. if(OCR1B-- > MINANGLE);
  41. else
  42. state = 5;
  43. break;
  44. case 5: //reverse Axial movement
  45. if(OCR1A-- > MINANGLE);
  46. else
  47. state = 6;
  48. break;
  49. case 6: //forward Vertical movement
  50. if(OCR1B++ < MAXANGLE);
  51. else
  52. state = 7;
  53. break;
  54. case 7: //release object
  55. if(OCR1Avar >= MINANGLE)
  56. {
  57. spi(MOTOR_MINUS);
  58. OCR1Avar--;
  59. }
  60. else
  61. state = 8;
  62. break;
  63. case 8: //reverse Vertical movement
  64. if(OCR1B-- > MINANGLE);
  65. else
  66. state = 1;
  67. break;
  68. }
  69. }
  70. }
  71.  
  72.  
  73. void main(void)
  74. {
  75. unsigned char Press_Conf = 0;
  76. // Declare your local variables here
  77.  
  78. // Input/Output Ports initialization
  79. // Port A initialization
  80. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
  81. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  82. PORTA=0x00;
  83. DDRA=0xFF;
  84.  
  85. // Port B initialization
  86. // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
  87. // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
  88. PORTB=0x00;
  89. DDRB=0xB0;
  90.  
  91. // Port C initialization
  92. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
  93. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  94. PORTC = 0xFE;
  95. DDRC = 0x03;
  96.  
  97. // Port D initialization
  98. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
  99. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
  100. PORTD=0x00;
  101. DDRD=0x30;
  102.  
  103. // Timer/Counter 0 initialization
  104. // Clock source: System Clock
  105. // Clock value: Timer 0 Stopped
  106. // Mode: Normal top=0xFF
  107. // OC0 output: Disconnected
  108. TCCR0=0x3D;
  109. TCNT0=0x00;
  110. OCR0=0x01;
  111.  
  112. // Timer/Counter 1 initialization
  113. // Clock source: System Clock
  114. // Clock value: Timer1 Stopped
  115. // Mode: Normal top=0xFFFF
  116. // OC1A output: Discon.
  117. // OC1B output: Discon.
  118. // Noise Canceler: Off
  119. // Input Capture on Falling Edge
  120. // Timer1 Overflow Interrupt: Off
  121. // Input Capture Interrupt: Off
  122. // Compare A Match Interrupt: Off
  123. // Compare B Match Interrupt: Off
  124. TCCR1A=0xA2;
  125. TCCR1B=0x19;
  126. TCNT1H=0x00;
  127. TCNT1L=0x00;
  128. ICR1H=0x4E;
  129. ICR1L=0x1F;
  130. OCR1A = 1499;
  131. OCR1B = 1499;
  132.  
  133.  
  134. // Timer/Counter 2 initialization
  135. // Clock source: System Clock
  136. // Clock value: Timer2 Stopped
  137. // Mode: Normal top=0xFF
  138. // OC2 output: Disconnected
  139. ASSR=0x00;
  140. TCCR2=0x00;
  141. TCNT2=0x00;
  142. OCR2=0x00;
  143.  
  144. // External Interrupt(s) initialization
  145. // INT0: Off
  146. // INT1: Off
  147. // INT2: Off
  148. MCUCR=0x00;
  149. MCUCSR=0x00;
  150.  
  151. // Timer(s)/Counter(s) Interrupt(s) initialization
  152. TIMSK=0x02;
  153.  
  154. // USART initialization
  155. // USART disabled
  156. UCSRB=0x00;
  157.  
  158. // Analog Comparator initialization
  159. // Analog Comparator: Off
  160. // Analog Comparator Input Capture by Timer/Counter 1: Off
  161. ACSR=0x80;
  162. SFIOR=0x00;
  163.  
  164. // ADC initialization
  165. // ADC disabled
  166. ADCSRA=0x00;
  167.  
  168. // SPI initialization
  169. // SPI Type: Master
  170. // SPI Clock Rate: 250.000 kHz
  171. // SPI Clock Phase: Cycle Start
  172. // SPI Clock Polarity: Low
  173. // SPI Data Order: MSB First
  174. SPCR=0x50;
  175. SPSR=0x00;
  176.  
  177. // TWI initialization
  178. // TWI disabled
  179. TWCR=0x00;
  180. #asm("sei")
  181.  
  182. while (1)
  183. {
  184. // Place your code here
  185. if(mode == 0)
  186. {
  187. if(PINC.7 == 0)
  188. {
  189. Press_Conf++;
  190. if(Press_Conf >= 200)
  191. if(OCR1A++ < MAXANGLE)
  192. Press_Conf = 0;
  193. }
  194. else if(PINC.6 == 0)
  195. {
  196. Press_Conf++;
  197. if(Press_Conf >= 200)
  198. if(OCR1A-- > MINANGLE)
  199. Press_Conf = 0;
  200. }
  201. if(PINC.5 == 0)
  202. {
  203. Press_Conf++;
  204. if(Press_Conf >= 200)
  205. if(OCR1B++ < MAXANGLE)
  206. Press_Conf = 0;
  207. }
  208. else if(PINC.4 == 0)
  209. {
  210. Press_Conf++;
  211. if(Press_Conf >= 200)
  212. if(OCR1B-- > MINANGLE)
  213. Press_Conf = 0;
  214. }
  215. if(PINC.3 == 0)
  216. {
  217. Press_Conf++;
  218. if(Press_Conf >= 200)
  219. {
  220. spi(MOTOR_PLUS);
  221. Press_Conf = 0;
  222. }
  223. }
  224. else if(PINC.2 == 0)
  225. {
  226. Press_Conf++;
  227. if(Press_Conf >= 200)
  228. {
  229. spi(MOTOR_MINUS);
  230. Press_Conf = 0;
  231. }
  232. }
  233. }
  234. }
  235. }
Advertisement
Add Comment
Please, Sign In to add comment