# One wire

1-Wire é um tipo de comunicação, um sistema de barramento projetado pela Dallas Semiconductor Corp. que provê dados de baixa velocidade, sinalização e sinal único de energia. 1-Wire tem um conceito similaro ao do I²C, mas com taxas mais baixas de dados e maior alcance. O 1-Wire é basicamente um acessório pequeno e utilizado em funções digitais e também em instrumentos de medição de temperatura (termômetro). Uma rede de dispositivos 1-Wire associados com um Mestre, é chamada de MicroLan.
Um diferencial do barramento 1-Wire é o fato de utilizar apenas dois cabos: dados e GND. Para isso, o dispositivo 1-Wire dispõe de um capacitor de 800 pF para armazenar carga e alimentar o dispositivo durante os períodos onde o cabo de dados estiver sendo usado para o tráfego de dados.
Dependendo de sua função, os dispositivos 1-Wire podem ser utilizados como componentes únicos num circuito integrado e em pacotes TO92. Em alguns casos é utilizado de forma portátil no chamado iButton que utiliza uma bateria de relógio de pulso. Alguns fabricantes também produzem dispositivos um pouco mais complexos que um componente único utilizando o barramento 1-Wire para comunicação. Um dispositivo 1-Wire pode ser apenas um de vários componentes em uma placa de circuitos dentro de um produto, mas também é encontrado em isolamento dentro de dispositivos como sensores de temperatura ou anexo a um dispositivo sendo monitorado. Alguns sistemas de laboratório e outros tipos de sistemas de aquisição de dados e controle, conectam-se ao dispositivo 1-Wire usando cabos com o conector modular ou com o cabo do tipo CAT-5 com o dispositivo montado em um soquete incorporado a um pequeno PCB ou anexo a um objeto sendo monitorado. Em tais sistemas, conectores RJ11 (6P2C ou 6P4C, comumente utilizados em telefones) são populares.
Sistemas de sensores e atuadores podem ser construídos conectando componentes 1-Wire, cada qual incluindo toda a lógica necessária para a operação do barramento 1-Wire. Como exemplificação temos loggers de temperatura, temporizadores, sensores de tensão e corrente, monitores de bateria e de memória. Estes podem ser conectados a um computador utilizando um conversor de seu barramento. USB, serial RS-232 e porta paralela são interfaces populares em soluções que visam conectar a MicroLan ao computador provedor. MicroLans também fazem interface com microcontroladores como o Arduino, Parallax BASIC Stamp, Parallax Propeller, PICAXE, a família Microchip PICe a família RENESAS.
O iButton (também conhecido como Dallas Key ou Chave Dallas) é um encapsulamento mecânico que coloca o componete 1-Wire dentro de um pequeno "botão" similar a uma bateria em forma de disco. Os iButtons são conectados a um sistema que usa o barramento 1-Wire através de soquetes com contatos que tocam a "tampa" e a "base" da caixinha. iButtons são como Smart Tickets da Akbil dentro do transporte público de Istambul. Como alternativa, a conexão pode ser semi-permanente com um tipo de soquete diferente o iButton afixa-se a ele, mas é facilmente removível.
Além disso, há o Java Ring, um anel de iButtons montado com um Java Virtual Machine compatível com as especificações do Java Card 2.0 que foi feito para atender a conferência JavaOne de 1998.
Cada chipe 1-Wire tem um código único gravado nele. Essa característica faz com que o chip, especialmente no encapsulamento do iButton, adequado para a utilização como uma chave para abrir fechaduras, armar e desarmar alarmes, fazer autenticação de usuários em sistemas computacionais, operações de registro de tempo e outras utilizações similares.

## Uso do barramento

