Exemple #1
0
static void send_selected_rom(void) 
{ 
#if ONLY_1_DEVICE_ON_THE_BUS == 1 
  ow_read_rom(ds18x20_rom_code); 
  ow_command(OW_SKIP_ROM); 
#elif ONLY_1_DEVICE_ON_THE_BUS == 0 
unsigned char x=0;

  ow_command(OW_MATCH_ROM);   
  for(x=0; x<8; x++) { ow_put_byte(ds18x20_rom_code[x]); } 
#endif

return; 
}
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(ds18b20_poll_process, ev, data)
{
  static struct etimer et;
  static uint8_t scratchpad[DS18B20_SCRATCHPAD_SIZE];
  static ow_rom_code_t id;

  PROCESS_BEGIN();

  printf("\nDS18B20 test\n");

  printf("VSEC ON\n");
  power_control_vsec_set(1);

  /* initialize the DS18B20 hardware */
  printf("Initialize 1-wire\n");
  ow_init();
  printf("1-wire READ ROM\n");
  id = ow_read_rom();
  printf("Initialize DS18B20\n");
  ds18b20_init();
  printf("DS18B20 init done\n");

  /* Poll at 1Hz */
  etimer_set(&et, CLOCK_SECOND);

  while(1) {
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&et));

    /* Reset the etimer to trig again */
    etimer_reset(&et);

    ds18b20_read_scratchpad(id, scratchpad);
    ds18b20_convert_temperature(id);
  }

  PROCESS_END();
}
Exemple #3
0
u8 ow_task()
{
    u8 payload_len, code;

    if (mailbox_head(&ow_taskinfo.mailbox, &code, &payload_len))
    {
        switch(code)
        {
            case ONEWIRE_CMD_RESET:
                {
                    u8 rombuf[8];
                    u8 result;
                    if (payload_len == 1)
                    {
                        u8 flags = disable_interrupts();
                        result = ow_read_rom(rombuf);
                        restore_flags(flags);
                    }
                    else
                    {
                        result = ow_read_rom(rombuf);
                    }
                    if (result)
                    {
                        send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_CMD_RESET, 
                            1, &result, 0);
                    }
                    else
                    {
                        send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_CMD_RESET, 
                            8, rombuf, 0);
                    }
                }
                break;
            case ONEWIRE_READ_2760:
                {
                    u8 buf[15];
                    u8 buflen;
                    u8 result;
                    if (payload_len == 2)
                    {
                        mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0);
                        buflen=buf[1];
                        result = ow_2760_read_reg(buf[0], buf, buflen);
                    }
                    else
                    {
                        result = 0xEE;
                    }
                    
                    if (result)
                    {
                        send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_READ_2760, 
                            1, &result, 0);
                    }
                    else
                    {
                        send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_READ_2760, 
                            buflen, buf, 0);
                    }
                }
                break;
            case ONEWIRE_WRITE_2760:
                {
                    u8 buf[2];
                    u8 result;
                    if (payload_len == 2)
                    {
                        mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0);
                        result = ow_2760_write_reg(buf[0], buf[1]);
                    }
                    else if (payload_len == 3)
                    {
                        u8 flag = disable_interrupts();
                        mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 2, 0);
                        result = ow_2760_write_reg(buf[0], buf[1]);
                        restore_flags(flag);
                    }
                    else
                    {
                        result = 0xEE;
                    }
                    
                    send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_WRITE_2760, 
                        1, &result, 0);
                }
                break;
            case ONEWIRE_RECALL_2760:
                {
                    u8 buf[1];
                    u8 result;
                    if (payload_len == 1)
                    {
                        mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 1, 0);
                        result = ow_2760_recall_data(buf[0]);
                    }
                    else
                    {
                        result = 0xEE;
                    }
                    
                    send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_RECALL_2760, 
                        1, &result, 0);
                }
                break;
            case ONEWIRE_COPY_2760:
                {
                    u8 buf[1];
                    u8 result;
                    if (payload_len == 1)
                    {
                        mailbox_copy_payload(&ow_taskinfo.mailbox, buf, 1, 0);
                        result = ow_2760_copy_data(buf[0]);
                    }
                    else
                    {
                        result = 0xEE;
                    }
                    
                    send_msg(BROADCAST_NODE_ID, TASK_ID_ONEWIRE<<4|ONEWIRE_COPY_2760, 
                        1, &result, 0);
                }
                break;
        }
        mailbox_advance(&ow_taskinfo.mailbox);
    }
    return 0;
}