- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: Temparatur Sensor Anschluss

  1. #21
    Benutzer Stammmitglied
    Registriert seit
    03.09.2009
    Alter
    30
    Beiträge
    32
    Anzeige

    LiFePo4 Akku selber bauen - Video
    ja, das würde mich auch interesieren:

    wie liest man den a/d aus?

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    20.02.2009
    Ort
    Lübbecke
    Alter
    40
    Beiträge
    8
    Habs mitlerweile raus.

    Hab jetzt denn:
    http://www.conrad.de/goto.php?artikel=502358
    reagiert sehr schnell.

    Anschluß: +5v ----- Sensor ----- ADC ----- Wiederstand ----- GND
    Wiederstand hab ich 5kOhm verwendet

    Programm (nicht das beste geht aber) für M32 mit LCD 2Zeilig:

    Code:
    uint16_t adc2 = readADC(ADC_2); //Read ADC Channel 2, Temperatur messen,
    		                                //+5v ----- Sensor ----- ADC ----- Wiederstand ----- GND
    		 uint16_t vk ;// vor dem Komma
    		 uint16_t nk ;// nach dem Komma
    		 uint16_t cvk ;
    		 
    		 vk = ((adc2 -252)/(float)10.8);//Faktor 10.8 pro °C, float für Kommazahl
    		 
    		 switch(vk)
                {
                 case 8: cvk = 8 ; break;
                 case 9: cvk = 9 ; break;
                 case 10: cvk = 10 ; break;
                 case 11: cvk = 11 ; break;
    			 case 12: cvk = 12 ; break;
                 case 13: cvk = 13 ; break;
    			 case 14: cvk = 14 ; break;
                 case 15: cvk = 15 ; break;
    			 case 16: cvk = 16 ; break;
                 case 17: cvk = 17 ; break;
    			 case 18: cvk = 18 ; break;
                 case 19: cvk = 19 ; break;
    			 case 20: cvk = 20 ; break;
                 case 21: cvk = 21 ; break;
    			 case 22: cvk = 22 ; break;
                 case 23: cvk = 23 ; break;
    			 case 24: cvk = 24 ; break;
                 case 25: cvk = 25 ; break;
    			 case 26: cvk = 26 ; break;
                 case 27: cvk = 27 ; break;
    			 case 28: cvk = 28 ; break;
                 case 29: cvk = 29 ; break;
    			 case 30: cvk = 30 ; break;
                 case 31: cvk = 31 ; break;
    			 case 32: cvk = 32 ; break;
                 case 33: cvk = 33 ; break;
    			 case 34: cvk = 34 ; break;
                 case 35: cvk = 35 ; break;
    			 case 36: cvk = 36 ; break;
                 case 37: cvk = 37 ; break;
    			 case 38: cvk = 38 ; break;
                 case 39: cvk = 39 ; break;
    			 case 40: cvk = 40 ; break;
                 case 41: cvk = 41 ; break;
    			 case 42: cvk = 42 ; break;
                 case 43: cvk = 43 ; break;
    			 case 44: cvk = 44 ; break;
                 case 45: cvk = 45 ; break;
                 // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat:
                 default : cvk = 0 ; break; //einfach so
                } 
    		 
    		 
    		 nk = ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8
    		 
    		 setCursorPosLCD(1, 9);// Cursor setzen 2.Zeile nach der 9.Stelle
    		 writeIntegerLengthLCD(vk, DEC, 2);
    		 writeCharLCD(',');
    		 writeIntegerLengthLCD(nk, DEC, 1);
    		 writeCharLCD('ß');
    		 writeCharLCD('C');
    vk = ((adc2 -252)/(float)10.8);

    252 Wert ermittelt für 0°C
    float oder double für die Kommazahl, geht vielleich auch ohne

    21,1°C = ((480 -252)/(float)10.8)
    Auf dem LCD wird aber nur 21°C ausgegeben, deswegen:

    switch(vk) case 8: cvk = 8 ; break; u.s.w. für die berechnung
    der Nachkommastelle.
    Es gibt bessere Varianten die waren mir aber zu hoch, mit intoa ?????
    Ich will eh nur 15 bis 40°C messen(Terrarium).

    nk= ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8
    1 =((((480 -252)/ (float)10.8))-21)*10 ;//10.8

    cvk = 21 aus: switch(vk)

    writeIntegerLengthLCD(nk, DEC, 1);
    1 für eine Nachkommastelle 2 = 21,39°C z.B

    Versuch das mal, ansonsten bei der Suche eingeben:
    wiederstand and messen

    Komplette Programm(Lampensteuerung/Beregnung/Wärme kommt noch):
    Code:
    #include "RP6ControlLib.h" 		// The RP6 Control Library. 
    								// Always needs to be included!
    
    
    int main(void)
    {
    	initRP6Control(); // Always call this first! The Processor will not work
    					  // correctly otherwise. 
        initLCD(); 
    	
    	setLEDs(0b0000);
    
    	showScreenLCD("################", "################");
        mSleep(2000);
    	showScreenLCD("     Terra      ", "    Control     ");
    	mSleep(2000);
    	clearLCD(); // Clear the whole LCD Screen
    	
    	DDRA &= ~ADC2;
    	
    	startStopwatch1(); // Stopwatch1 starten!---Uhr---
    	startStopwatch2(); // Stopwatch2 starten!
    	
    	int16_t time_sek = 1;
    	int16_t time_min = 25;
    	int16_t time_std = 18;
    	int16_t time_day = 2;
    	int16_t time_kw = 37;
    	int16_t time_kwmax = 53;
    	int16_t time_jahr = 2009;
    	
    	while (true) 
    	{
    	    //___________________Uhr Anfang___________________
    	    
    		if(getStopwatch1() >= 906) // 909 = 1sekunde passend einstellen
    		{
    		  time_sek = time_sek + 1;
    		  if (time_sek == 60) {time_sek = 0; time_min = time_min + 1;}
    		  if (time_min == 60) {time_min = 0; time_std = time_std + 1;}
    		  if (time_std == 24) {time_std = 0; time_day = time_day + 1;}
    		  if (time_day == 8)  {time_day = 0; time_kw = time_kw + 1;}
    		  if (time_kw == time_kwmax)  {time_kw = 0; time_jahr = time_jahr + 1;}
    		  setStopwatch1(0);
    		}
    		
    		switch(time_jahr)
            {
              case 2009: time_kwmax = 53; break;
              case 2010: time_kwmax = 52; break;
    		  case 2011: time_kwmax = 52; break;
    		  case 2012: time_kwmax = 52; break;
    		  case 2013: time_kwmax = 52; break;
    		  case 2014: time_kwmax = 52; break;
    		  case 2015: time_kwmax = 53; break;
    		  case 2016: time_kwmax = 52; break;
    		  case 2017: time_kwmax = 52; break;
    		  case 2018: time_kwmax = 52; break;
    		  case 2019: time_kwmax = 52; break;
    		  case 2020: time_kwmax = 53; break;
              // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat:
             default : time_kwmax = 52; break;
            }
    		
    		//
    		uint8_t key = getPressedKeyNumber();
    		if(key) // If a key is pressed... (key != 0)
    		{
    			uint8_t key_adc = readADC(ADC_KEYPAD);
    			
    			while(getPressedKeyNumber());
    			switch(key)
    			{
    				case 1: 
    					//Taster1 Stunde verstellen
    					{
    					  time_std = time_std + 1;
    					  if (time_std >=24)
    					  {
                             time_std = 0;
    					  }
    					}
    				break;
    				case 2: 
    					//Minuten
    					{
    					  time_min = time_min + 1;
    					  if (time_min >=60)
    					  {
    					     time_min = 0;
    					  }
    					}
    				break;
    				case 3: 
    					//Sekunde
    					{
    					  time_sek = 0;					  
    					}
    				break;
    				case 4: 
    				    //Kalenderwoche
    					{
    					  time_kw = time_kw + 1;
    					  if (time_kw >=time_kwmax)
    					  {
    					     time_kw = 0;
    					  }				  
    					}
    				break;
    				case 5: 
    				    //
    				break;
    			}
    		}
    		// 4 Sekunden am Tag dazu passend Einstellen
    		if ((time_std == 0) && (time_min == 0) && (time_sek == 0))
    		{
    		time_sek = time_sek + 4;
    		}
    		
    		setCursorPosLCD(0, 0); 
    		writeCharLCD('k');
    		writeCharLCD('w');
    		writeCharLCD(':');
    		writeIntegerLengthLCD(time_kw, DEC, 2);
    		writeCharLCD(' ');
    		writeIntegerLengthLCD(time_std, DEC, 2);
    		writeCharLCD(':');
    		writeIntegerLengthLCD(time_min, DEC, 2);
    		writeCharLCD(':');
    		writeIntegerLengthLCD(time_sek, DEC, 2);
    		writeCharLCD(' ');
    		
    		//______________Uhr Ende____________________________________________________
    		
    		if(getStopwatch2() > 800)
    		{
    		 setLEDs(0b0001);
    		 uint16_t adc2 = readADC(ADC_2); //Read ADC Channel 2, Temperatur messen,
    		                                //+5v ----- Sensor ----- ADC ----- Wiederstand ----- GND
    		 uint16_t vk ;// vor dem Komma
    		 uint16_t nk ;// nach dem Komma
    		 uint16_t cvk ;
    		 
    		 vk = ((adc2 -252)/(float)10.8);//Faktor 10.8 pro °C, float für Kommazahl
    		 
    		 switch(vk)
                {
                 case 8: cvk = 8 ; break;
                 case 9: cvk = 9 ; break;
                 case 10: cvk = 10 ; break;
                 case 11: cvk = 11 ; break;
    			 case 12: cvk = 12 ; break;
                 case 13: cvk = 13 ; break;
    			 case 14: cvk = 14 ; break;
                 case 15: cvk = 15 ; break;
    			 case 16: cvk = 16 ; break;
                 case 17: cvk = 17 ; break;
    			 case 18: cvk = 18 ; break;
                 case 19: cvk = 19 ; break;
    			 case 20: cvk = 20 ; break;
                 case 21: cvk = 21 ; break;
    			 case 22: cvk = 22 ; break;
                 case 23: cvk = 23 ; break;
    			 case 24: cvk = 24 ; break;
                 case 25: cvk = 25 ; break;
    			 case 26: cvk = 26 ; break;
                 case 27: cvk = 27 ; break;
    			 case 28: cvk = 28 ; break;
                 case 29: cvk = 29 ; break;
    			 case 30: cvk = 30 ; break;
                 case 31: cvk = 31 ; break;
    			 case 32: cvk = 32 ; break;
                 case 33: cvk = 33 ; break;
    			 case 34: cvk = 34 ; break;
                 case 35: cvk = 35 ; break;
    			 case 36: cvk = 36 ; break;
                 case 37: cvk = 37 ; break;
    			 case 38: cvk = 38 ; break;
                 case 39: cvk = 39 ; break;
    			 case 40: cvk = 40 ; break;
                 case 41: cvk = 41 ; break;
    			 case 42: cvk = 42 ; break;
                 case 43: cvk = 43 ; break;
    			 case 44: cvk = 44 ; break;
                 case 45: cvk = 45 ; break;
                 // Hier gelangt das Programm hin, wenn keiner der obigen Fälle gepasst hat:
                 default : cvk = 0 ; break; //einfach so
                } 
    		 
    		 
    		 nk = ((((adc2 -252)/(float)10.8))-cvk)*10 ;//10.8
    		 
    		 setCursorPosLCD(1, 9); 
    		 writeIntegerLengthLCD(vk, DEC, 2);
    		 writeCharLCD(',');
    		 writeIntegerLengthLCD(nk, DEC, 1);
    		 writeCharLCD('ß');
    		 writeCharLCD('C');
    		 
    		 setLEDs(0b0000);
    		 setStopwatch2(0); // Stopwatch1 auf 0 zurücksetzen
            }
    		
    	}
    	return 0;
    }
    viel Spaß beim probieren

  3. #23
    Benutzer Stammmitglied
    Registriert seit
    03.09.2009
    Alter
    30
    Beiträge
    32
    das umweltprogramm ist ne tolle idee,
    werd ich auch mal bauen/programmieren

    Wie wärs mit dem drezahlmesser und nem winrad zur Baufort messung?

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

Labornetzteil AliExpress