Em qualquer MicroLan, há sempre exatamente um mestre na carga geral, na qual pode ter um PC ou um microcontrolador. O dispositivo mestre inicia a atividade no barramento e facilita que se evite colisões. O protocolo é construído no software incluindo detecções de colisões. Depois de uma colisão, o dispositivo mestre tenta novamente efetuar o requerimento de comunicação. A rede 1-Wire da Dallas foi implementada com um dreno aberto no dispositivo mestre conectado a um ou mais drenos abertos nos dispositivos secundários. Um único resistor em pull-up é comum a todos os dispositivos da rede e mantém em 3 ou 5 volts, ainda provê energia aos dispositivos secundários. A comunicação ocorre quando o mestre ou o secundário assume que o barramento está no nível baixo, conecta o resistor de pull up ao GND através da saída MOSFET. Há alguns drivers e chips para bridge específicos para 1Wire disponíveis no mercado. Uma taxa de dados é de 16.3 kbits/s pode ser alcançada.
O dispositivo mestre inicia a transmissão com um pulso de "reset", que põe o cabo em 0 volt por 480µs. Isso reseta todos os dispositivos secundários no barramento, provavelmente privando-os de alimentação. Depois disso, qualquer dispositivo secundário, se presente, retorna um "pulso de presença": mantém o cabo aterrado por no mínimo 60µs depois de o dispositivo mestre liberar o barramento.
Para enviar um "1" (sinal alto)o software do barramento do mestre envia breve pulso de sinal baixo (1 - 15µs). Para enviar um "0", o software envia um pulso de sinal baixo por 60µs. O limite baixo de queda do pulso é usado para iniciar um multivibrador monoestável no dispositivo secundário. O multivibrador no clock do dispositivo secundário é usado para ler a linha de dados por cerca de 30µs após o pico baixo da onda. O multivibrador do secundário inevitavelmente tem tolerâncias analógicas que afetam na precisão da contagem de tempo, no qual é o motivo de o pulso de saída ser de 60µs e o pulso de início não pode durar mais que 15µs.
Se uma porta paralela for inconveniente ou o sistema operacional interfirir na temporização, uma UART correndo a 100kbits/s com alguns resistores e um software especial podem produzir e ler pulsos de 1-Wire aceitáveis. Chipes para "bridge" Seriais ou USB também estão disponíveis para manipular a temporização e o formato de onda requeridos pelo barramento 1-Wire e são particularmente úteis na utilização de cabeamentos extensos (maiores que 100m). Cabos para barramentos maiores que 300m consistem em cabos de par trançado de de telefones testados por fabricantes. De qualquer maneira, este tipo de cabo requer um ajuste nos resistores de pull up de 5k? para 1k?.<1--Páginas 40 e 41-->
Quando estão recebendo dados, os mestres enviam um pulso de 0 volt de 1 a 15µs para iniciar cada bit. Se a unidade secundária quer transmitir um "1", nada acontece e o cabo imediatamente vai para a tensão do pull-up. Se o secundário quer mandar um "0", este põe a linha de dados em GND por 60µs.
A sequência básica é: um pulso de reset, um comando de 8 bits e depois o dado é enviado ou recebido em grupos de 8 bits. Quando uma sequência de dados está sendo transferida, erros podem ser detectados em eum CRC de 8 bits (baixa proteção de dados).
Alguns dispositivos pode compartilhar o mesmo barramento. Cada um deve ter um único número serial de 64 bits. O byte menos significativo do número serial é um número de 8 bits que diz o tipo de dispositivo. O byte mais significativo é padrão (para o barramento 1-Wire) com os 8 bits do CRC.
Existem vários comandos de transmissão padrão e ainda comandos dirigidos a dispositivos específicos. O dispositivo mestre pode enviar um comando de seleção e nele o endereço de um dispositivo em particular; daí o próximo comando é executado apenas pelo dispositivo selecionado. O barramento também possui um algoritmo para recuperar o endereço de cada dispositivo presente na rede. Desde que o endereço inclua o tipo de dispositivo e o CRC, a recuperação do endereço ''roster'' também produz um inventário confiável dos dispositivos na rede. O espaço do endereço de 64 bits é procurado como uma árvore binária, permitindo ser encontrados até 75 dispositivos por segundo.
Para encontrar os dispositivos, o mestre transmite um comando de enumeração e depois um endereço. Daí mantém-se "escutando" cada bit de um endereço. Se um dispositivo secundário tem todos os bits de endereço até o momento, ele retorna um "0". O mestre usa este comportamento simples para procurar sistematicamente por sequências válidas de bits de endereços. O processo é muito mais rápido que uma procura por força bruta por todos os possíveis números de 64 bits, pois, assim que um bit inválido é detectado, todos os endereços subsequentes são dados como inválidos. Uma enumeração de 10 ou 15 dispositivos termina muito rapidamente.
A localização dos dispositivos na rede é, por vezes, significativo. Para estas situações, o fabricante tem um dispositivo especia que pode ou passar através do barramento ou desligá-lo. O software pode, desta maneira, explorar o domínio sequencial do barramento."

## Exemplo de comunicação com um dispositivo

Os sinais abaixo foram gerados a partir de um FPGA, no qual o mestre estava em comunicação com uma placa DS2432 EEPROM e um analisador lógico para medir. O sinal alto na saída do 1-Wire quer dizer que a saída do FPGA está no modo trifásico e o dispositivo 1-Wire poderá ir para o nível baixo. Já o nível baixo significa que o FPGA baixou o nível lógico do barramento. A entrada 1-Wire mede o sinal do barramento. Durante a amostragem do sinal alto, o sample na entrada do FPGA é para detectar a resposta e o recebimento dos bits por parte do dispositivo.
Nos microcontroladores PICAXE, o tutorial listado na seção de links abaixo inclui exemplos de programas para comunicação com vários dispositivos 1-Wire da Dallas/Maxim, incluindo o DS18B20, o DS2406, o DS2408, o DS2413, o DS23417, o DS2433, o DS2450, o DS2890 e alguns dispositivos iButton.

## Ferramentas de Desenvolvimento

Quando em desenvolvimento ou resolução de problemas do barramento One-Wire, o exame do sinal do hardware pode ser muito importante. analisadores lógicos e analisadores de barramentos são ferramentas que coletam, analisam, decodificam e armazenam sinais. Então pode-se visualizar as formas de onda e suas leituras.