1 |
|
2 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
3 |
|
4 | // Demoprogramm für den ClockClock Slave
|
5 |
|
6 | // µC :ATmega8
|
7 |
|
8 | // CPU Takt : 8MHz
|
9 |
|
10 | // Funktionsbeschreibung:
|
11 |
|
12 | //------------------------------
|
13 |
|
14 | // Version: V0.1
|
15 | // Datum: 05.08.12
|
16 |
|
17 |
|
18 |
|
19 | //------------------------------
|
20 |
|
21 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
22 |
|
23 | #include <avr/io.h>
|
24 | #include <avr/interrupt.h>
|
25 | #include "uart.h" //Enthällt uart funktionen (Achtung uart.c muss in makefile eingetragen werden, wenn dies nicht von der ide gemacht wird)
|
26 | #include <stdlib.h> // enthällt die Umwandlung von int zu char (itoa)
|
27 | #include <util/delay.h> // Enthällt delay funktionen
|
28 | #include <avr/wdt.h> // Enthält Watchdog Funktionen
|
29 |
|
30 | // Definitionen
|
31 |
|
32 | #define TIMER1_preload 53036
|
33 |
|
34 | #ifndef F_CPU
|
35 | #define F_CPU 8000000UL // CPU Takt in Hz
|
36 | #endif
|
37 | #define UART_BAUD_RATE 9600
|
38 |
|
39 |
|
40 |
|
41 |
|
42 | //Deklaration der Variablen
|
43 |
|
44 | int test_text = 122;
|
45 |
|
46 | int time_counter = 0; // Enhällt die Bits zur Intervall Erzeugung
|
47 | // 1Bit = 100ms
|
48 |
|
49 | //Deklaration der Funktionsprototypen
|
50 |
|
51 | void send_int_uart(int value); // Deklaration für UART INt SEND Unterfunktion
|
52 |
|
53 |
|
54 |
|
55 | //Interrupts
|
56 |
|
57 |
|
58 | // Aktion bei Timer 1 Overflow (alle 100ms)
|
59 | ISR (TIMER1_OVF_vect)
|
60 | {
|
61 |
|
62 | PORTD ^= (1 << PD5 ); // Test Led 1 toggeln
|
63 |
|
64 |
|
65 | TCNT1 = 53036; // TImer1 vorladen damit er nach 100ms überläuft
|
66 | }
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | // Hauptschleife
|
73 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
74 | int main (void) // Start Hauptschleife
|
75 | {
|
76 |
|
77 |
|
78 |
|
79 | while(1) // Start Dauerschleife
|
80 | {
|
81 | // Eingänge definieren
|
82 |
|
83 |
|
84 |
|
85 | // Ausgänge definieren
|
86 | DDRD |=(1<< PD1); //UART Tx
|
87 | DDRD |=(1<< PD5); //Test Led1
|
88 |
|
89 | // UART initialisieren
|
90 |
|
91 | uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) );
|
92 |
|
93 |
|
94 | // Startkonfig Timer 1
|
95 |
|
96 | TCCR1B |= (1<<CS10); // Prescaler /64 = Overflow alle 100ms und Timer starten
|
97 | TCCR1B |= (1<<CS11); //
|
98 |
|
99 | TIMSK |= (1<<TOIE1); // Overlfow ISR erlauben
|
100 |
|
101 |
|
102 | TCNT1 = 53036; // TImer1 vorladen damit er nach 100ms überläuft
|
103 |
|
104 | // Global Interrupts aktivieren
|
105 | sei();
|
106 |
|
107 |
|
108 |
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | /*
|
114 | uart_puts("Test");
|
115 | uart_puts("\n\r");
|
116 | send_int_uart(test_text);
|
117 | send_int_uart(test_text);
|
118 | uart_puts("\n\r");
|
119 | */
|
120 |
|
121 |
|
122 |
|
123 |
|
124 |
|
125 |
|
126 |
|
127 |
|
128 |
|
129 | }//Ende Dauerschleife
|
130 | }//Ende Hauptschleife
|
131 |
|
132 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
133 |
|
134 | //Unterfunktion Integerwert über uart ausgeben
|
135 | void send_int_uart(int value)
|
136 | {
|
137 | char buffer [33];
|
138 | itoa (value,buffer,10);
|
139 | uart_puts(buffer);
|
140 | }
|