1 | 1. #include <delays.h>
|
2 | 2. #include <p18f2431.h>
|
3 | 3. #include <fuse_p18f2431.h>
|
4 | 4. #include <init.h>
|
5 | 5. #include <timers.h>
|
6 | 6.
|
7 | 7. #pragma config OSC = HSPLL //enable hspll mode
|
8 | 8. #pragma config FCMEN = OFF
|
9 | 9. #pragma config IESO = OFF //internal switch over disabled
|
10 | 10. #pragma config PWRTEN = OFF
|
11 | 11. #pragma config BOREN = OFF
|
12 | 12. #pragma config WDTEN = OFF
|
13 | 13. #pragma config WINEN = OFF
|
14 | 14. #pragma config MCLRE = ON
|
15 | 15. #pragma config LVP = OFF
|
16 | 16. #pragma config DEBUG = ON
|
17 | 17. #pragma config PWMPIN = OFF
|
18 | 18. #pragma config HPOL = HIGH
|
19 | 19. #pragma config LPOL = HIGH
|
20 | 20.
|
21 | 21.
|
22 | 22. const unsigned char pos[6] = {0b00100100, 0b00100001, 0b00001001, 0b00011000, 0b00010010, 0b00000110};
|
23 | 23. const unsigned char overdrive[3] = {0b11000011, 0b11110000, 0b00111100};
|
24 | 24. volatile unsigned char InteruptDelay = 0;
|
25 | 25. volatile unsigned char POS = 0;
|
26 | 26. volatile unsigned char Channel = 0;
|
27 | 27.
|
28 | 28. void Manuell(unsigned char *DelayLoop);
|
29 | 29. void low_isr( void );
|
30 | 30. void high_isr( void );
|
31 | 31. void interrupt(void);
|
32 | 32. void statusLED(void);
|
33 | 33. void pwmConfig2(void);
|
34 | 34.
|
35 | 35. #pragma code high_vector=0x08
|
36 | 36. void interrupt_at_high_vector( void )
|
37 | 37. {
|
38 | 38. _asm GOTO high_isr _endasm
|
39 | 39. }
|
40 | 40. #pragma code
|
41 | 41. //
|
42 | 42. #pragma interrupt high_isr
|
43 | 43. void high_isr(void)
|
44 | 44. {
|
45 | 45. if( PIR3bits.PTIF == 1){
|
46 | 46. PIR3bits.PTIF = 0;
|
47 | 47. }
|
48 | 48.
|
49 | 49. if( INTCONbits.TMR0IF == 1){
|
50 | 50. WriteTimer0(63536);
|
51 | 51. INTCONbits.TMR0IF = 0;
|
52 | 52. }
|
53 | 53. }
|
54 | 54.
|
55 | 55. void pwmConfig2(){
|
56 | 56. unsigned char dutyL, dutyH;
|
57 | 57. dutyL = 0xFF;
|
58 | 58. dutyH = 0x7F;
|
59 | 59.
|
60 | 60. PTCON0 = 0x00; //<7:4> PWM Time BaseOutput Postscale Select Bits => 1:1
|
61 | 61. //<3:2> PWM Time Base Input Clock Prescale Select Bits => 1:1
|
62 | 62. //<1:0> PWM Time Base Mode Select => Free Running
|
63 | 63. PTCON1bits.PTEN = 1; //PWM Time Base Timer Enable
|
64 | 64. PTCON1bits.PTDIR = 0; //PWM Time Base Count Direction => Up
|
65 | 65. PWMCON0 = 0x50; //<6:4> PWM Module Enable => All channels enable
|
66 | 66. //<3:0> PWM Output Pair Mode => Complementary
|
67 | 67. PWMCON1 = 0x01; //<7:4> PWM Special Event Trigger Output Scale Select => 1:1
|
68 | 68. //<3> Special Event Trigger Time Base Direction => Counting Upwards
|
69 | 69. //<1> PWM Update disable Bit => enable
|
70 | 70. //<0> PWM Output Synchronization => OVDCON register Override is asynchronous
|
71 | 71. PTPERH = 0x03; //PWM Frequenzy 9,8kHz @ 40MHz 12Bit resolution
|
72 | 72. PTPERL = 0xFF;
|
73 | 73.
|
74 | 74. PDC0H = dutyH; //Set duty cycle
|
75 | 75. PDC0L = dutyL;
|
76 | 76. PDC1H = dutyH;
|
77 | 77. PDC1L = dutyL;
|
78 | 78. PDC2H = dutyH;
|
79 | 79. PDC2L = dutyL;
|
80 | 80.
|
81 | 81. OVDCOND = 0xFF; //PWM Output Override => Controlled by Duty Cycle and PWM Time Base
|
82 | 82. FLTCONFIG = 0x80; //Disable Fault Condition
|
83 | 83. }
|
84 | 84. void interrupt(void)
|
85 | 85. {
|
86 | 86. INTCONbits.GIE = 1; //enables all global interrupts
|
87 | 87. INTCONbits.PEIE = 1; //enables all global interrupts
|
88 | 88. RCONbits.IPEN = 1;
|
89 | 89.
|
90 | 90. OpenTimer0( T0_16BIT &
|
91 | 91. T0_SOURCE_INT &
|
92 | 92. T0_PS_1_1 &
|
93 | 93. TIMER_INT_ON );
|
94 | 94. WriteTimer0(63536);
|
95 | 95. INTCONbits.TMR0IE = 1;
|
96 | 96. INTCONbits.TMR0IF = 0;
|
97 | 97. INTCON2bits.TMR0IP = 1;
|
98 | 98. }
|
99 | 99.
|
100 | 100. void statusLED(void)
|
101 | 101. {
|
102 | 102. TRISC = 0x02;
|
103 | 103. LATCbits.LATC0 = 1;
|
104 | 104. PORTB = 0x00;
|
105 | 105. TRISB = 0x00;
|
106 | 106. }
|
107 | 107.
|
108 | 108.
|
109 | 109. void main(void)
|
110 | 110. {
|
111 | 111. statusLED();
|
112 | 112. pwmConfig2();
|
113 | 113. interrupt();
|
114 | 114.
|
115 | 115.
|
116 | 116.
|
117 | 117. while(1)
|
118 | 118. {
|
119 | 119.
|
120 | 120. }
|
121 | 121. }
|