Boa noite pessoal, estou me formando em Análise e Desenvolvimento de Sistemas e como trabalho de conclusão de curso estou montando uma central que gerencia a energia elétrica de determinados ambientes, o acesso as informações e comando desta central acontecem via webBrowser, estou tendo problema para conseguir fazer funcionar o meu sensor ACS712 junto com meu RPI3. Segui as especificações e fiz a inserção do Conversor Lógico I2C:
o problema acontece quando tento executar o script Python, primeiramente tentei utilizar o código desse tópico aqui mas não obtive sucesso por conta das bibliotecas SPIDEV, após algumas alterações o script rodou entretanto sem capturar nenhum dado do sensor, depois tentei utilizar a porta I2C o que para mim se torna mais cômodo pois a central possui uma tela Touch que utiliza as portas SPI, entretanto também não obtive sucesso ao tentar ler os valores do sensor via I2C Caso algum dos camaradas á tenha passado por isso e queira me ajudar a resolver meu problema serei muito grato. Abraço!
Tags:
Boa noite Leonardo .
Qual programa usou para o diagrama? Gostei !
0) Esta faltando conexão do terra(GND) do Raspberry Pi com o terra(GND) do Protoboard !
1) Faltando a conexão com a tensão 3,3V - vai conectar no Raspberry ?
2) Faltando a conexão com a tensão 5,0V - vai conectar no Raspberry ?
3) GPIO 08 (SPI-CS) - L4/H4 - TLC2543 pino 15 (/CS)
4) GPIO 09 (SPI-MISO) - L2/H2 - TLC2543 pino 17 (Data In) ERRADO
5) GPIO 10 (SPI-MOSI) - L3/H3 - TLC2543 pino 16 (Data Out) ERRADO
6) GPIO 11 (SPI-SCK) - L1/H1 - TLC2543 pino 18 (I/O Clock)
CORRETO É ASSIM :
MOSI = Master (Raspberry) Out / Slave (LTC2543) In
MISO = Master (Raspberry) In / Slave (LTC2543) Out
4) GPIO 09 (SPI-MISO) - L2/H2 - TLC2543 pino 16 (Data Out) CORRETO
5) GPIO 10 (SPI-MOSI) - L3/H3 - TLC2543 pino 17 (Data In) CORRETO
Como já tinha informado
RaspBerry Pi ADC TLC2543
SCLK ----------------- I/O CLOCK PINO 18
MOSI------------------ DATA INPUT PINO 17
MISO----------------- DATA OUT PINO 16
CS -------------------- /CS PINO 15
Boa tarde José Gustavo, tudo bem?
Eu utilizei o CorelDraw x8 para desenhar esse modelo.
Esse é o código python que tentei adaptar a partir do código C que você havia me enviado:
#!/bin/python
from periphery import SPI
import RPi.GPIO as GPIO
import time
import numpy as np
spi = SPI("/dev/spidev1.0", 0, 1000000)
SPI_CLK = 23
SPI_MISO = 21
SPI_MOSI = 19
SPI_CS = 24
chipSelectPin = 7
values[11]=0
ct.c_uint16(value)
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(SPI_MOSI, GPIO.OUT)
GPIO.setup(SPI_MISO, GPIO.IN)
GPIO.setup(SPI_CLK, GPIO.OUT)
GPIO.setup(SPI_CS, GPIO.OUT, initial=GPIO.HIGH)
def loop():
readAdcAll()
for np.uint8(channel) in range(channel, 11):
print ("Channel " + channel + "=" + values[channel] + "\t")
print ("")
time.sleep(500)
def readAdcAll():
ct.c_uint16(value = 0)
for np.uint8(channel) in range(channel, 11):
values[channel - 1] = readAdc(channel)
values[10] = readAdc(0)
def readAdc():
ad
ad_1
GPIO.output(SPI_CS, LOW) # Ativa o chip
time.sleep(10)
ad = spi.transfer((chx 4) | 0x0C)
ad_1 = spi.transfer(0);
GPIO.output(SPI_CS, HIGH)
ad = 8
ad |= ad_1
ad >>= 4
time.sleep(10)
return ad
No código em C ele implementa uma classe uint16_t, tentei através
da classe numpy implementar essa unçãoporém recebo o seguinte retorno:
for np.uint8(channel) in range(channel, 11):
SyntaxError: can't assign to function call
Um outro problema surgiu com o uso das portas SPI, dentro do projeto existe uma tela LCD
que mostrará ao usuário algumas informações, quando ativo as portas SPI minha tela para
de funcionar, a tela tb utiliza as portas SPI. Estava pensando se como estamos utilizando o
conversor lógico se não poderíamos utilizar as portas I2C para a comunicação com o ADC.
Boa tarde Leonardo,
O Diagrama esta correto !
Acho que a alimentação do Raspberry Pi ( 5V e 3,3V ) possa suportar o seu circuito.
Eu não tenho experiência com programação.
Sugiro que faça testes por partes, para identificar o seu problema no Python.
Simplifique ao máximo. Depois que estiver funcionando, poderá implementar uma programação mais adequada. (usando Bibliotecas) .
Favor colocar comentários em cada linha. Ficará mais fácil para entender o programa.
Qual display LCD esta usando? Existe LCD com interface I2C.
(informe as especificações, links, fotos) .
Não dá para usar portas I2C com o ADC . O ADC é SPI.
Não sei qual a taxa de amostragem do ADC pretende usar. Mas se for baixa, pode ser que dê para usar o LCD juntamente com o ADC na interface SPI.
Continuando sobre o ADC TLC2543 :
Envie o seu programa Python para que eu possa conferi-lo.
Estude isso ! Poderá ajuda-lo :
Microcontroller Based Data Acquisition Using the TLC2543
http://www.ti.com/lit/an/slaa012/slaa012.pdf
Clock máximo de 4,1 MHz. Portanto ao usar o protocolo SPI, use a velocidade de 4MHz. Não use 10MHz .
MSB First ! Bit mais significativo primeiro.
O pino EOC significa fim de conversão ( activo HIGH) . Enquanto esta sendo feita a conversão, esse pino esta LOW e não pode ser feita a comunicação SPI para ler os dados. Somente quando estiver HIGH, os dados poderão ser lidos. Isso é importante para sincronizar o ADC com o RPI3.
Essa é a carta de tempo, para a comunicação com o ADC :
Continuando sobre o ADC TLC2543 :
Consulte o Datasheet
O datasheet do seu ADC TLC2543CN é esse (corrigindo)
http://www.ti.com/lit/ds/symlink/tlc2543.pdf
Antes de fazer a leitura, precisará configurar esses registradores . (Write do ADC):
Selecione a entrada do ADC que vai usar . Por exemplo AIN1 = D7(0), D6(0), D5(0), D4(1) .
Para Medir a metade da REF (+2,5V) = D7(1), D6(0), D5(1), D4(1) .
Dados da comunicação - sugiro que use 16 bits D3(1), D2(1). Depois descodifique os 12 bits.
SPI MSB Firts => D1 = 0
Unipolar => D0 = 0
Analisando o programa Python para ADC com interface SPI :
http://www.python-exemplary.com/index_en.php?inhalt_links=navigatio...
O protocolo SPI Serial Peripheral Interface) utiliza um barramento com 5 linhas: GND, SCLK (Relógio), MOSI (Master Out Slave In), MISO (Master In Slave Out) e CS (Chip Select). Os dados são transferidos pelo bit e o tempo é extremamente simples:
Para enviar dados do mestre (normalmente o Raspberry Pi) para um cliente (aqui o chip MCP3008), o mestre ativa o CS (puxando-o para baixo), define o bit (alto ou baixo) para MOSI e envia um pulso de relógio configurando SCLK para alta e pouco depois para baixo.
Para solicitar dados do cliente (com CS habilitado), o mestre envia um pulso de relógio e lê o nível no MISO.
Use o conversor de tensão de 3,3v para 5V
RaspBerry Pi ADC TLC2543
SCLK ----------------- I/O CLOCK PINO 18
MOSI------------------ DATA INPUT PINO 17
MISO----------------- DATA OUT PINO 16
CS -------------------- /CS PINO 15
Esse comando é diferente no LTC2543
# Send command
control = channel # control register
control |= 0b00011000 # Start bit at b4,
# Single-ended bit at b3
# Channel number (b2, b1, b0)
No caso do LTC2543
exemplo
0b00001100 - canal AIN0 , 16 bits, MSB First, Unipolar
Conclusão : os procedimentos são bem diferentes do seu ADC. Terá que criar um programa específico para seu ADC
Boa tarde Leonardo.
Eu faria uma adaptação desse código de Arduino para o Python do Rasp Pi :
https://github.com/volthouse/hardware-firmware-arduino/blob/master/...
https://github.com/volthouse/hardware-firmware-arduino/tree/master/...
Boa noite Leonardo.
Analisando a função principal - ler o dados do conversor ADC
(me corrija, se eu estiver errado)
Envie o arquivo do seu programa ( copiando e colando , pode ser interpretado incorretamente)
def readAdc():
ad # definição de variável
ad_1 # definição de variável
GPIO.output(SPI_CS, LOW) # Ativa o ADC
time.sleep(10) # aguarda 10 segundos ? Ou são milisegundos ?
ad = spi.transfer((chx 4) | 0x0C) # transfere o Byte mais significante ? MSB
ad_1 = spi.transfer(0); # transfere o segundo byte para ad_1
GPIO.output(SPI_CS, HIGH) # desativa o ADC
ad = 8 # ad = 8 ? não entendi. O certo não seria isso ? ad = 8;
ad |= ad_1 # ad bitwise OR ad_1
ad >>= 4 # ad bitshift right 4
time.sleep(10) # aguarda 10 segundos ? Ou são milisegundos ?
return ad # retorna o valor de ad
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por