Advertisement
Guest User

FahrradSchaltung-CustomCode

a guest
Dec 20th, 2014
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.87 KB | None | 0 0
  1. /*
  2.  * ======== Standard MSP430 includes ========
  3.  */
  4. #include <msp430.h>
  5.  
  6. /*
  7.  * ======== Grace related includes ========
  8.  */
  9. #include <ti/mcu/msp430/Grace.h>
  10. #include <ti/mcu/msp430/csl/CSL.h>
  11.  
  12. long int i;
  13. #define FDdelay     for(i=10000; i<0;i--){}
  14. #define RDdelay     for(i=6000; i<0;i--){}
  15.  
  16. //Gear definitions
  17. #define G1
  18. #define G2
  19. #define G3
  20. #define G4
  21. #define G5
  22. #define G6
  23. #define G7
  24. #define G8
  25. #define G9
  26. #define G10
  27. #define G11
  28. #define G12
  29.  
  30. //Gstate
  31. //smallest Gear = 1
  32. //highest Gear  = 12
  33. int volatile Gstate = 0;
  34.  
  35. // FD position definitions
  36. #define FDlarge     1050 // Largest
  37. #define FDsmall     1600 // smallest
  38. #define FDoffset    70   //enter custom value
  39. #define FDtrim      13
  40.  
  41. //FDstate
  42. // small gear = 1
  43. // large gear = 2
  44. int volatile FDstate = 0;
  45.  
  46. // RD position definitions
  47. #define RD1         2060
  48. #define RD2         1950
  49. #define RD3         1870
  50. #define RD4         1800
  51. #define RD5         1700
  52. #define RD6         1650
  53. #define RD7         1550
  54. #define RD8         1450
  55. #define RD9         1350
  56. #define RDoffset    20
  57.  
  58. // RDstate
  59. // largest = 9
  60. // smallest = 1
  61. int volatile RDstate = 0;
  62.  
  63. /*   GearCombinationsPossible
  64.  *      FD  |  RD
  65.  * G1    1  |  1
  66.  * G2    1  |  2
  67.  * G3    1  |  3
  68.  * G4    1  |  4
  69.  * G5    1  |  5
  70.  * G6    2  |  3
  71.  * G7    2  |  4
  72.  * G8    2  |  5
  73.  * G9    2  |  6
  74.  * G10   2  |  7
  75.  * G11   2  |  8
  76.  * G12   2  |  9
  77.  */
  78.  
  79. /*
  80.  *  ======== main ========
  81.  */
  82.  
  83. int main(int argc, char *argv[]) {
  84.     CSL_init();                     // Activate Grace-generated configuration
  85.  
  86.     // Enter LPM with global interrupt enabled
  87.     __bis_SR_register(LPM0_bits + GIE);
  88.  
  89.     return (0);
  90. }
  91.  
  92. void shift(void);
  93. {
  94.     if (P1IFG & BIT4) {
  95.         //downshift
  96.         //front downshift button
  97.         // clear the flag
  98.         P1IFG &= ~BIT4;
  99.  
  100.         switch (Gstate) {
  101.             case 12:
  102.             TA0CCR1 = FDlarge;
  103.             FDstate = 2;
  104.             TA1CCR2 = RD9 + 5*RDoffset;
  105.             RDdelay;
  106.             TA1CCR2 = RD9;
  107.             RDstate = 9;
  108.             Gstate = 12;
  109.             break;
  110.  
  111.             case 11:
  112.             TA0CCR1 = FDlarge;
  113.             FDstate = 2;
  114.             TA1CCR2 = RD8 + 5*RDoffset;
  115.             RDdelay;
  116.             TA1CCR2 = RD8;
  117.             RDstate = 8;
  118.             Gstate = 11;
  119.             break;
  120.  
  121.             case 10:
  122.             TA0CCR1 = FDlarge;
  123.             FDstate = 2;
  124.             TA1CCR2 = RD7 + 5*RDoffset;
  125.             RDdelay;
  126.             TA1CCR2 = RD7;
  127.             RDstate = 7;
  128.             Gstate = 10;
  129.             break;
  130.  
  131.             case 9:
  132.             TA0CCR1 = FDlarge;
  133.             FDstate = 2;
  134.             TA1CCR2 = RD6 + 5*RDoffset;
  135.             RDdelay;
  136.             TA1CCR2 = RD6;
  137.             RDstate = 6;
  138.             Gstate = 9;
  139.             break;
  140.  
  141.             case 8:
  142.             TA0CCR1 = FDlarge;
  143.             FDstate = 2;
  144.             TA1CCR2 = RD5 + 5*RDoffset;
  145.             RDdelay;
  146.             TA1CCR2 = RD5;
  147.             RDstate = 5;
  148.             Gstate = 8;
  149.             break;
  150.  
  151.             case 7:
  152.             TA0CCR1 = FDlarge;
  153.             FDstate = 2;
  154.             TA1CCR2 = RD4 + 5*RDoffset;
  155.             RDdelay;
  156.             TA1CCR2 = RD4;
  157.             RDstate = 4;
  158.             Gstate = 7;
  159.             break;
  160.  
  161.             case 6:
  162.             TA0CCR1 = FDlarge;
  163.             FDstate = 2;
  164.             TA1CCR2 = RD3 + 5*RDoffset;
  165.             RDdelay;
  166.             TA1CCR2 = RD3;
  167.             RDstate = 3;
  168.             Gstate = 6;
  169.             break;
  170.  
  171.             case 5:
  172.             TA0CCR1 = FDsmall + FDoffset + 30;
  173.             FDdelay;
  174.             TA0CCR1 = FDsmall;
  175.             FDstate = 1;
  176.             TA1CCR2 = RD5 + 5*RDoffset;
  177.             RDdelay;
  178.             TA1CCR2 = RD5;
  179.             RDstate = 5;
  180.             Gstate = 5;
  181.             break;
  182.  
  183.             case 4:
  184.             TA0CCR1 = FDsmall;
  185.             FDstate = 1;
  186.             TA1CCR2 = RD4 + 5*RDoffset;
  187.             RDdelay;
  188.             TA1CCR2 = RD4;
  189.             RDstate = 4;
  190.             Gstate = 4;
  191.             break;
  192.  
  193.             case 3:
  194.             TA0CCR1 = FDsmall;
  195.             FDstate = 1;
  196.             TA1CCR2 = RD3 + RDoffset;
  197.             RDdelay;
  198.             TA1CCR2 = RD3;
  199.             RDstate = 3;
  200.             Gstate = 3;
  201.             break;
  202.  
  203.             case 2:
  204.             TA0CCR1 = FDsmall;
  205.             FDstate = 1;
  206.             TA1CCR2 = RD2 + RDoffset;
  207.             RDdelay;
  208.             TA1CCR2 = RD2;
  209.             RDstate = 2;
  210.             Gstate = 2;
  211.             break;
  212.  
  213.             case 1:
  214.             TA1CCR2 = RD1;
  215.             RDstate = 1;
  216.             TA0CCR1 = FDsmall;
  217.             FDstate = 1;
  218.             Gstate = 1;
  219.             break;
  220.  
  221.             default:
  222.             TA1CCR2 = RD1;
  223.             RDstate = 1;
  224.             TA0CCR1 = FDsmall;
  225.             FDstate = 1;
  226.             Gstate = 1;
  227.             break;
  228.         }
  229.     }
  230. } else {
  231.     //upshifting
  232.     // rear downshift button
  233.     // clear the flag
  234.     P1IFG &= ~BIT7;
  235.  
  236.     switch (Gstate) {
  237.         case 1:
  238.         TA0CCR1 = FDsmall;
  239.         FDstate = 1;
  240.         TA1CCR2 = RD1 - 5*RDoffset;
  241.         RDdelay;
  242.         TA1CCR2 = RD1;
  243.         RDstate = 1;
  244.         Gstate = 1;
  245.         break;
  246.  
  247.         case 2:
  248.         TA0CCR1 = FDsmall;
  249.         FDstate = 1;
  250.         TA1CCR2 = RD2 - 5*RDoffset;
  251.         RDdelay;
  252.         TA1CCR2 = RD2;
  253.         RDstate = 2;
  254.         Gstate = 2;
  255.         break;
  256.  
  257.         case 3:
  258.         TA0CCR1 = FDsmall;
  259.         FDstate = 1;
  260.         TA1CCR2 = RD3 - 5*RDoffset;
  261.         RDdelay;
  262.         TA1CCR2 = RD3;
  263.         RDstate = 3;
  264.         Gstate = 3;
  265.         break;
  266.  
  267.         case 4:
  268.         TA0CCR1 = FDsmall;
  269.         FDstate = 1;
  270.         TA1CCR2 = RD4 - 5*RDoffset;
  271.         RDdelay;
  272.         TA1CCR2 = RD4;
  273.         RDstate = 4;
  274.         Gstate = 4;
  275.         break;
  276.  
  277.         case 5:
  278.         TA0CCR1 = FDsmall;
  279.         FDstate = 1;
  280.         TA1CCR2 = RD5 - 5*RDoffset;
  281.         RDdelay;
  282.         TA1CCR2 = RD5;
  283.         RDstate = 5;
  284.         Gstate = 5;
  285.         break;
  286.  
  287.         case 6:
  288.         TA0CCR1 = FDlarge - FDoffset;
  289.         FDdelay;
  290.         TA0CCR1 = FDlarge;
  291.         FDstate = 2;
  292.         TA1CCR2 = RD3 - 5*RDoffset;
  293.         RDdelay;
  294.         TA1CCR2 = RD3;
  295.         RDstate = 6;
  296.         Gstate = 6;
  297.         break;
  298.  
  299.         case 7:
  300.         TA0CCR1 = FDlarge;
  301.         FDstate = 2;
  302.         TA1CCR2 = RD4 - 5*RDoffset;
  303.         RDdelay;
  304.         TA1CCR2 = RD4;
  305.         RDstate = 4;
  306.         Gstate = 7;
  307.         break;
  308.  
  309.         case 8:
  310.         TA0CCR1 = FDlarge;
  311.         FDstate = 2;
  312.         TA1CCR2 = RD5 - 5*RDoffset;
  313.         RDdelay;
  314.         TA1CCR2 = RD5;
  315.         RDstate = 5;
  316.         Gstate = 8;
  317.         break;
  318.  
  319.         case 9:
  320.         TA0CCR1 = FDsmall;
  321.         FDstate = 1;
  322.         TA1CCR2 = RD6 - 5*RDoffset;
  323.         RDdelay;
  324.         TA1CCR2 = RD6;
  325.         RDstate = 6;
  326.         Gstate = 9;
  327.         break;
  328.  
  329.         case 10:
  330.         TA0CCR1 = FDsmall;
  331.         FDstate = 1;
  332.         TA1CCR2 = RD7 - 5*RDoffset;
  333.         RDdelay;
  334.         TA1CCR2 = RD7;
  335.         RDstate = 7;
  336.         Gstate = 10;
  337.         break;
  338.  
  339.         case 11:
  340.         TA0CCR1 = FDsmall;
  341.         FDstate = 2;
  342.         TA1CCR2 = RD8 - 5*RDoffset;
  343.         RDdelay;
  344.         TA1CCR2 = RD8;
  345.         RDstate = 8;
  346.         Gstate = 11;
  347.         break;
  348.  
  349.         case 12:
  350.         TA1CCR2 = RD9;
  351.         RDstate = 9;
  352.         TA0CCR1 = FDlarge;
  353.         FDstate = 2;
  354.         Gstate = 12;
  355.         break;
  356.  
  357.         default:
  358.         TA1CCR2 = RD9;
  359.         RDstate = 9;
  360.         TA0CCR1 = FDlarge;
  361.         FDstate = 2;
  362.         Gstate = 12;
  363.         break;
  364.  
  365.     }
  366. }
  367. return (0);
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement