Hallo liebe Leute. Ich weiß dieses Thema gibts hier schon oft. Aber ich stehe irgendwie gerade voll auf'm Schlauch. Der Betreff sagt's ja schon. Und die ADCResult auf dem LCD funktioniert auch von 0-1023 wie sie soll. Doch sobald ich die Mittelwertberechnung mache geht die Zahl nur noch von 0-255 und das dann eben 4 mal nacheinander. Bin mir auch nicht sicher ob das vom Timing her überhaupt passt. Denn die Mittelwertberechnung zieht sich ja unabhängig vom ADC den ADCResult wert. Aber ich komm da auch nich drauf wie man das am Besten koppeln könnte... Habt ihr vielleicht ne fuchsige Idee?
1 | #define F_CPU 8000000UL // 8 MHz-Takt
|
2 | |
3 | #include <avr/io.h> |
4 | #include <avr/interrupt.h> |
5 | #include <stdlib.h> |
6 | #include <avr/delay.h> |
7 | #include "lcd-routines.h" |
8 | |
9 | int i; |
10 | uint16_t ADCMittel=0; |
11 | char ADCString[4]; |
12 | uint16_t ADCResult; |
13 | |
14 | int main () |
15 | {
|
16 | lcd_init(); // Initialisierung des LCD |
17 | lcd_string("ADC Result:"); |
18 | |
19 | //////ADC Einstellen
|
20 | ADMUX = 0b01000000; //Interne Referenz = AVCC - Rechtsbündig - Pin ist PC0 |
21 | ADCSRA = 0b10001110; //ADEN, ADIE, Geschwidigkeit des ADC festlegen 125kHz, Vorteiler 64 - Interrupt - ADC einschalten |
22 | |
23 | sei(); //Set interrupt enable |
24 | |
25 | ADCSRA |= 1<<ADSC; //Starte Messung |
26 | |
27 | while(1) |
28 | {
|
29 | //////ADC MITTELWERT
|
30 | |
31 | for (i=0;i<256;i++) |
32 | {
|
33 | ADCMittel=ADCMittel+ADCResult; //Aufsummieren |
34 | }
|
35 | |
36 | if (i=256) |
37 | {
|
38 | ADCMittel=ADCMittel/256; //Mittelwert bilden |
39 | |
40 | //ADCmittel = ADCmittel; //Umrechnung für PT100
|
41 | |
42 | itoa(ADCMittel, ADCString, 10 ); //Umwandlung |
43 | lcd_setcursor(12,1); //Ausgabe |
44 | lcd_string(ADCString); |
45 | lcd_string(" "); |
46 | _delay_ms(100); |
47 | }
|
48 | }
|
49 | |
50 | }
|
51 | ISR (ADC_vect) //Interrupt routine: ADC |
52 | {
|
53 | |
54 | uint8_t lowADC = ADCL; //Lese unteres Byte ADC |
55 | ADCResult = ADCH<<8 | lowADC; //Schiebe oberes ADC-Byte 8 nach links und füge unteres Byte hinzu |
56 | |
57 | ADCSRA |= 1<<ADSC; //Starte eine Messung |
58 | }
|