Ir ao conteúdo
  • Cadastre-se

Compatibilidade de tensão em módulo RTC


Posts recomendados

Pessoal, estou precisando ligar um relógio de tempo real com DS1307 a um dispositivo em que a comunicação (SDA e SCL) não opera em 5V como o DS1307. Este dispositivo controlador tem a comunicação limitada a 3,3V. Vi em alguns lugares em que ligaram esses módulos prontos (como este que eu tenho) mesmo assim, porém retiraram os resistores que ligam o bus I2C ao 5Vcc. Também vi outros lugares em que ligaram esse módulo do DS1307 diretamente, sem mexer em nada.

Vi a remoção dos resistores aqui: https://learn.adafruit.com/adding-a-real-time-clock-to-beaglebone-black/wiring-the-rtc

 

Pergunta: Existe uma maneira segura de usar esse módulo conectado a esse dispositivo de tensão menor?

Nesse meu modelo de módulo DS1307 vai ficar complicado remover os resistores SMD...

 

OBS.: Desculpe se a pergunta não for compatível com esta sessão do forum, mas pelo menos aqui o pessoal sabe bem sobre o assunto.

Link para o comentário
Compartilhar em outros sites

Os resistores de pull-up devem estar ligados ao 3,3V, daí basta você assegurar que o dispositivo de maior tensão reconhece o 3,3V como nível alto (ver no datasheet).

 

Isso pode ser feito pois nenhum dos dispositivos I2C coloca a linha em nível alto, o que eles fazem é deixar a linha flutuar assim os pull-up puxam a linha para o estado alto (open-drain). Por esse mesmo motivo o barramento I2C pode ser usado com vários mestres (multimestre) pois não haverá curto-circuito.

 

53 minutos atrás, wBB disse:

[...] mesmo assim, porém retiraram os resistores que ligam o bus I2C ao 5Vcc. [...]

Provavelmente ele retirou o resistor do módulo e adicionou resistores de pull-up externos conectados ao 3,3V.

 

53 minutos atrás, wBB disse:

Também vi outros lugares em que ligaram esse módulo do DS1307 diretamente, sem mexer em nada.

Neste caso suspeito que eles alimentaram o módulo com 3,3V. Porém o DS1307 espera um VCC de 4,5V no mínimo.

 

De qualquer forma, o mais correto é mudar a tensão dos pull-ups... Essa é uma característica da I2C, fácil comunicação entre dispositivos com tensões de alimentação diferentes.

 

54 minutos atrás, wBB disse:

[...]Nesse meu modelo de módulo DS1307 vai ficar complicado remover os resistores SMD.

 

Pegue o ferro de solda coloque o pouco de estanho e empurre que eles sairão tranquilo HEHE :)

Link para o comentário
Compartilhar em outros sites

Citação

Pegue o ferro de solda coloque o pouco de estanho e empurre que eles sairão tranquilo 

hehehe... boa @test man*~  é que eu acho muito gambiarra fazer isso numa placa tão arrumadinha... se fosse uma coisa para mim eu faria sem dó. Mas também entendo que essas coisas são necessárias algumas vezes. Eu não conhecia "conversor de nível lógico para I2C", acabei recebendo essa sugestão de outra pessoa um pouco antes e é bem barato também. Acho que vou comprar um para testar.

 

@_xyko_ eu já tinha verificado o datasheet, mas minha preocupação não é com o DS1309, mas sim danificar o outro lado, ou seja, o dispositivo que trabalha com a tensão menor (que também não é meu!). Apenas por esse motivo eu ainda não tinha removido os resistores e resolvi perguntar antes.

 

Obrigado pessoal!

  • Haha 1
Link para o comentário
Compartilhar em outros sites

8 horas atrás, wBB disse:

hehehe... boa @test man*~  é que eu acho muito gambiarra fazer isso numa placa tão arrumadinha... se fosse uma coisa para mim eu faria sem dó. Mas também entendo que essas coisas são necessárias algumas vezes. Eu não conhecia "conversor de nível lógico para I2C", acabei recebendo essa sugestão de outra pessoa um pouco antes e é bem barato também. Acho que vou comprar um para testar.

 

HEHE :) os conversores de nível que você está falando deve ser algo deste tipo (ou similar) ele funcionará mesmo, porém eu ainda preferiria colocar os pull-up com os 3V3... Mas não é seu e você quer que fique bonito, ai é melhor usar o conversor mesmo.

Link para o comentário
Compartilhar em outros sites

a coisa é triste mesmo... se não judiar da gente não tem graça!

Comprei o conversor de nível lógico de 3,3V => 5V e liguei o RTC, mas não consigo comunicar com ele. Nem sequer dá sinal de vida.... Se alguém tiver alguma sugestão de teste seria muito útil.

Link para o comentário
Compartilhar em outros sites

O esquema que montei não é exatamente esse, pois estou usando Beaglebone Black e não Arduino. Mas as conexões que fiz não as mesmas. 

Quanto ao LED, o módulo RTC que comprei não tem. É esse aqui:

