servo2.h


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_ */