Hallo nochmal,
ich bräuchte nochmal hilfe bei meinem Projekt.
Ich möchte mit einem Atmega32 an einem Spannungsteiler eine Spannung
0-5V messen. Eigentlich sollte das ganze an einem LCD-Diplay angezeigt
werden aber mir reicht erstmal irgendeine anzeige. Leider bekomme ich es
nicht mal hin, mir den umgewandelten Wert an einer LED Reihe anzeigen zu
lassen.
1 | #include <avr/io.h>
|
2 | #include <avr/lcd-pollin-jumper.h> //Bitte lib in ordner kopieren!
|
3 | #define F_CPU 16000000UL
|
4 | #include <util/delay.h> //Standardverzögerungs Lib
|
5 | #define F_CPU 16000000UL
|
6 |
|
7 | uint16_t result;
|
8 |
|
9 | void ADC_init(void)
|
10 | {
|
11 |
|
12 |
|
13 | ADMUX = (1<<REFS1) | (1<<REFS1); //int. Referenzspannung
|
14 | ADCSRA = (1<<ADPS1) | (1<<ADPS0); //Vorteiler setzen
|
15 | ADCSRA |= (1<<ADEN); //ADC aktivieren
|
16 |
|
17 | ADCSRA |= (1<<ADSC); //einmal auslösen
|
18 | while(ADCSRA & (1<<ADSC)){} //warte bis fertig
|
19 | result = ADCW; //Ergebnis
|
20 | }
|
21 |
|
22 | uint16_t ADC_Read (uint8_t channel)
|
23 | {
|
24 | ADMUX = (ADMUX & ~(0x1f)) | (channel & 0x1f);
|
25 | ADCSRA |= (1<<ADSC);
|
26 | while (ADCSRA & (1<<ADSC)){} //warte bis fertig
|
27 | return ADCW; //ADC ausgeben und zurückgeben
|
28 | }
|
29 |
|
30 | int main(void)
|
31 | {
|
32 | DDRA = 0b00000000;
|
33 | DDRB = 0b11111111;
|
34 | DDRC = 0b11111111;
|
35 | DDRD = 0b11111111;
|
36 |
|
37 | while(1)
|
38 | {
|
39 | ADC_init;
|
40 | PORTD = ADC_Read (0);
|
41 |
|
42 | }
|
43 | }
|
ich habe es auch schon mit dieser version probiert:
1 | while(1)
|
2 | {
|
3 | ADC_init;
|
4 | ADC_Read (0);
|
5 | PORTD = result;
|
6 | }
|
oder mit dieser:
1 | while(1)
|
2 | {
|
3 | ADC_init;
|
4 | ADC_Read (0);
|
5 | PORTD = ADCW;
|
6 | }
|
aber egal wie groß die Spannung am Eingang ist, die LEDS an Port D
bleiben dunkel.