http://www.filipeflop.com/pd-6b854-real-time-clock-rtc-ds1307.html

 

Já o conversor de nível lógico é esse aqui:

http://produto.mercadolivre.com.br/MLB-743757414-conversor-nivel-logico-i2c-lic-533v-4ch-bi-engineerstore-_JM

 

O que estou achando estranho é que conectei esse módulo a um microcontrolador PIC que eu estava usando há pouco tempo, onde eu já estava trabalhando também com RTC DS1307, só que não o módulo, e sim o chip diretamente no protoboard. Esse programa (com PIC) funciona perfeitamente com o DS1307 no protoboard, mas também não está funcionando com o módulo.

OBS.: Neste caso eu conectei o módulo RTC diretamente ao PIC no protoboard, pois não há necessidade de conversor de nível lógico.:atirador:

Link para o comentário
Compartilhar em outros sites

Não sei se isso é o que está causando problema. O módulo está com bateria? Esses módulos vem com um circuito para recarregar a bateria (LIR2032) porém esse circuito é de uma qualidade muito duvidosa... Assim várias pessoas (e eu também) o removem... Olhe esta imagem repare que ele remove o diodo e os resistores.

 

Olha o que eu fiz (também tinha dó pois achava os módulos bonitinho =D, até que eu ví alguns vídeo do GratScott!): Antes, depois.

 

Agora, talvez nem é isso... Estranho não funcionar.

 

Link para o comentário
Compartilhar em outros sites

Sim, meu módulo está com bateria. Se eu não conseguir ir adiante vou apelar para esse recurso que você usou também. É que agora eu consegui detectar o módulo RTC via Beaglebone, pois recebi um auxilio de um pessoal que mexe só com Beaglebone. Não estava detectando o módulo por causa de configuração.

 

Mesmo assim acho muito estranho eu não conseguir comunicar com esse módulo via microcontrolador. Acredito que o sistema de bateria deve estar bom, pois alimentei o circuito via PicKIT, que tem uma capacidade de carga muito baixa e imagino que acusaria sobrecarga (imagino.. sei lá!), pois já ocorreu comigo em outras situações com leds demais ligados ao circuito.

 

Mesmo assim obrigado pela atenção. Vou continuar aqui com processo e reporto quando funcionar.

Valeu!!!

Link para o comentário
Compartilhar em outros sites

Apenas reportando a solução, caso alguém se depare com o mesmo problema:

 

1) Para ligar o Beaglebone ao módulo RTC, os quais trabalham com níveis diferentes de tensão, utilizei um "conversor de nível lógico bidirecional 3.3V => 5V" (podem ser o módulo e as conexões que o test man*~ indicou);

 

2) Acertar a data, hora e o timezone do sistema, que no meu caso é o Debian, pode variar de um caso para outro. Aqui foi o que segue, mas se reiniciar o sistema isso não manterá os valores corretos (precisa automatizar o processo):

timezone:        
root@beaglebone:~# dpkg-reconfigure tzdata

data e hora:     
root@beaglebone:~# ntpdate -u 200.20.186.75

3) Já conectado o dispositivo I2C no Beaglebone, identificar o endereço deste no bus I2C:
IMPORTANTE: Para versões mais recentes do Debian o final do comando é "2". Em outras menores que a versão 8, o final do comando é "1":

root@beaglebone:/# i2cdetect -y -r 2

Mostrará algo parecido com isso:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- UU UU UU UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

4) Este número "68" (que está em hexadecimal) é o endereço do dispositivo RTC. Setar o novo dispositivo:

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-2/new_device

IMPORTANTE: Nas versões do Debian onde o comando do item 3 for de final "1", o comando do item 4 deverá ter a parte "/i2c-2/" alterada para "/i2c-1".

 

5) Confirmar como o dispositivo foi identificado no sistema:

root@beaglebone:~# ls -la /dev/rtc*

Vai mostrar algo parecido com isso:

lrwxrwxrwx 1 root root      4 May 21  2016 /dev/rtc -> rtc0
crw------- 1 root root 254, 0 May 21  2016 /dev/rtc0

Neste caso foi identificado como "rtc0".

 

6) Fazendo a escrita do novo valor de data e hora do sistema no novo dispositivo (rtc0 ou rtcX, conforme o caso do item anterior):

root@beaglebone:~# hwclock -w -f /dev/rtc0

7) Pronto. O RTC está atualizado e basta ler o valor de data e hora setado nele:

root@beaglebone:~# hwclock -r -f /dev/rtc0

Um obrigado ao @_xyko_ e principalmente ao @test man*~ pela ajuda novamente!

Link para o comentário
Compartilhar em outros sites

  • mês depois...
59 minutos atrás, Isadora Ferraz disse:

penso que podem conflitar. Uma saída (literalmente) teórica e conceitual é +1 pino de seleção seja pra multiplex (analógico) ou CS (chip select) dos periféricos.

Grande Isa. 

Pois é. Até vi alguns circuitos de adaptação, mas preferi investir em um hardware com i2c e spi em portas separadas

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...