1 | #define F_CPU 8000000L //Taktfrequenz in Hz
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <avr/wdt.h>
|
5 |
|
6 | //Definitionen
|
7 | // Bezeichnung µC-Pin Funktion
|
8 | // Schlittenmotor
|
9 | #define Motor1_Speed PB1 //Output
|
10 | #define Motor1_Richtung PC0 //Output
|
11 | #define Achse_End PD2 //Input
|
12 | #define Achse_Home PD3 //Input
|
13 | #define Motor1_Start PD4 //Input
|
14 | #define Motor1_EN PD5 //Output
|
15 |
|
16 | // Wendelmotor
|
17 | #define Motor2_Speed PB2 //Output
|
18 | #define Motor2_Start PB3 //Input
|
19 | #define Motor2_EN PB4 //Output
|
20 |
|
21 | #define RTS PD6 //Input
|
22 | #define CTS PD7 //Output
|
23 |
|
24 | //sonstige Definitionen und Einstellungen
|
25 | #define BAUDRATE 9600L //Baudrate einstellen
|
26 |
|
27 | volatile uint8_t TIMERLADEWERT0 = 248; //Frequenzvoreinstellung für ca. 2kHz
|
28 | volatile uint16_t TIMERLADEWERT1 = 65528; //Frequenzvoreinstellung für ca. 2kHz
|
29 | volatile uint16_t Motor1_Count = 0;
|
30 | volatile uint16_t rounds_Motor1 = 400;
|
31 | volatile uint16_t Motor2_Count = 0;
|
32 | volatile uint16_t rounds_Motor2 = 400;
|
33 |
|
34 | int main (void) {
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | //Watchdog aus
|
40 | wdt_disable();
|
41 |
|
42 | //Ausgänge definieren
|
43 | DDRB |= ((1 << Motor1_Speed) | (1 << Motor2_Speed) | (1 << Motor2_EN));
|
44 | DDRC |= (1 << Motor1_Richtung);
|
45 | DDRD |= ((1 << Motor1_EN)|(1 << CTS));
|
46 |
|
47 | //Zähler konfigurieren für Motor Vorschub
|
48 | TCCR0B |= (1 << CS02); //Prescaler auf 256
|
49 | TCNT0 = TIMERLADEWERT0; //Wert vorladen
|
50 | TIMSK0 |= (1 << TOIE0); //Overflow_ISR Zähler 0 aktivieren
|
51 |
|
52 | //Zähler konfigurieren für Motor Drehen
|
53 | TCCR1B |= (1 << CS12); //Prescaler auf 256
|
54 | TCNT1 = TIMERLADEWERT1; //Wert vorladen
|
55 | TIMSK1 |= (1 << TOIE1); //Overflow_ISR Zähler 1 aktivieren
|
56 |
|
57 | //interrupts an
|
58 | sei();
|
59 |
|
60 |
|
61 | while(1) {
|
62 |
|
63 | }
|
64 | }
|
65 |
|
66 | ISR(TIMER0_OVF_vect){
|
67 | // if(Motor1_Count < rounds_Motor1){
|
68 | PORTB ^= (1 << Motor1_Speed);
|
69 | TCNT0 = TIMERLADEWERT0; //Wert vorladen
|
70 | Motor1_Count++;
|
71 | /* }
|
72 | else{
|
73 |
|
74 | PORTB &= ~(1 << Motor1_EN);
|
75 | Motor1_Count = 0;
|
76 | }*/
|
77 | }
|
78 | ISR(TIMER1_OVF_vect){
|
79 | if(Motor2_Count < rounds_Motor2){
|
80 | PORTB ^= (1 << Motor2_Speed);
|
81 | TCNT1 = TIMERLADEWERT1; //Wert vorladen
|
82 | Motor2_Count++;
|
83 | }
|
84 | else{
|
85 |
|
86 | PORTB &= ~(1 << Motor2_EN);
|
87 | Motor2_Count = 0;
|
88 | }
|
89 | }
|