- 3D-Druck Einstieg und Tipps         
Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 47

Thema: Temperaturmessung und Anzeige auf Display

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    E-Bike
    @Mr Bean Was verwendest du für ein LCD.lib . Ich möchte da keine Grundsatzdiskussion auslösen wegen dem lcd_gotoxy, aber mich würde interessieren ob der Unterschied in der lib oder im LCD ist. Das ist ja eventuell auch für andere interessant das es da Unterschiede gibt.

  2. #12
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Bin zwar nicht MR.Bean, ich verwende die .lib von Codevision AVR.

    Bei mir muss es auch

    lcd_gotoxy(10,0); heissen, wenn ich auf das 11te Zeichen der ersten Zeile zugreifen will. (0,1) wäre das erste Zeichen der zweiten Zeile.

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    40
    Beiträge
    240
    Nabend allerseits!!

    Muss mich wohl bei Hubert entschuldigen. Bei mir heißt die Zeile auch lcd_gotoxy(12,0).Weiß auch nicht warum das in dem ersten Code den ich gepostet hab falsch ist. Ich bin überzeugt davon gewesen dass ich da nichtsmehr geändert hab. Muss aber wohl so sein. Tut mir wirklich Leid!

    Ich hab meinen Code nun mal nach dem Vorschlag von robocat geändert. Danach hat sich schon etwas mehr getan. Dann hab ich noch etwas an den Werten gespielt um die richtige Temperatur zu errechnen. Aber ich glaube das war der falsche Weg. Jetzt wird zwar die Temperatur richtig angezeigt, aber die Temperturänderung stimmt nichtmehr. Wenn ich den Sensor erwärme ändert sich die angezeigte Temperatur max um 2°. Da kann was noch nicht stimmen...
    Hier mal noch mein jetziger Code:

    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
    void display(uint16_t result);		//Prototyp von display
    
    int main(void) 
    {
    	
    	DDRD = 0xff;  					//PORT D als Ausgang definieren (Hier sind 8 LED`s angeschlossen
    	DDRB = 0xff;					//PORT B als Ausgang
    	uint16_t result = readADC(0);	//Auslesen der analogen Spannungen an Pin 0,
    									// also ADC0. In result steht das Ergebnis.
    	display(result);				//Umrechnung und Ausgabe der Temperatur auf Display und LED`s
    	return 0;
    }
    
    
    void display(uint16_t result)
    {
    	lcd_init(LCD_DISP_ON_CURSOR);	//LCD initialisieren
    	lcd_gotoxy(0,0);				//Cursor an erste Stelle setzen
    	lcd_puts("Temperatur:");		//"Temperatur" ausgeben
    	lcd_gotoxy(12,0);				// Cursor hinter "Temperatur:" setzen
    	char buffer[8];					//Array für itoa anlegen
    	float f=((float)result*200)/1023;	//
    	if(f<0)f=0;
    	itoa((int)f,buffer,10);
    	lcd_puts(buffer);
    	lcd_putc(',');
    	f=(f-(int)f)*1000;
    	if(f<100)lcd_putc('0');
    	if(f<10)lcd_putc('0');
    	itoa((int)f,buffer,10);
    	lcd_puts(buffer);
    	PORTD = result;					//Den Digitalen Wert mit Hilfe der LED`s anzeigen
    	return;
    }
    
    
    
    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;
    }
    Grüße!!

    Bean

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Wenn ich den Sensor erwärme ändert sich die angezeigte Temperatur max um 2°. Da kann was noch nicht stimmen.
    Bist du sicher, dass deine Hardware stimmt? Welche Spannungsänderung hast du auf 10°C ???. Wenn du nämlich bei 100°C Temperaturänderung nur 1V Spannungsänderung hast, nützt dir ein 10bit ADC gaaar nix.


    Ich habe noch einen anderen Vorschlag: ich mache das immer in ASM, und zwar so:

    man ziehe von der Temperatur (in bin) die Zahl 100 so oft ab bist es negativ ist. dann einmal 100 drauf addieren. Die anzahl wie oft man abgezogen hat bebor es negativ wurde sind dann die hunderter! Wenn man das mit den zehnern auch noch macht bleiben die Einer über und man hat die Temperatur Ziffernweise in 3 Variablen. Geht prima, und supi fix. Ich mache halt alles in ASM, weils spaß macht
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    40
    Beiträge
    240
    Hallo

    Ja ich frag mich so langsam auch ob ich nicht doch noch einen Bug in meiner Hardware drin habe.
    Ich hab mir das jetzt gestern alles noch einmal überlegt und frage mich ob ich einen OP zum verstärken des Spannungsabfalls über dem KTY element brauche.
    Also noch einmal von vorne, ich habe einen 10Bit AD wandler >> 1024

    Uref sind 2,56V als entspricht jeder schritt 2,56V/1024 = 0,0025V.

    Wenn ich nun mit meinem Multimeter den Spannungsabfall an dem KTY element messe habe ich da bei Zimmertemp. 0,35V also 140 Schritte. Normal sollte sich das doch mit dem AD Wandler gut messen lassen. Auch wenn der Bereich den ich nutze recht klein ist oder sehe ich das jetzt falsch? Wie habt ihr das gemacht? Habt ihr da noch einen OP drin mit dem ihr das Signal verstärkt? Ich werde heute Abend mal noch versuchen die Spannungswerte in Eiswasser und in kochendem Wasser aufzunehmen, damit ich mal ein paar Anhaltspunkte hab.

    Grüße!

    Bean

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Ich hab kürzlich auch ein Thermometer mit einem KTY 84 - 130 gebastelt.
    Das ging an 5V mit einem 2,2k Ohm Vorwiderstand ohne OpAmp.
    Ich krieg aber auch nur eine Auflösung von 1°C zusammen, weil ich bis 300°C messen will.

    Ich hab die interne Referenzspannungsquelle des A/D Wandlers mit 2,56V verwendet und den obligatorischen 100nF Kondensator an AREF angebaut.
    AVCC muss auch +5V Spannung angeschaltet haben, man sollte in die Zuleitung dieses Pins eine 10µH Drossel einbauen.

    Wenn Du das auch so gemacht hast, sollte am AREF Pin eine Spannung von 2,56V anliegen.

    Vor ein paar Tagen hatte ich auch einen ATMEGA8 an den ein A/D Eingang defekt war - Teste doch auch mal nen anderen Controller.
    Die Spannung an diesem Pin ging bei einer Beschaltung mit einem 10kOhm Widerstand gegen +5V nicht hoch. Legte man dagegen satte 2,5V an, funktionierte auch der A/D Wandler. Der Pin war also irgendwie niederohmig.

  7. #17
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    40
    Beiträge
    240
    Hallo

    Ich möchte auch bis 300°C messen (für meinen Ofen... ). Ich habe allersings einen 1k Widerstand vor meinem KTY-84 130. Werde das heute Abend mal noch mit einem 2K2 ausprobieren.
    Es ist doch aber so dass wenn der Widerstand größer wird auch eine größere Spannung über diesem abfällt. Misst Du dann die Spannung über dem Widerstand oder über dem Thermoelement? Oder wie bekommst Du dadurch eine höhere Spannung?

    Grüße!!

    Bean

  8. #18
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    26.07.2006
    Ort
    nähe Rottweil
    Alter
    40
    Beiträge
    240
    Ach ja, den Kondensator an Aref hab ich noch nicht drin, die Spule auch noch nicht. Werde das aber auch heute Abend versuchen nachzurüsten. Muss mir nur noch eine Spule auftreiben... Aber das dient doch eigentlich nur dazu die Messung zu verbessern oder? Grundsätzlich sollte das ganze doch auch ohne den Kondensator und die Spule funktionieren oder?

    Grüße!!

    Bean

  9. #19
    Erfahrener Benutzer Roboter Genie Avatar von robocat
    Registriert seit
    18.07.2006
    Beiträge
    935
    Code:
    result += ADCW;
    wahrscheinlich liegt es daran nicht, ich habe "ADCW" nur noch nirgends gesehen. habe da bisher ADC verwendet.

    übrigens sind alle anderen methoden zur float-darstellung besser (schneller, kleiner) als meiner. versuch es mal so, wie wkrug oder T.J. es vorschlagen.

    gruesse

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    ....auch ohne den Kondensator und die Spule funktionieren oder?
    Die Spule ist meiner Meinung nach wirklich nur dazu da um HF- Störungen vom A/D Wandler fernzuhalten.
    Der Kondensator ist, soweit ich weiß, zur Stabilisierung der Referenzspannungsquelle zwingend erforderlich.

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests