ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 2 از 2
  1. #1
    2006/07/05
    2
    0

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

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

    یا این که مراحل کار رو توضیح بده
  2. #2
    2008/12/26
    384
    115

    پاسخ : راه اندازی سنسود دما 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");
    }
    }
نمایش نتایج: از 1 به 2 از 2

موضوعات مشابه

  1. راه اندازی w25Q32 با lpc1768
    توسط a.valinezhad در انجمن NXP
    پاسخ: 2
    آخرين نوشته: 2017/05/16, 14:36
  2. راه اندازی spi fبا lpc1768
    توسط hosein1371 در انجمن NXP
    پاسخ: 1
    آخرين نوشته: 2015/06/18, 22:07
  3. راه اندازی هدر برد lpc1768
    توسط hossein.ahmadvand در انجمن NXP
    پاسخ: 1
    آخرين نوشته: 2015/04/30, 07:51
  4. راه اندازی FAT با LPC1768
    توسط مهدی مهری در انجمن NXP
    پاسخ: 27
    آخرين نوشته: 2014/07/22, 13:10
  5. راه اندازی mmc با برد lpc1768
    توسط hosein1371 در انجمن NXP
    پاسخ: 3
    آخرين نوشته: 2013/10/22, 15:37

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •