1 | #include <avr/io.h>
|
2 | #include <avr/iom644p.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <math.h>
|
5 | #include <stdlib.h>
|
6 | #include <avr/pgmspace.h>
|
7 | #include <avr/wdt.h>
|
8 | #include <avr/alloca.h>
|
9 | #include <avr/inttypes.h>
|
10 | #include <util/delay.h>
|
11 | #include <avr/eeprom.h>
|
12 | #include <avr/cpufunc.h>
|
13 | #include <avr/common.h>
|
14 | #include <avr/lcd.h>
|
15 |
|
16 | #include <avr/twislave.h>
|
17 |
|
18 | #ifndef F_CPU
|
19 | #define F_CPU 16000000UL
|
20 | #endif
|
21 |
|
22 | // Slave-Adresse
|
23 | #define SLAVE_ADRESSE 0x50
|
24 |
|
25 | // Macros
|
26 | #define uniq(LOW,HEIGHT) ((HEIGHT << 8)|LOW) // 2x 8Bit --> 16Bit
|
27 | #define LOW_BYTE(x) (x & 0xff) // 16Bit --> 8Bit
|
28 | #define HIGH_BYTE(x) ((x >> 8) & 0xff) // 16Bit --> 8Bit
|
29 |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | #define sbi(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT))) // set Bit
|
35 | #define cbi(ADDRESS,BIT) ((ADDRESS) &= ~(1<<(BIT))) // clear Bit
|
36 | #define toggle(ADDRESS,BIT) ((ADDRESS) ^= (1<<BIT)) // Bit umschalten
|
37 |
|
38 | #define bis(ADDRESS,BIT) (ADDRESS & (1<<BIT)) // bit is set?
|
39 | #define bic(ADDRESS,BIT) (!(ADDRESS & (1<<BIT))) // bit is clear?
|
40 |
|
41 |
|
42 | //Zeit
|
43 |
|
44 | volatile uint32_t millisekunden;
|
45 | volatile uint32_t millisekunden_debug;
|
46 |
|
47 |
|
48 | int init_I2C()
|
49 | {
|
50 | cli();
|
51 | //### PORTS
|
52 |
|
53 | //### TWI
|
54 | init_twi_slave(SLAVE_ADRESSE); //TWI als Slave mit Adresse slaveadr starten
|
55 |
|
56 | sei();
|
57 | return 0;
|
58 | }
|
59 |
|
60 |
|
61 | int init_timer()
|
62 | {
|
63 | TCNT2 = 0; //Timer auf 0 zurücksetzen
|
64 | TCCR2A |=(1<<WGM21); //1)Timer 2 mit CTC Modus aktivieren
|
65 | TCCR2B |= (1<<CS00) | (0<<CS01) | (1<<CS02); //Prescaler 128
|
66 | //TCCR2B |= (1<<CS00) | (0<<CS01) | (0<<CS02); //Prescaler 1
|
67 | TIMSK2|=(1<<OCIE2A); //3)Compare Interrupt aktivieren
|
68 | OCR2A=124; //Compare Wert 124
|
69 |
|
70 | // I2C Interface einschalten
|
71 |
|
72 | Initialisierung();
|
73 |
|
74 | // Interrupts einschalten
|
75 |
|
76 | sei();
|
77 |
|
78 | return 0;
|
79 |
|
80 | }
|
81 |
|
82 | int init_adc()
|
83 | {
|
84 | ADCSRA |= (1 <<ADPS2) | (1 <<ADPS1) | (1 <<ADPS0); // Setze ADC Prescaler auf 128 - 125KHz Abtastrate @ 16MHz
|
85 |
|
86 | ADMUX |= (1 <<REFS0); // Setze ADC Verweis auf AVCC
|
87 | ADMUX |= (1 <<ADLAR); // Links anpassen ADC Ergebnis leicht 8-Bit-Lesung ermöglichen
|
88 |
|
89 | // Keine MUX Werte erforderlich geändert werden, um ADC0 nutzen
|
90 |
|
91 | ADCSRA |= (1 <<ADATE); // Setze ADC Freilauf
|
92 | ADCSRA |= (1 <<ADEN); // Enable ADC
|
93 |
|
94 | ADCSRA |= (1 <<ADIE); // Enable ADC Interrupt
|
95 | sei (); // aktiviere Global Interrupts //wird schon oben gemacht
|
96 |
|
97 | ADCSRA |= (1 <<ADSC); // Start A2D Konvertierungen
|
98 |
|
99 | return 0;
|
100 | }
|
101 |
|
102 |
|
103 | int main()
|
104 | {
|
105 | wdt_disable();
|
106 | init_timer();
|
107 | init_adc();
|
108 | init_I2C();
|
109 |
|
110 | while(1)
|
111 | {
|
112 |
|
113 | }
|
114 | }
|
115 |
|
116 |
|
117 | ISR (TIMER2_COMPA_vect) //5)Führe diese ISR aus wenn TCNT2==OCR2
|
118 | {
|
119 | millisekunden++;
|
120 | millisekunden_debug=ceil(millisekunden/1000);
|
121 | DDRA = millisekunden_debug;
|
122 | PORTA = millisekunden_debug;
|
123 |
|
124 |
|
125 | //TCNT2 = 0; //Timer2 auf 0 setzen, wichtig!!!!
|
126 | /*if(millisekunden==1000)
|
127 | {
|
128 | //DDRC = sekunde;
|
129 | //PORTC = sekunde;
|
130 |
|
131 | }*/
|
132 | }
|
133 |
|
134 |
|
135 |
|
136 | ISR (ADC_vect)
|
137 | {
|
138 | PORTB= ADCH;
|
139 | DDRB = ~ADCH;
|
140 | if (ADCH < 21 && ADCH >= 0)
|
141 | {
|
142 |
|
143 | }
|
144 | if (ADCH >=21 && ADCH <42)
|
145 | {
|
146 |
|
147 | }
|
148 | if (ADCH >=42 && ADCH <63)
|
149 | {
|
150 |
|
151 | }
|
152 | if (ADCH >=63 && ADCH <84)
|
153 | {
|
154 |
|
155 | }
|
156 | if (ADCH >=84 && ADCH <105)
|
157 | {
|
158 |
|
159 | }
|
160 | if (ADCH >=105 && ADCH <126)
|
161 | {
|
162 |
|
163 | }
|
164 | if (ADCH >=126 && ADCH <147)
|
165 | {
|
166 |
|
167 | }
|
168 | if (ADCH >=147 && ADCH <168)
|
169 | {
|
170 |
|
171 | }
|
172 | if (ADCH >=168 && ADCH <189)
|
173 | {
|
174 |
|
175 | }
|
176 | if (ADCH >=189 && ADCH <210)
|
177 | {
|
178 |
|
179 | }
|
180 | if (ADCH >=210 && ADCH <231)
|
181 | {
|
182 |
|
183 | }
|
184 | if (ADCH >=231 && ADCH <=255)
|
185 | {
|
186 |
|
187 | }
|
188 | }
|