1 | #define F_CPU 3686400
|
2 | #include <avr/io.h>
|
3 | #include <stdlib.h>
|
4 | #include <util/delay.h>
|
5 | #include "lcd-routines.h"
|
6 | uint16_t BOTTOM;
|
7 | uint16_t MEDIUM;
|
8 |
|
9 | void initADC(){
|
10 | //ADC auf interne Referenz 2.56 Volt einstellen
|
11 | //Eingang auf 0V Referenz
|
12 | ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0);
|
13 | //Grundeinstellungen für ADC einstellen
|
14 | ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
|
15 |
|
16 | //Eine Messung machen, um ADC warmlaufen zu lassen
|
17 | ADCSRA |= (1<<ADSC);
|
18 | //Auf Fertigstellung warten
|
19 | while(ADCSRA & (1<<ADSC)){;}
|
20 | //Wert auslesen, um ihn zu verwerfen
|
21 | BOTTOM = ADCW;
|
22 |
|
23 | //Eine Messung machen, um BOTTOM zu ermitteln
|
24 | ADCSRA |= (1<<ADSC);
|
25 | //Auf Fertigstellung warten
|
26 | while(ADCSRA & (1<<ADSC)){;}
|
27 | //Wert für BOTTOM speichern
|
28 | BOTTOM = ADCW;
|
29 |
|
30 | //Referenzwert jetzt auf 1/2 Vcc einstellen
|
31 | ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<MUX3) | (1<<MUX2) | (1<<MUX1);
|
32 | //Eine Messung machen, um MEDIUM zu errechnen
|
33 | ADCSRA |= (1<<ADSC);
|
34 | //Auf Fertigstellung warten
|
35 | while(ADCSRA & (1<<ADSC)){;
|
36 | //Wert für MEDIUM speichern
|
37 | MEDIUM = ADCW;
|
38 | }
|
39 |
|
40 | void lcd_int_out(int x){
|
41 | char buffer[20];//Einen Buffer für die Zahl bereitstelleb
|
42 | itoa(x, buffer, 10);//Zahl in String umwandeln
|
43 | lcd_string(buffer);}//String auf Display ausgeben
|
44 |
|
45 | void init(){
|
46 | initADC();//ADC anwerfen
|
47 | lcd_init();//LCD anwerfen
|
48 | }
|
49 |
|
50 | int main(void){
|
51 | init();//Init-Void aufrufen
|
52 | while(1){
|
53 | lcd_string("BOTTOM | MEDIUM");//Beschreibung in obere Zeile
|
54 | lcd_setcursor(0,2);//Cursor in untere Zeile
|
55 | lcd_int_out(BOTTOM);//Bottom ausgeben
|
56 | lcd_string(" | ");//Trennzeichen ausgeben
|
57 | lcd_int_out(MEDIUM);//Medium ausgeben
|
58 | _delay_ms(100);//Tue nix außer warten...
|
59 | }
|
60 | return 0;
|
61 | }
|