1 | /*
|
2 | * servo2.h
|
3 | *
|
4 | * Der Code ist ausgelegt für einen ATMega8 mit 8Mhz !
|
5 | * Der PreScaler wird auf 64 eingestellt
|
6 | *
|
7 | * Created on: 08.09.2010
|
8 | * Author: bernd
|
9 | */
|
10 |
|
11 | #ifndef SERVO2_H_
|
12 | #define SERVO2_H_
|
13 |
|
14 | #include <avr/io.h>
|
15 | #include <stdlib.h>
|
16 | #include <avr/interrupt.h>
|
17 | #include <util/delay.h>
|
18 |
|
19 | #include "general.h"
|
20 | //---------------------------------------------------------------------------------------------
|
21 | // defines
|
22 | //---------------------------------------------------------------------------------------------
|
23 |
|
24 | #define SERVO_0to1_DDR DDRC
|
25 | #define SERVO_0to1_PORT PORTC
|
26 |
|
27 | #define SERVO_2to7_DDR DDRD
|
28 | #define SERVO_2to7_PORT PORTD
|
29 |
|
30 | #ifndef POLLIN
|
31 | #define MAX_SERVOS 8
|
32 | #else
|
33 | #define MAX_SERVOS 8
|
34 | #endif
|
35 |
|
36 | #define MAX_DEGREE 180
|
37 | #define MIN_DEGREE 0
|
38 | #define MAX_SERVOPOS 255
|
39 | #define MIN_SERVOPOS 1
|
40 |
|
41 | #define MAX_TIMER1 65536
|
42 | #define SERVO_CALIBRATION 500
|
43 | #define TIMER1_MS 8000// - SERVO_CALIBRATION // 8Mhz/sek = 8000/ms
|
44 | #define TICKS_PER_POS TIMER1_MS / MAX_SERVOPOS
|
45 |
|
46 | #define LEFT_POS -90
|
47 | #define RIGHT_POS 90
|
48 | #define CENTER_POS 0
|
49 | #define LEFT45_POS -45
|
50 | #define RIGHT45_POS 45
|
51 |
|
52 |
|
53 | //---------------------------------------------------------------------------------------------
|
54 | // Typedefs
|
55 | //---------------------------------------------------------------------------------------------
|
56 |
|
57 | //---------------------------------------------------------------------------------------------
|
58 | // Prototypes
|
59 | //---------------------------------------------------------------------------------------------
|
60 |
|
61 | /**
|
62 | * globale Initialisierungsroutine für die Servos
|
63 | *
|
64 | */
|
65 | void init_servo();
|
66 | /**
|
67 | * Jeder Servo kann zwischen 0-255 Schritten positioniert werden
|
68 | * Wobei 0 die ganze linke Position ist und 255 ganz rechts, 127 entspricht der Mitte
|
69 | *
|
70 | *
|
71 | */
|
72 | void setServoPos(byte servo, byte position);
|
73 |
|
74 | /**
|
75 | * Diese Methode positioniert den Servo auf grund einer Winkelangabe
|
76 | * 0 = Mitte
|
77 | * -90 = links
|
78 | * +90 = rechts
|
79 | */
|
80 | void setServoAngle(byte servo, byte degree );
|
81 |
|
82 | /**
|
83 | * deaktiviert alle Servoports
|
84 | */
|
85 | void deaktiateServoPorts(byte all, byte servo);
|
86 |
|
87 | /**
|
88 | * aktiviert alle Servoports
|
89 | */
|
90 | void aktiateServoPorts(byte all, byte servo);
|
91 | //---------------------------------------------------------------------------------------------
|
92 | // Variables/Constants/etc
|
93 | //---------------------------------------------------------------------------------------------
|
94 | volatile word servo_pos[8];
|
95 | byte static servo_counter;
|
96 | byte servo_pin[8];
|
97 | byte counter ;
|
98 |
|
99 |
|
100 | byte TCNT0_DELAY;
|
101 | #endif /* SERVO2_H_ */
|