N'abend,
ich habe heute zum Austesten des internen ADC ein Programm geschrieben.
Komischerweise zeigt es als Wert aber immer genau 0 an, obwohl ich die
interne Referenzspannung ja eingeschaltet hätte.
Ich habe mir auch schon andere ADC beiträge im Forum angeschaut, die
haben mir aber leider nicht weitergeholfen.
Kann mir hier jemand behilflich sein?
1 | /*
|
2 | * ADC-Test
|
3 | *
|
4 | * description: The ADC0 is used in this program.
|
5 | *
|
6 | * Created: 16.06.2014 20:48:00
|
7 | * Author: admin
|
8 | */
|
9 |
|
10 | #include <avr/io.h>
|
11 | #include <stdint.h>
|
12 | #include <stdio.h> // for printf, etc. (standard IO's)
|
13 | #include <util/delay.h>
|
14 | #include "USART.h"
|
15 |
|
16 | int voltage = 0;
|
17 |
|
18 | void ADC_int (void){
|
19 |
|
20 | ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // prescaler is 128 (16MHz/128 = 125kHz)
|
21 | ADMUX |= (1<<REFS1)|(1<<REFS0); // internal reference voltage
|
22 | }
|
23 |
|
24 | uint16_t ADC_read (uint8_t channel){
|
25 |
|
26 | ADMUX = channel;
|
27 | ADCSRA |= (1<<ADSC); // set ADSC to 1 before every measurement
|
28 | while ((ADCSRA & 0x40) != (0x00)); // wait for result (ADSC = 0)
|
29 |
|
30 | return ADCW;
|
31 | }
|
32 |
|
33 | int main(void)
|
34 | {
|
35 | USARTInit(0, 115200, 0, 0, 1, 0); // configure UART0, baud rate = 115200
|
36 |
|
37 | while(1) {
|
38 |
|
39 | voltage = ((5.0)*(int)(ADC_read(0)))/1023; // choose ADC0
|
40 | printf("\rVoltage: %i", voltage);
|
41 |
|
42 | _delay_ms(100);
|
43 |
|
44 | } // while (1)
|
45 | }
|
Beste Grüße Lyra