DSPICPRO4 OneWire DS1820

General discussion on mikroC for dsPIC30/33 and PIC24.
Post Reply
Author
Message
mercuryhg
Posts: 7
Joined: 22 Oct 2009 08:31

DSPICPRO4 OneWire DS1820

#1 Post by mercuryhg » 22 Oct 2009 08:36

Hey there,
I'm new to DSPICPRO4 and I was trying to get familiar with the provided examples. However, I can't get to run the onewire example provided. It always shows temperature 000.0000 . Is there any bug in the example provided? btw, i'm using PIC30F6014A.

User avatar
nikola.kostic
mikroElektronika team
Posts: 433
Joined: 11 Aug 2009 12:12

#2 Post by nikola.kostic » 23 Oct 2009 10:17

Do you have jumper J19 on? Have you put DS1820 temperature sensor on your dsPICPRO4 board?

mercuryhg
Posts: 7
Joined: 22 Oct 2009 08:31

#3 Post by mercuryhg » 23 Oct 2009 10:23

Yea, the DS1820 was in place and the jumper J19 was on. The LCD was displaying zero.

mercuryhg
Posts: 7
Joined: 22 Oct 2009 08:31

#4 Post by mercuryhg » 23 Oct 2009 10:32

Below are the codes i used.

const unsigned short TEMP_RESOLUTION = 9;

char *text = "000.0000";
unsigned temp;

void Display_Temperature(unsigned int temp2write) {
const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
char temp_whole;
unsigned int temp_fraction;

// check if temperature is negative
if (temp2write & 0x8000) {
text[0] = '-';
temp2write = ~temp2write + 1;
}

// extract temp_whole
temp_whole = temp2write >> RES_SHIFT ;

// convert temp_whole to characters
if (temp_whole/100)
text[0] = temp_whole/100 + 48;

text[1] = (temp_whole/10)%10 + 48;
text[2] = temp_whole%10 + 48;

// extract temp_fraction
temp_fraction = temp2write << (4-RES_SHIFT);
temp_fraction &= 0x000F;
temp_fraction *= 625;

// convert temp_fraction to characters
text[4] = temp_fraction/1000 + 48;
text[5] = (temp_fraction/100)%10 + 48;
text[6] = (temp_fraction/10)%10 + 48;
text[7] = temp_fraction%10 + 48;

// print temperature on LCD
Lcd_Custom_Out(2, 5, text);
}//~

void main() {

ADPCFG = 0xFFFF;

Lcd_Custom_Config(&PORTD, 7,6,5,4, &PORTB, 4,0,6);
Lcd_Custom_Cmd(LCD_CURSOR_OFF);
Lcd_Custom_Out(1, 1, " Temperature: ");
// Print degree character, 'C' for Centigrades
Lcd_Custom_Chr(2,13,223);
Lcd_Custom_Chr(2,14,'C');

//--- main loop
do {
//--- perform temperature reading
Ow_Reset(&PORTF,6); // Onewire reset signal
Ow_Write(&PORTF,6,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTF,6,0x44); // Issue command CONVERT_T
Delay_ms(100);

Ow_Reset(&PORTF,6);
Ow_Write(&PORTF,6,0xCC); // Issue command SKIP_ROM
Ow_Write(&PORTF,6,0xBE); // Issue command READ_SCRATCHPAD

temp = Ow_Read(&PORTF,6);
temp = (Ow_Read(&PORTF,6) << 8) + temp;

//--- Format and display result on Lcd
Display_Temperature(temp);

Delay_ms(500);
} while (1);
}

User avatar
nikola.kostic
mikroElektronika team
Posts: 433
Joined: 11 Aug 2009 12:12

#5 Post by nikola.kostic » 26 Oct 2009 11:14

If you have pull down on port F (jumper J7), remove it.

mercuryhg
Posts: 7
Joined: 22 Oct 2009 08:31

#6 Post by mercuryhg » 26 Oct 2009 11:29

yes, the jumper J7 was pulled down and I removed it as you suggested, but it didn't change anything. By the way, i'm using XT w/PLL 4x - XT crystal oscm mode 4x PLL enabled. The clock in MikroC was set to 40.0 MHz. anything wrong with it?

User avatar
nikola.kostic
mikroElektronika team
Posts: 433
Joined: 11 Aug 2009 12:12

#7 Post by nikola.kostic » 26 Oct 2009 16:31

I think you still have some pull down on RF6, maybe PORTF LEDs. SW1.7 needs to be turned OFF. Also, check if you have something else connected to PORTF and remove it.

mercuryhg
Posts: 7
Joined: 22 Oct 2009 08:31

#8 Post by mercuryhg » 26 Oct 2009 17:23

ok, that solved my problem. Thank you !! Didn't know that the LED will get in the way.

Post Reply

Return to “mikroC for dsPIC30/33 and PIC24 General”