bladabuska

stepper.c

Aug 29th, 2014
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. /* -----------------------------------------------------------------------------
  2.  * File:            stepper.c
  3.  * Project:         Stepper Motor Example using timer
  4.  * Author:          Leandro Schwarz
  5.  * Last modified:   29/08/2014
  6.  * -------------------------------------------------------------------------- */
  7.  
  8. // System definitions
  9. #define F_CPU   16000000UL
  10. #define MCU_8_BITS
  11.  
  12. // Header files
  13. #include "LS_defines.h"
  14. #include "LS_ATmega328.h"
  15.  
  16. // Project definitions
  17. #define STEPPER_PHASE1_DDR  DDRB
  18. #define STEPPER_PHASE1_PORT PORTB
  19. #define STEPPER_PHASE1_BIT  PB0
  20. #define STEPPER_PHASE2_DDR  DDRB
  21. #define STEPPER_PHASE2_PORT PORTB
  22. #define STEPPER_PHASE2_BIT  PB1
  23. #define STEPPER_PHASE3_DDR  DDRB
  24. #define STEPPER_PHASE3_PORT PORTB
  25. #define STEPPER_PHASE3_BIT  PB2
  26. #define STEPPER_PHASE4_DDR  DDRB
  27. #define STEPPER_PHASE4_PORT PORTB
  28. #define STEPPER_PHASE4_BIT  PB3
  29.  
  30. // Function declaration
  31. void stepperMove(void);
  32.  
  33. // Global variables
  34. volatile uint8 stepperPosition = 0;
  35.  
  36. // main function
  37. int main()
  38. {
  39.     // Port configuration
  40.     setBit(STEPPER_PHASE1_DDR, STEPPER_PHASE1_BIT);
  41.     setBit(STEPPER_PHASE2_DDR, STEPPER_PHASE2_BIT);
  42.     setBit(STEPPER_PHASE3_DDR, STEPPER_PHASE3_BIT);
  43.     setBit(STEPPER_PHASE4_DDR, STEPPER_PHASE4_BIT);
  44.  
  45.     // Timer0 configuration
  46.     timer0ClockPrescaller1024();
  47.     timer0CTCMode();
  48.     timer0OC0AOff();
  49.     timer0OC0BOff();
  50.     timer0ActivateCompareAInterrupt();
  51.     timer0SetCompareAValue(155);
  52.     sei();
  53.  
  54.     while(1){
  55.     }
  56.     return 0;
  57. }
  58.  
  59. ISR(TIMER0_COMPA_vect)
  60. {
  61.     stepperMove();
  62.     stepperPosition = (stepperPosition == 3)?0:(stepperPosition + 1);
  63.     return;
  64. }
  65.  
  66. void stepperMove(void)
  67. {
  68.     switch(stepperPosition){
  69.     case 0:
  70.         setBit(STEPPER_PHASE1_PORT, STEPPER_PHASE1_BIT);
  71.         clrBit(STEPPER_PHASE2_PORT, STEPPER_PHASE2_BIT);
  72.         clrBit(STEPPER_PHASE3_PORT, STEPPER_PHASE3_BIT);
  73.         clrBit(STEPPER_PHASE4_PORT, STEPPER_PHASE4_BIT);
  74.         break;
  75.     case 1:
  76.         clrBit(STEPPER_PHASE1_PORT, STEPPER_PHASE1_BIT);
  77.         setBit(STEPPER_PHASE2_PORT, STEPPER_PHASE2_BIT);
  78.         clrBit(STEPPER_PHASE3_PORT, STEPPER_PHASE3_BIT);
  79.         clrBit(STEPPER_PHASE4_PORT, STEPPER_PHASE4_BIT);
  80.         break;
  81.     case 2:
  82.         clrBit(STEPPER_PHASE1_PORT, STEPPER_PHASE1_BIT);
  83.         clrBit(STEPPER_PHASE2_PORT, STEPPER_PHASE2_BIT);
  84.         setBit(STEPPER_PHASE3_PORT, STEPPER_PHASE3_BIT);
  85.         clrBit(STEPPER_PHASE4_PORT, STEPPER_PHASE4_BIT);
  86.         break;
  87.     case 3:
  88.         clrBit(STEPPER_PHASE1_PORT, STEPPER_PHASE1_BIT);
  89.         clrBit(STEPPER_PHASE2_PORT, STEPPER_PHASE2_BIT);
  90.         clrBit(STEPPER_PHASE3_PORT, STEPPER_PHASE3_BIT);
  91.         setBit(STEPPER_PHASE4_PORT, STEPPER_PHASE4_BIT);
  92.         break;
  93.     default:
  94.         clrBit(STEPPER_PHASE1_PORT, STEPPER_PHASE1_BIT);
  95.         clrBit(STEPPER_PHASE2_PORT, STEPPER_PHASE2_BIT);
  96.         clrBit(STEPPER_PHASE3_PORT, STEPPER_PHASE3_BIT);
  97.         clrBit(STEPPER_PHASE4_PORT, STEPPER_PHASE4_BIT);
  98.         break;
  99.     }
  100.     return;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment