Hallo
Ich möchte mir gerade eine Temperaturmessung bauen. Bin auch schon soweit dass ich die Temperatur messen kann mit dem AD-Wandler. Wenn ich mir den binären Wert auf meine 8 LED`s ausgeben lasse und dann mit der Hand am Arm umrechne passt die Messung auch schon. Ich möchte die Temperatur nun auf einem zweizeiligen Display ausgeben. Aber das bekomme ich nicht hin. Sehe meistens nur kyrillisch...
Nach einigem lesen hier im Forum und auf mikrocontroller.net weiß ich nun dass ich zum Umrechnen wohl die Funktion itoa brauche, aber wirklich hinbekommen hab ich das so nicht. Vielleicht könntet ihr mal über meinen Code drüber schaun und mir einen Tip geben.
Ich verwende ein AtMega 8 und ein KTY Element mit 1k Vorwiderstand. Aber das funktioniert soweit ich das beurteilen kann auch schon.Code:#include <avr/io.h> #include <inttypes.h> #include <stdlib.h> #include <lcd.h> #define F_CPU = 4000000UL; uint16_t readADC(uint8_t); //Prototyp von readADC int main(void) { uint16_t result = readADC(0); //Auslesen der analogen Spannungen an Pin 0, // also ADC0. In result steht das Ergebnis. result /=5; //result durch 5 teilen um richtiges Ergebnis zu bekommen DDRD = 0xff; //PORT D als Ausgang definieren (Hier sind 8 LED`s angeschlossen) PORTD = result; //Den Digitalen Wert mit Hilfe der LED`s anzeigen DDRB = 0xff; lcd_init(LCD_DISP_ON_CURSOR); //LCD initialisieren lcd_gotoxy(0,0); lcd_puts ("Temperatur:"); char Buffer[20]; itoa(result,Buffer,10); lcd_gotoxy(0,11); lcd_puts('Buffer'); //ADC Wert auf Display ausgeben return 0; } uint16_t readADC(uint8_t channel) { uint8_t i; uint16_t result = 0; // Den ADC aktivieren und Teilungsfaktor auf 32 stellen ADCSRA = (1<<ADEN) | (1<<ADPS0) | (1<<ADPS2); // Kanal des Multiplexers waehlen (ADC 0) ADMUX = (!(1<<MUX0)) | (!(1<<MUX1)) | (!(1<<MUX2)); // interne Referenzspannung verwenden (also 2,56 V) ADMUX |= (1<<REFS1) | (1<<REFS0); // Den ADC initialisieren und einen sog. Dummyreadout machen ADCSRA |= (1<<ADSC); while(ADCSRA & (1<<ADSC)); // Jetzt 3x die analoge Spannung and Kanal channel auslesen // und dann Durchschnittswert ausrechnen. for(i=0; i<4; i++) { // Eine Wandlung ADCSRA |= (1<<ADSC); // Auf Ergebnis warten... while(ADCSRA & (1<<ADSC)); result += ADCW; } // ADC wieder deaktivieren ADCSRA &= ~(1<<ADEN); result /= 4; return result; }
Vielen Dank schonmal!
Grüße!!
Bean
Lesezeichen