اطلاعیه

Collapse
No announcement yet.

راه اندازی max6675 + ترموکوپل

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی max6675 + ترموکوپل

    سلام دوستان
    سال نو همگی مبارک امیدورم سال خوبی داشته باشته باشید .
    با استفاده از مثال زیر میتونید ترموکوپل های مختلف رو با تراشه max6675 به راحتی راه اندازی کنید .
    اگه دیتاشیت این تراشه رو مطالعه کنید با روال کار آشنا میشید که خیلی هم سادست .
    دانلود دیتاشیت
    پکیج smd و پرتکل ارتباتی spi هست .
    پایه ورودی منفی max6675 رو به زمین وصل کنید(2)
    پایه منفی ترموکوپل هم به زمین وصل کنید
    پایه مثبت ترموکوپل رو به ورودی مثبت max6675 (3)و پایه VCC تراشه max6675 هم به پنج ولت (4)و همچنین GND هم به زمین (1)

    So >> 7
    CS >>6
    SCK >>5


    کد:
    #define SCK			2				//SCK (serial clock) pin number
    #define CS			5				//CS (chip select) pin number
    #define SO			4				//SO (serial out, also MISO) pin number
    
    #define SCK_Port PORTE				//SCK port name
    #define CS_Port PORTB				//CS port name
    #define SO_Pin PINB					//SO pin name
    #define SO_Port PORTB				//so pin name
    
    #define SCK_DDR DDRE				//SCK DDR name
    #define CS_DDR DDRB					//CS DDR name
    #define SO_DDR DDRB					//SO DDR name
    
    
    
    uint16_t gettemp(void);
    void init_6675(void);
    uint8_t getTC(void);
    
    uint16_t gettemp(void){													//Temperatur holen.
    	uint8_t bit = 0, bitnr = 12;										//Variablen
    	uint8_t foo1 = 0;
    	uint16_t so_data = 0;
    	
    	CS_Port &= ~(1 << CS);		
    	for(foo1 = 0 ; foo1 < 16 ; foo1++){	
    		bit = 15 - foo1;	
    		SCK_Port |= (1 << SCK);	
    		if((bit <= 14) && (bit >= 3)){	
    			if((SO_Pin & (1 << SO))){										//WENN SO 1 ist, dann...
    				bitnr--;												//zنhlen wir runter...
    				so_data |= (1 << bitnr);								// und schieben eine 1 an bit x
    			}else{														//WENN dem NICHT so ist, dann...
    				bitnr--;												//zنhlen wir runter...
    				so_data &= ~(1 << bitnr);								//und schieben eine 0 an bit x
    			} 
    		}else{															//weis au nimmer, was das soll.
    			bitnr = 12;
    		}
    		SCK_Port &= ~(1 << SCK);										//SCK LO	
    	}
    	CS_Port |= (1 << CS);
    	return so_data*0.25;														//Das ist doch mal was ;D
    }
    
    
    // getTC() returns 0 if Thermocouple is not connected, 255 if thermocuple is connected
    // (to enable this feature T- must be connected to GND)
    uint8_t getTC(void){													//Temperatur holen.										//Variablen
    	uint8_t TC = 0;
    	uint8_t	foo1 = 0;
    	CS_Port &= ~(1 << CS);												//Chip select anlegen
    	for(foo1 = 0 ; foo1 < 16 ; foo1++){									//16 Bits einlesen												//Die Aktuelle Bitnr berechnen.
    		SCK_Port |= (1 << SCK);											//SCK hi
    		if(foo1 == 2){													//das 3. bit ist für uns relevant.
    			if((SO_Pin & (1 << SO))){										//WENN SO 1 ist, dann...
    				TC = 0;
    			}else{														//WENN dem NICHT so ist, dann...
    				TC = 255;
    			} 
    		}
    		SCK_Port &= ~(1 << SCK);										//SCK LO	
    	}
    	CS_Port |= (1 << CS);												//CS HI	//Alles auf Standardkonfig.
    	return TC;															//Das ist doch mal was ;D
    }
    
    
    //Initiates the MAX6675 and IO-pins
    void init_6675(void){													//AVR initialisieren
    
    	SO_DDR &= ~(1 << SO);
    	CS_DDR |= (1 << CS);
    	SCK_DDR |= (1 << SCK);												//IOs setzen
    	
    	SO_Port |= (1<<SO);													//Pullups an. (Wichtig für MAX6675, der kann nicht anders, hab ich festgestellt...
    
    	CS_Port |= (1 << CS);												//CS HI	//Alles auf Standardkonfig.
    	SCK_Port &= ~(1 << SCK);											//SCK LO
    }
    برای مثال :
    کد:
    void	thermocouple_start(void)
    {
    	uint8_t text[20];
    	LCDInit();
    	LCDWriteStringXY(0,0,"Init....");
    	init_6675();
    	LCDWriteStringXY(0,1,"Starting !");
    	while(getTC())
    	{
    		sprintf(text,"Temp : %i",gettemp());
    		LCDWriteStringXY(0,0,text);
    		_delay_ms(1000);
    		LCDClr();
    	}
    	LCDClr();
    	LCDWriteStringXY(0,0,"T disc ...");
    	while(1);
    	
    }
    نتیجه :




    موفق باشید

    #2
    سلام و خسته نباشید
    اگر ممکنه یک تابع برای دریافت اطلاعات از ماژول max6675k معرفی کنید

    هزینه پرداخت می شود.منتظرم
    جدیدترین ویرایش توسط اشکان غفارزاده; ۱۴:۲۴ ۱۳۹۶/۰۵/۱۹.

    دیدگاه

    لطفا صبر کنید...
    X