1 | #include <asf.h>
|
2 | #include "conf_usart_example.h"
|
3 | #include "status_codes.h"
|
4 |
|
5 |
|
6 | /*FUNKTIONSPROTOTYPEN*/
|
7 | void senden(uint16_t wert);
|
8 | void pause(uint16_t ms);
|
9 | void analog(uint16_t zahl);
|
10 | void ADC_init();
|
11 |
|
12 |
|
13 |
|
14 | int main(void)
|
15 | {
|
16 |
|
17 | // USART init
|
18 | static usart_rs232_options_t USART_SERIAL_OPTIONS = {
|
19 | .baudrate = USART_SERIAL_EXAMPLE_BAUDRATE,
|
20 | .charlength = USART_SERIAL_CHAR_LENGTH,
|
21 | .paritytype = USART_SERIAL_PARITY,
|
22 | .stopbits = USART_SERIAL_STOP_BIT
|
23 | };
|
24 |
|
25 | ADC_init(); //ADC init
|
26 | sysclk_init();
|
27 | board_init();
|
28 |
|
29 | #ifdef USARTC0
|
30 | if ((uint16_t) USART_SERIAL_EXAMPLE == (uint16_t) & USARTC0) {
|
31 | sysclk_enable_module(SYSCLK_PORT_C, PR_USART0_bm);
|
32 | }
|
33 | #endif
|
34 |
|
35 | // Initialize usart driver in RS232 mode
|
36 | usart_init_rs232(USART_SERIAL_EXAMPLE, &USART_SERIAL_OPTIONS);
|
37 |
|
38 | uint16_t temp=0;
|
39 |
|
40 | while (true) {
|
41 |
|
42 |
|
43 | ADCB.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc;
|
44 | ADCB.CTRLA |= 0x4;
|
45 | //while(!ADCB.CH0.INTFLAGS);
|
46 | temp=ADCB.CH0RES;
|
47 |
|
48 | pause(500);
|
49 | analog(temp);
|
50 | pause(500);
|
51 | analog(1357);
|
52 | }
|
53 |
|
54 |
|
55 | }
|
56 |
|
57 | /*FUNKTIONEN*/
|
58 | void senden(uint16_t zahl) //Hier wird nur die Zahl ins ASCII-Format gebracht
|
59 | {
|
60 | uint8_t temp = 0;
|
61 |
|
62 | temp = zahl/10000;
|
63 | usart_putchar(USART_SERIAL_EXAMPLE,temp+48);
|
64 | zahl -= temp*10000;
|
65 |
|
66 | temp = zahl/1000;
|
67 | usart_putchar(USART_SERIAL_EXAMPLE,temp+48);
|
68 | zahl -= temp*1000;
|
69 |
|
70 | temp = zahl/100;
|
71 | usart_putchar(USART_SERIAL_EXAMPLE,temp+48);
|
72 | zahl -= temp*100;
|
73 |
|
74 | temp = zahl/10;
|
75 | usart_putchar(USART_SERIAL_EXAMPLE,temp+48);
|
76 | zahl -= temp*10;
|
77 |
|
78 | usart_putchar(USART_SERIAL_EXAMPLE,zahl+48);
|
79 |
|
80 | }
|
81 | void pause(uint16_t ms)
|
82 | {
|
83 | uint32_t count;
|
84 |
|
85 | // Berechnet den counter von der Runtergezählt wird
|
86 | count = sysclk_get_cpu_hz() / 6;
|
87 | count *= ms;
|
88 | count /= 1000;
|
89 |
|
90 | do {
|
91 | asm("");
|
92 | } while (--count);
|
93 | }
|
94 | void analog(uint16_t zahl)
|
95 | {
|
96 | usart_putchar(USART_SERIAL_EXAMPLE, 0x0D);
|
97 | usart_putchar(USART_SERIAL_EXAMPLE,'A');
|
98 | usart_putchar(USART_SERIAL_EXAMPLE,'n');
|
99 | usart_putchar(USART_SERIAL_EXAMPLE,'a');
|
100 | usart_putchar(USART_SERIAL_EXAMPLE,'l');
|
101 | usart_putchar(USART_SERIAL_EXAMPLE,'o');
|
102 | usart_putchar(USART_SERIAL_EXAMPLE,'g');
|
103 | usart_putchar(USART_SERIAL_EXAMPLE,':');
|
104 | usart_putchar(USART_SERIAL_EXAMPLE,' ');
|
105 | senden(zahl);
|
106 |
|
107 | }
|
108 | void ADC_init(){
|
109 |
|
110 |
|
111 |
|
112 |
|
113 | ADCB.CTRLA |= 0x01; // enable adc
|
114 | ADCB.CTRLB = ADC_RESOLUTION_12BIT_gc; // 12-bit
|
115 | ADCB.REFCTRL = ADC_REFSEL_VCC_gc | 0x02; // internal VCC-0.6V
|
116 | ADCB.PRESCALER = ADC_PRESCALER_DIV128_gc;
|
117 | ADCB.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc; // single ended
|
118 | ADCB.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN1_gc; // input pin B1 - Poti
|
119 |
|
120 |
|
121 |
|
122 | }
|