1 | /*commands
|
2 | * 1) cc<0x01>e - TURN ON relay 1
|
3 | * 2) cc<0x02>e - TURN ON relay 2
|
4 | * 3) cc<0x03>e - TURN ON relay 3
|
5 | * 4) cc<0x04>e - TURN ON relay 4
|
6 | * 5) cc<0x05>e - TURN OFF relay 1
|
7 | * 6) cc<0x06>e - TURN OFF relay 2
|
8 | * 7) cc<0x07>e - TURN OFF relay 3
|
9 | * 8) cc<0x08>e - TURN OFF relay 4
|
10 | * 9) cc<0x09>e - READ AIN2-2
|
11 | * 10) cc<0x1A>e - READ AIN2-1
|
12 | * 11) cc<0x1B>e - READ AIN1-3
|
13 | * 12) cc<0x1V>e - READ AIN1-2
|
14 | * 13) cc<0x1D>e - READ DIGITAL INPUTS
|
15 | * erste Stelle gibt Adresse der Platine an*/
|
16 |
|
17 | #include <avr/eeprom.h>
|
18 | #include <ctype.h>
|
19 | #include <stdlib.h>
|
20 | #include <avr/pgmspace.h>
|
21 | #include "avr/io.h"
|
22 | #include<string.h>
|
23 | #include <avr/interrupt.h>
|
24 | #include <util/delay.h>
|
25 |
|
26 | //target//
|
27 | const char target='c';
|
28 |
|
29 | volatile char var;
|
30 | volatile char flag_address=0;
|
31 | const unsigned char address=0x05;
|
32 | volatile char buffer[8];
|
33 | volatile unsigned char test;
|
34 | volatile char string_analog[10]="0000000000";
|
35 | unsigned char i=0;
|
36 | #define command_on flag_register = 0xFF
|
37 | #define command_off flag_register = 0x00
|
38 | int digital(void);
|
39 | int action (void);
|
40 | void Print(char Text[80]);
|
41 | void PrintLine();
|
42 | void PORT_Init();
|
43 | void USART_Init( unsigned int ubrr);
|
44 | unsigned char UART_Receive();
|
45 | void UART_Transmit(unsigned char Data);
|
46 | void PrintLn(char Text[80]);
|
47 | volatile unsigned char u=0;
|
48 | volatile unsigned char abba;
|
49 | volatile char result[10]="0000000000";
|
50 | volatile long rezultat=0;
|
51 | unsigned char i;
|
52 | volatile char p,d;
|
53 | volatile char v[10];
|
54 |
|
55 | unsigned char flag_register=0;
|
56 |
|
57 | #define __AVR_ATmega16__ 1
|
58 |
|
59 | #define FOSC 8000000 /* in Hz */
|
60 | #define BAUD 9600
|
61 | #define MYUBRR ((FOSC/16/BAUD)-1)
|
62 |
|
63 | char Txt[80];
|
64 | unsigned char Action = 0;
|
65 | volatile uint16_t adcval;
|
66 | volatile struct status {
|
67 |
|
68 | unsigned command:1;
|
69 | unsigned end:1;
|
70 | unsigned addres:1;
|
71 | }status_bits;
|
72 |
|
73 | //
|
74 | char *masiv[]={
|
75 |
|
76 | "C<0x01>E",
|
77 | "C<0x02>E",
|
78 | "C<0x03>E",
|
79 | "C<0x04>E",
|
80 | "C<0x05>E",
|
81 | "C<0x06>E",
|
82 | "C<0x07>E",
|
83 | "C<0x08>E",
|
84 | "C<0x09>E",
|
85 | "C<0x1A>E",
|
86 | "C<0x1B>E",
|
87 | "C<0x1V>E",
|
88 | "C<0x1D>E"
|
89 | };
|
90 |
|
91 | /* Print new line to the Hyper Terminal */
|
92 | void PrintLine()
|
93 | {
|
94 | UART_Transmit(10);
|
95 | UART_Transmit(13);
|
96 | }
|
97 |
|
98 | /* PORT_Init */
|
99 | void PORT_Init()
|
100 | {
|
101 | PORTA = 0b00000000;
|
102 | DDRA = 0b00001111;
|
103 |
|
104 | PORTB = 0b00000000;
|
105 | DDRB = 0b11111000;
|
106 |
|
107 | PORTC = 0b00000000;
|
108 | DDRC = 0b11111111;
|
109 |
|
110 | PORTD = 0b00000000;
|
111 | DDRD = 0b11100010;
|
112 | }
|
113 |
|
114 | /* USART_Init */
|
115 | void USART_Init( unsigned int ubrr)
|
116 | {
|
117 | /* Set baud rate */
|
118 | UCSRA = 0x00;
|
119 | /* Enable receiver and transmitter */
|
120 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
|
121 | /* Set frame format: 8data, 1stop bit */
|
122 | UCSRC = 0b10000110;
|
123 |
|
124 | UBRRH = (unsigned char)(ubrr>>8);
|
125 | UBRRL = (unsigned char)ubrr;
|
126 | }
|
127 |
|
128 | /* Read ANALOG inputs */
|
129 | void analog(unsigned char channel) {
|
130 | //-- funktioniert--
|
131 | }
|
132 |
|
133 | /* Read DIGITAL inputs */
|
134 | int digital(void) {
|
135 | //-- funktioniert--
|
136 | }
|
137 |
|
138 | /* action finction */
|
139 | int action ()
|
140 | {
|
141 | char i=0;
|
142 | result[0]=0;
|
143 |
|
144 | for(i=0;i<10;i++) {result[i]=result[i+1];}
|
145 | result[8]='\0';
|
146 |
|
147 | for(unsigned char zar=0;zar<13;zar++) {
|
148 |
|
149 | if(!(strcasecmp(result,masiv[zar])))
|
150 | {
|
151 | switch(zar) {
|
152 | case 0:PORTA|=0b00001000;break;
|
153 | case 1:PORTA|=0b00000100;break;
|
154 | case 2:PORTA|=0b00000010;break;
|
155 | case 3:PORTA|=0b00000001;break;
|
156 | case 4:PORTA&=0b11110111;break;
|
157 | case 5:PORTA&=0b11111011;break;
|
158 | case 6:PORTA&=0b11111101;break;
|
159 | case 7:PORTA&=0b11111110;break;
|
160 | case 8:analog(4);break;
|
161 | case 9:analog(5);break;
|
162 | case 10:analog(6);break;
|
163 | case 11:analog(7);break;
|
164 | case 12:digital();break;
|
165 | }
|
166 | }
|
167 | }
|
168 | for(unsigned char per=0;per<10;per++)
|
169 | {result[per]='\0';}
|
170 | SREG|=0b10000000;
|
171 | test=0;
|
172 | return 0;
|
173 | }
|
174 |
|
175 | /* UART Recieve Interrupt */
|
176 | ISR(USART_RXC_vect)
|
177 | {
|
178 | result[u++]=UDR;
|
179 |
|
180 | if(u==9) {
|
181 |
|
182 | result[9]='\0';
|
183 | u=0;
|
184 | SREG&=0b01111111;
|
185 | var = eeprom_read_byte ((const uint8_t *)(0x00));
|
186 | if(result[0]==var)
|
187 | {
|
188 | PrintLine();
|
189 | test=1;
|
190 | UCSRA&=0b01111111;
|
191 | return;
|
192 | }
|
193 |
|
194 | SREG|=0b10000000;
|
195 | }
|
196 | UCSRA&=0b01111111;
|
197 | return 0;
|
198 | }
|
199 |
|
200 | /* UART Receive */
|
201 | unsigned char UART_Receive()
|
202 | {
|
203 | if (UCSRA & 0b10000000)
|
204 | return UDR;
|
205 | else
|
206 | return 0;
|
207 | }
|
208 |
|
209 | /* UART Transmit */
|
210 | void UART_Transmit(unsigned char Data)
|
211 | {
|
212 |
|
213 | /* Wait for empty transmit buffer */
|
214 |
|
215 | while ( !( UCSRA & (1<<UDRE)) ){}
|
216 | /* Put data into buffer, sends the data */
|
217 | UDR = Data;
|
218 | }
|
219 | /**************** M A I N ******************/
|
220 | int main(void)
|
221 | {
|
222 | eeprom_is_ready();
|
223 | eeprom_write_byte ((uint8_t *)(0x00), (uint8_t)(target));
|
224 | PORT_Init();
|
225 | USART_Init (MYUBRR);
|
226 | test=0;
|
227 | PrintLine();
|
228 | sei();
|
229 |
|
230 | while(1){
|
231 | if (test!=0)
|
232 | {
|
233 | action();
|
234 | test=0;
|
235 | }
|
236 | }
|
237 | return 0;
|
238 | }
|