1 | #include <avr/io.h>
|
2 | #include <inttypes.h>
|
3 | #define FOSC 12000000UL //12MHz Taktfrequenz
|
4 | #define BAUD 9600UL //9600 Baud
|
5 | #define MYUBRR (FOSC/(16*BAUD))-1
|
6 |
|
7 | /* ADC initialisieren */
|
8 | void ADC_Init(void) {
|
9 | uint16_t result;
|
10 | ADMUX = (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
|
11 | ADCSRA = (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
|
12 | ADCSRA |= (1<<ADEN); // ADC aktivieren
|
13 | /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
|
14 | also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
|
15 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
|
16 | while (ADCSRA & (1<<ADSC) ); // auf Abschluss der Konvertierung warten
|
17 | /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
|
18 | Wandlung nicht übernommen. */
|
19 | result = ADCW;
|
20 | }
|
21 |
|
22 |
|
23 | while (1)
|
24 | {
|
25 | /***************************************************************************************************************/
|
26 |
|
27 | for(i=0;i<=2;i++)
|
28 | {
|
29 | /* ADC Einzelmessung */
|
30 |
|
31 | uint16_t ADC_Read( uint8_t channel )
|
32 | {
|
33 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
34 |
|
35 | ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); //Channel ADC0
|
36 |
|
37 |
|
38 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
|
39 | while (ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung warten
|
40 | ;
|
41 | return ADCW; // ADC auslesen und zurückgeben
|
42 | }
|
43 |
|
44 | void USART_Transmit( unsigned char data )
|
45 | {
|
46 | while (!(UCSRA &(1<<UDRE)))
|
47 | ;
|
48 |
|
49 | UDR = data;
|
50 | }
|
51 |
|
52 | void USART_Transmit_String( char* s )
|
53 | {
|
54 | while( *s != '\0' )
|
55 | {
|
56 | USART_Transmit( *s );
|
57 | ++s;
|
58 | }
|
59 | }
|
60 |
|
61 | int main (void)
|
62 | {
|
63 |
|
64 | UBRRH=(unsigned char)(MYUBRR>>8); //4 höheren Bits des UBRR
|
65 | UBRRL=(unsigned char) MYUBRR; //4 niedere Bits des UBRR
|
66 |
|
67 | UCSRB=(1<<RXEN)|(1<<TXEN); //Empfangen und Senden ermöglichen
|
68 | UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //UCSRC Register wählen und via Z1 und Z0 8bit als Ergebnisslänge zum Einlesen festlegen
|
69 |
|
70 | ADC_Init();
|
71 |
|
72 |
|
73 | char Werte[10];
|
74 |
|
75 | while(1)
|
76 | {
|
77 |
|
78 | int i = ADC_Read(0);
|
79 |
|
80 | itoa( i, Werte, 10 );
|
81 | USART_Transmit_String( Werte );
|
82 | USART_Transmit( ' ' );
|
83 |
|
84 | }
|
85 | }
|
86 | }
|
87 |
|
88 | /******************************************************************************************************************/
|
89 |
|
90 | for(b=0;i<=2;i++)
|
91 | {
|
92 | /* ADC Einzelmessung */
|
93 |
|
94 | uint16_t ADC_Read( uint8_t channel )
|
95 | {
|
96 | // Kanal waehlen, ohne andere Bits zu beeinflußen
|
97 |
|
98 | ADMUX = 1; //Channel ADC1
|
99 |
|
100 |
|
101 | ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
|
102 | while (ADCSRA & (1<<ADSC) ) // auf Abschluss der Konvertierung warten
|
103 | ;
|
104 | return ADCW; // ADC auslesen und zurückgeben
|
105 | }
|
106 |
|
107 | void USART_Transmit( unsigned char data )
|
108 | {
|
109 | while (!(UCSRA &(1<<UDRE)))
|
110 | ;
|
111 |
|
112 | UDR = data;
|
113 | }
|
114 |
|
115 | void USART_Transmit_String( char* s )
|
116 | {
|
117 | while( *s != '\0' )
|
118 | {
|
119 | USART_Transmit( *s );
|
120 | ++s;
|
121 | }
|
122 | }
|
123 |
|
124 | int main (void)
|
125 | {
|
126 |
|
127 | UBRRH=(unsigned char)(MYUBRR>>8); //4 höheren Bits des UBRR
|
128 | UBRRL=(unsigned char) MYUBRR; //4 niedere Bits des UBRR
|
129 |
|
130 | UCSRB=(1<<RXEN)|(1<<TXEN); //Empfangen und Senden ermöglichen
|
131 | UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //UCSRC Register wählen und via Z1 und Z0 8bit als Ergebnisslänge zum Einlesen festlegen
|
132 |
|
133 | ADC_Init();
|
134 |
|
135 |
|
136 | char Werte[10];
|
137 |
|
138 | while(1)
|
139 | {
|
140 |
|
141 | int i = ADC_Read(0);
|
142 |
|
143 | itoa( i, Werte, 10 );
|
144 | USART_Transmit_String( Werte );
|
145 | USART_Transmit( ' ' );
|
146 |
|
147 | }
|
148 | }
|
149 | }
|
150 |
|
151 |
|
152 | }
|