اطلاعیه

Collapse
No announcement yet.

راه اندازی سنسود دما dc18b20 با lpc1768

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

    راه اندازی سنسود دما dc18b20 با lpc1768

    با سلام
    بنده می خوام سنسور دمای ds18b20 رو با lpc1768 از طریق onwire راه اندازی کنم . کسی تا حالا این کار رو کرده که بتونه یه مثالی در اختیار من بزاره؟

    یا این که مراحل کار رو توضیح بده

    #2
    پاسخ : راه اندازی سنسود دما dc18b20 با lpc1768

    سلام
    کد رو برات میذارم توضیحشو اصلا وقت ندارم خودت باید پیدا کنی
    اینم بگم من قبلا با stm32 راه اندازی کردم با lpc1768 راه اندازی نکردم ولی سورسشو برات میذارم که از یکی از سایت های روسی گرفتم

    #include "LPC17xx.h"
    #include "rtl.h"
    #include "stdio.h"
    #include "string.h"

    #define DS_1(num) (LPC_GPIO1->FIOPIN & (1UL<<(18+num)))
    #define DS_2(num) (LPC_GPIO0->FIOPIN & (1UL<<(23+num)))

    int count = 0;
    char out[50];
    char rom[3];
    float fTemp1[8];
    float fTemp2[4];


    void delay_us (unsigned int us)
    {
    LPC_TIM2->MCR = 0; // disable timer
    LPC_TIM2->MR0 = us; // interrupt event on overrun
    LPC_TIM2->TC = 0; // reset counter
    LPC_TIM2->MCR |= (1 << 1); //reset counter on match
    LPC_TIM2->TCR |= (1 << 0); // start Timer2
    while (LPC_TIM2->TC);
    return;
    }

    void delay_ms(unsigned int ms)
    {
    int i;
    for (i=0; i < ms; i++)
    {
    delay_us (1000);
    }
    }

    void InitTIM2 (void)
    {
    LPC_SC->PCONP |= (1<<22); // Timer2 power on
    LPC_SC->PCLKSEL1 |= (1 << 12); // Divide CCLK by 1 for Timer2
    LPC_TIM2->TC = 0; // clear timer counter
    LPC_TIM2->PC = 0; // clear prescale counter
    LPC_TIM2->PR = 0; // clear prescale register
    LPC_TIM2->TCR |= (1 << 1); // reset timer
    LPC_TIM2->TCR &= ~(1 << 1); // release reset
    LPC_TIM2->CTCR = 0x00; // timer mode
    LPC_TIM2->PR = 99; // <resolution> uS accuracy @ CCLK/4 Peripheral Clock
    LPC_TIM2->MCR |= (1 << 1); //reset counter on match

    }

    void InitUart0_115200 (void)
    {
    uint32_t Fdiv = 0;

    LPC_SC->PCONP &= ~(1<<3);
    LPC_PINCON->PINSEL0 &= ~(3 << 4);
    LPC_PINCON->PINSEL0 &= ~(3 << 6);

    LPC_SC->PCONP |= (1<<3);

    LPC_PINCON->PINSEL0 |= (1 << 4); /* Pin P0.2 used as TXD0 (Com0) */
    LPC_PINCON->PINSEL0 |= (1 << 6); /* Pin P0.3 used as RXD0 (Com0) */

    Fdiv = (25000000/16)/9600;

    LPC_UART0->LCR = 0x83;
    LPC_UART0->DLL = Fdiv % 256;
    LPC_UART0->DLM = Fdiv / 256;
    LPC_UART0->LCR = 0x03;
    }

    int UART_putChar0 (char c)
    {
    while (!(LPC_UART0->LSR & 0x20));
    return (LPC_UART0->THR = c);
    }

    void UART_putString0 (char *s)
    {
    while (*s != 0)
    {
    UART_putChar0 (*s++);
    }
    }

    void DSOut_1 (unsigned int num)
    {
    LPC_GPIO1->FIODIR |= (1<<(18+num));
    }

    void DSIn_1 (unsigned int num)
    {
    LPC_GPIO1->FIODIR &= ~(1<<(18+num));
    }

    void DSUp_1 (unsigned int num)
    {
    LPC_GPIO1->FIOSET |= (1<<(18+num));
    }

    void DSDown_1 (unsigned int num)
    {
    LPC_GPIO1->FIOCLR |= (1<<(18+num));
    }

    char ow_reset_1 (unsigned int num)
    {
    char ret = 10;

    DSOut_1 (num);
    DSUp_1 (num);
    delay_us (1);
    DSDown_1 (num);
    delay_us (500);
    DSIn_1 (num);
    delay_us (80);
    if (DS_1(num))
    {
    ret = 0;
    }
    else
    {
    ret = 1;
    }
    delay_us (400);
    return ret;
    }

    void ow_write_bit_1 (char bit, unsigned int num)
    {
    if (bit)
    {
    DSOut_1 (num);
    DSUp_1 (num);
    delay_us (1);
    DSDown_1 (num);
    delay_us (10);
    DSUp_1 (num);
    delay_us (49);
    }
    else
    {
    DSOut_1 (num);
    DSUp_1 (num);
    delay_us (1);
    DSDown_1 (num);
    delay_us (59);
    DSUp_1 (num);
    }
    }

    char ow_read_bit_1 (unsigned int num)
    {
    char ret = 10;

    DSOut_1 (num);
    DSUp_1 (num);
    delay_us (1);
    DSDown_1 (num);
    delay_us (10);
    DSIn_1 (num);
    delay_us (10);
    if (DS_1(num))
    {
    ret = 1;
    }
    else
    {
    ret = 0;
    }
    delay_us (40);
    return ret;
    }

    char ow_read_byte_1(unsigned int num)
    {
    char i;
    char byte=0;
    for (i=0;i<8;i++)
    {
    if(ow_read_bit_1(num)) byte |= (0x01<<i);
    delay_us (1);
    }
    return(byte);
    }

    void ow_write_byte_1(char byte, unsigned int num)
    {
    char a;
    char temp;

    for(a=0;a<8;a++)
    {
    temp = byte >> a;
    temp &=0x01;
    ow_write_bit_1(temp, num);
    delay_us (1);
    }
    }

    void DSOut_2 (unsigned int num)
    {
    LPC_GPIO0->FIODIR |= (1<<(23+num));
    }

    void DSIn_2 (unsigned int num)
    {
    LPC_GPIO0->FIODIR &= ~(1<<(23+num));
    }

    void DSUp_2 (unsigned int num)
    {
    LPC_GPIO0->FIOSET |= (1<<(23+num));
    }

    void DSDown_2 (unsigned int num)
    {
    LPC_GPIO0->FIOCLR |= (1<<(23+num));
    }

    char ow_reset_2 (unsigned int num)
    {
    char ret = 10;

    DSOut_2 (num);
    DSUp_2 (num);
    delay_us (1);
    DSDown_2 (num);
    delay_us (500);
    DSIn_2 (num);
    delay_us (80);
    if (DS_2(num))
    {
    ret = 0;
    }
    else
    {
    ret = 1;
    }
    delay_us (400);
    return ret;
    }

    void ow_write_bit_2 (char bit, unsigned int num)
    {
    if (bit)
    {
    DSOut_2 (num);
    DSUp_2 (num);
    delay_us (1);
    DSDown_2 (num);
    delay_us (10);
    DSUp_2 (num);
    delay_us (49);
    }
    else
    {
    DSOut_2 (num);
    DSUp_2 (num);
    delay_us (1);
    DSDown_2 (num);
    delay_us (59);
    DSUp_2 (num);
    }
    }

    char ow_read_bit_2 (unsigned int num)
    {
    char ret = 10;

    DSOut_2 (num);
    DSUp_2 (num);
    delay_us (1);
    DSDown_2 (num);
    delay_us (10);
    DSIn_2 (num);
    delay_us (10);
    if (DS_2(num))
    {
    ret = 1;
    }
    else
    {
    ret = 0;
    }
    delay_us (40);
    return ret;
    }

    char ow_read_byte_2(unsigned int num)
    {
    char i;
    char byte=0;
    for (i=0;i<8;i++)
    {
    if(ow_read_bit_2(num)) byte |= (0x01<<i);
    delay_us (1);
    }
    return(byte);
    }

    void ow_write_byte_2(char byte, unsigned int num)
    {
    char a;
    char temp;

    for(a=0;a<8;a++)
    {
    temp = byte >> a;
    temp &=0x01;
    ow_write_bit_2(temp, num);
    delay_us (1);
    }
    }

    void DS1 (void)
    {
    int count = 0;
    char out[50];
    char rom[3];
    float fTemp[8];

    count = 0;
    while (count < 8)
    {
    if (ow_reset_1 (count))
    {
    ow_write_byte_1(0xCC, count);
    ow_write_byte_1(0x44, count);
    delay_ms (2000);
    ow_reset_1(count);
    ow_write_byte_1(0xCC, count);
    ow_write_byte_1(0xBE, count);

    rom[0] = ow_read_byte_1(count);
    rom[1] = ow_read_byte_1(count);

    fTemp[count] = (float)(rom[0] + (rom[1]<<8))/16;
    sprintf(out,"%02.4f - 1.%d\n\n",fTemp[count],count);
    UART_putString0 (out);
    }
    else
    {
    UART_putString0 ("Not present\n\n");
    }
    count++;
    }

    }

    void DS2 (void)
    {
    int count = 0;
    char out[50];
    char rom[3];
    float fTemp[4];

    count = 0;
    while (count < 4)
    {
    if (ow_reset_2 (count))
    {
    ow_write_byte_2(0xCC, count);
    ow_write_byte_2(0x44, count);
    delay_ms (2000);
    ow_reset_2(count);
    ow_write_byte_2(0xCC, count);
    ow_write_byte_2(0xBE, count);

    rom[0] = ow_read_byte_2(count);
    rom[1] = ow_read_byte_2(count);

    fTemp[count] = (float)(rom[0] + (rom[1]<<8))/16;
    sprintf(out,"%02.4f - 2.%d\n\n",fTemp[count],count);
    UART_putString0 (out);
    }
    else
    {
    UART_putString0 ("Not present\n\n");
    }
    count++;
    }

    }

    int main (void)
    {
    SystemInit ();
    InitUart0_115200 ();
    UART_putString0 ("\n\nStarting ... \n\n");
    InitTIM2 ();

    while (1)
    {
    count = 0;
    while (count < 8)
    {
    if (ow_reset_1(count) == 1)
    {
    ow_write_byte_1(0xCC, count);
    ow_write_byte_1(0x44, count);
    delay_ms (2000);
    ow_reset_1(count);
    ow_write_byte_1(0xCC, count);
    ow_write_byte_1(0xBE, count);

    rom[0] = ow_read_byte_1(count);
    rom[1] = ow_read_byte_1(count);

    fTemp1[count] = (float)(rom[0] + (rom[1]<<8))/16;
    sprintf(out,"%02.4f - 1.%d\n\n",fTemp1[count],count);
    UART_putString0 (out);
    }

    count++;
    }
    UART_putString0 ("\n\n");
    delay_ms (1000);
    count = 0;
    while (count < 4)
    {
    if (ow_reset_2(count) == 1)
    {
    ow_write_byte_2(0xCC, count);
    ow_write_byte_2(0x44, count);
    delay_ms (2000);
    ow_reset_2(count);
    ow_write_byte_2(0xCC, count);
    ow_write_byte_2(0xBE, count);

    rom[0] = ow_read_byte_2(count);
    rom[1] = ow_read_byte_2(count);

    fTemp2[count] = (float)(rom[0] + (rom[1]<<8))/16;
    sprintf(out,"%02.4f - 2.%d\n\n",fTemp2[count],count);
    UART_putString0 (out);
    }

    count++;
    }
    UART_putString0 ("\n\n");
    }
    }
    امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

    دیدگاه

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