PIC16F877-DS1620-FunctionPrototypes

by Marwen Maghrebi
// Function prototypes
void lcd_initialize(void);
void lcd_data(unsigned char data);
void lcd_string(const char *str, unsigned char len);
void lcd_command(unsigned char cmd);
void write_data(unsigned char data);
unsigned int read_data(void);
void start_transfer(void);
void end_transfer(void);
void ds1620_init(void);
signed int read_temperature(void);

// DS1620 Functions
void write_data(unsigned char data) {
    unsigned char i;
    DQ_TRIS = 0;  // Set DQ as output
    
    for(i = 0; i < 8; i++) {
        CLK = 0;
        DQ = (data >> i) & 0x01;  // LSB first
        CLK = 1;
        __delay_us(1);
    }
}

unsigned int read_data(void) {
    unsigned char i;
    unsigned int data = 0;
    
    DQ_TRIS = 1;  // Set DQ as input
    
    for(i = 0; i < 9; i++) {  // Read 9 bits for temperature
        CLK = 0;
        __delay_us(1);
        data |= ((unsigned int)(DQ) << i);  // LSB first
        CLK = 1;
        __delay_us(1);
    }
    
    DQ_TRIS = 0;  // Set back to output
    return data;
}

void start_transfer(void) {
    CLK = 0;
    RST = 1;
    __delay_us(1);
}

void end_transfer(void) {
    RST = 0;
    __delay_us(1);
}

void ds1620_init(void) {
    // Configure DS1620
    start_transfer();
    write_data(WRITE_CONFIG);
    write_data(0x02);  // CPU mode, continuous conversion
    end_transfer();
    __delay_ms(50);    // Allow time for writing to config register
    
    // Start continuous conversion
    start_transfer();
    write_data(START_CONVERT);
    end_transfer();
    __delay_ms(750);   // Maximum conversion time
}

signed int read_temperature(void) {
    unsigned int raw_temp;
    
    start_transfer();
    write_data(READ_TEMP);
    raw_temp = read_data();
    end_transfer();
    
    // Check if the 9th bit is set for two's complement
    if (raw_temp & 0x100) {  // 0x100 is 9th bit in 9-bit number
        raw_temp |= ~0x1FF;  // Sign-extend for two's complement
    }
    
    return raw_temp;  // Now return the correct signed value
}
Are you sure want to unlock this post?
Unlock left : 0
Are you sure want to cancel subscription?
-
00:00
00:00
Update Required Flash plugin
-
00:00
00:00