Advertisement
Guest User

Untitled

a guest
Jun 8th, 2012
1,526
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Pajeci_stanice_2012.c
  3.  * Processor: Atmel ATmega16
  4.  * Created: 6.6.2012 23:15:40
  5.  * Author: Luboš Fukan, Czech Republic
  6.  */
  7.  
  8. #include <avr/io.h>
  9. #include <util/delay.h>                                        
  10. #include <compat/deprecated.h>                                 
  11.  
  12. #define LCD
  13. #include "lcd_lib.h"                                             
  14. char text[8];                                                  
  15.  
  16. void max6675_select() {
  17.     cbi(PORTB, 4);
  18.     PORTA=0b11111110; //led diode indication instead of debugger :((
  19. }
  20.  
  21. void max6675_deselect() {
  22.     sbi(PORTB, 4);  
  23.     PORTA=0b01111111; //led diode indication instead of debugger :((
  24. }
  25.  
  26. uint8_t send_spi(uint8_t spi_data)
  27. {
  28.   SPDR = spi_data;
  29.   while (!(SPSR & (1<<SPIF)));
  30.   return SPDR;
  31. }
  32.  
  33. void max6675_read_temp()
  34. {
  35.     /* Enable SPI, Master, set clock rate fck/16 */
  36.     SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
  37.    
  38.     short value = 0;
  39.     float temp = 0;
  40.    
  41.     uint8_t highByte=0;
  42.     uint8_t lowByte=0;
  43.    
  44.     max6675_select();
  45.     _delay_ms(1000);
  46.     highByte = send_spi(0);
  47.     lowByte = send_spi(0);
  48.     max6675_deselect();
  49.  
  50.     if (lowByte & (1<<2)) {
  51.         LCDGotoXY(0,0);                                            
  52.         sprintf(text,"TC NOT C");
  53.         LCDstring(text,8);  
  54.         LCDGotoXY(0,1);                                            
  55.         sprintf(text,"ONNECTED");
  56.         LCDstring(text,8);         
  57.     } else {
  58.         value = (highByte << 5 | lowByte>>3);
  59.         temp = (value*0.25);
  60.         // Multiply the value by 0.25 to get temp in ˚C   
  61.         LCDGotoXY(0,0);                                            
  62.         sprintf(text,"TC TEMP:");
  63.         LCDstring(text,8);  
  64.         LCDGotoXY(0,1);                                            
  65.         sprintf(text,"%0.8d", temp);
  66.         LCDstring(text,8);
  67.     }
  68.      
  69. }
  70.  
  71. int main(void)
  72. {  
  73.     DDRA=0b11111111;
  74.    
  75.     LCDinit();                                         
  76.     LCDclr();                                                  
  77.    
  78.     LCDGotoXY(0,0);                                            
  79.     sprintf(text,"  MAX667");
  80.     LCDstring(text,8);  
  81.     LCDGotoXY(0,1);                                            
  82.     sprintf(text,"5 TEST  ");
  83.     LCDstring(text,8);  
  84.      
  85.     while (1)
  86.     {
  87.         max6675_read_temp();
  88.         _delay_ms(500);
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement