Boa tarde,
Estou trabalhando em um TCC usando o CI CS5463 para medir o fator de potência e outras grandezas também, minha ideia é desenvolver um controlador de FP que acione bancos de capacitores, mas que seja um projeto aberto que possa ser montado facilmente, tendo em vista que os controladores comerciais são caríssimos.
Já montei o circuito com o CS e agora estou partindo para a comunicação SPI com o Arduino, preciso escrever em alguns registradores do CS e também ler alguns. Já li bastante coisa na internet sobre SPI e estou estudando o exemplo de código que vem na IDE do arduino mas ainda está um pouco difícil de entender a sintaxe do código.
Se alguém puder me dar uma ajuda ou sugerir algum material para eu estudar agradeceria bastante.
Tags:
Boa tarde pessoal,
Estou avançando com o projeto, não estou trabalhando ainda em uma biblioteca, se der tempo vou tentar criar uma, estou me concentrando em fazer funcionar tudo o que pretendo. Gravei um vídeo de como está funcionando, não liguei os capacitores mas já dá pra ter uma ideia.
Coloquei um RTC para criar um log com as leituras, data e hora, gravando um txt em um cartão SD, mas estou tendo problemas para gravar no SD. Quando conecto o módulo as leituras ficam zeradas ou oscilando e não cria o txt.
Criei um segundo arquivo apenas fazendo as leituras e gravando no SD ai funcionou normalmente consegui o log, porém quando junto tudo em um código só dá problema.
Esta é a função que grava no SD:
int grava_log(){
digitalWrite(CS, LOW);
File dataFile = SD.open("Leituras.txt", FILE_WRITE);
if (dataFile){
dataFile.print(Tensao*M_Tensao);
dataFile.print("V ");
dataFile.print(Corrente*M_Corrente);
dataFile.print("A ");
dataFile.print(P_Real*M_P_Real);
dataFile.print("W ");
dataFile.print(FP*M_FP);
dataFile.print(" ");
dataFile.print(rtc.getMonthStr());
dataFile.print(" ");
dataFile.print(rtc.getTimeStr());
dataFile.print(" ");if (b1==1){
dataFile.print("B1 ");
}
else if (b1==0){
dataFile.print(" ");
}if (b2==1){
dataFile.print("B2 ");
}
else if (b2==0){
dataFile.print(" ");
}if (b3==1){
dataFile.println("B3 ");
}
else if (b3==0){
dataFile.println(" ");
}
dataFile.close();
cartao=1;
digitalWrite(CS, HIGH);
}else{
cartao=0;
digitalWrite(CS, HIGH);
}}
Se alguém tiver uma ideia do que pode estar causando esta instabilidade agradeço a ajuda.
https://www.youtube.com/watch?v=r4p3yK-uMcI&feature=youtu.be
Boa tarde Alan, tudo bem?
Você não informou qual o RTC e nem qual display LCD esta usando. Mas analisando o seu Sketch, dá para perceber que esta usando um RTC DS1307 e um Display LCD I2C. Ambos usam a interface I2C e não deveriam interferir no circuito. Não recomendo que use o RTS DS1307 pois esse relógio é bem impreciso.
http://labdegaragem.com/forum/topics/ajuda-rtc-ds1307
Minha sugestão - use um DS3231 :
Esse Data logger é bem interessante !
https://edwardmallon.wordpress.com/2014/10/07/the-diy-data-logger-v...
Já o SD Card usa também a interface SPI. Não use esse cabo extenso para conectar o módulo do SD Card ! Conecte-o diretamente na sua placa principal, pois a comunicação SPI poderá estar sofrendo interferência. E mais , esta usando resistores de pullup na interface SPI ??
http://www.dorkbotpdx.org/blog/paul/better_spi_bus_design_in_3_steps
Fez essas conexões, não é mesmo ?
int PINO_CS = 10; CS5463
int CS = 9; SD Card
Qual modulo SD Card esta usando ?
E mais ! Alimentou o modulo com 3,3V ? A interface SPI do Modulo SD tem que ser convertida para a interface SPI 5V ! Pode usar também um conversor logico .
Olá José, boa noite,
Bom o RTC que estou usando é o modelo TinyRTC com conexão I2C, não prestei atenção na precisão vou verificar e depois posto aqui.
http://www.embarcados.com.br/modulo-tiny-rtc-i2c-parte-1/
Já o gravador na verdade é de MicroSD é um modelo da catalex esse aqui:
http://www.usinainfo.com.br/modulos-para-arduino/sd-card-arduino-le...
Ele já trabalha com 5V, mas eu realmente não coloquei o pullup vou experimentar, e reduzir o cabo também, vou ter que deixar um pedaço de cabo porque estou montando em uma caixa e o módulo fica na tampa da caixa para o usuário colocar o cartão sem abrir.
Legal esse modulo SD Card da Catalex - já possui o chip de conversão de níveis lógicos !
pensamos muito parecidos ...
RTC, datalogger e etc ...
enfim ...
da uma olhada no biblioteca softserial ... vc pode expandir o numero de porta de tx/rx e ter vários shields. Nota: Perderá quantidade de porta disponível.
Boa tarde pessoal, coloquei o resistor de pullup e tirei o cabo longo mas não resolveu nada, quando gravo o código completo e conecto o SD as leituras param. Já quando carrego um código que só faz as leituras e grava no SD (Sem display e RTC) ele cria o arquivo de texto e grava porém os valores estão meio loucos. Pensei em diminuir a quantidade de gravações tipo gravar as leituras a cada 30 segundos por exemplo.
117.62V 4.62A 1876.15W 0.79 x00:00:85 00:00:85
117.62V 98.60A 405.00W 0.02 x00:00:85 00:00:85
75.75V 4.62A 1876.15W 0.02 x00:00:85 00:00:85
75.75V 98.60A 1876.15W 0.02 x00:00:85 00:00:85
117.62V 98.60A 1876.15W 0.79 x00:00:85 00:00:85
75.75V 98.60A 1876.15W 0.02 x00:00:85 00:00:85
75.75V 98.60A 405.00W 0.02 x00:00:85 00:00:85
75.75V 98.60A 1876.15W 0.79 x00:00:85 00:00:85
117.62V 4.62A 1876.15W 0.79 x00:00:85 00:00:85
117.62V 4.62A 1876.15W 0.79 x00:00:85 00:00:85
117.62V 98.60A 405.00W 0.02 x00:00:85 00:00:85
75.75V 98.60A 405.00W 0.02 x00:00:85 00:00:85
117.62V 98.60A 1876.15W 0.02 x00:00:85 00:00:85
117.62V 98.60A 405.00W 0.02 x00:00:85 00:00:85
75.75V 98.60A 1876.15W 0.02 x00:00:85 00:00:85
75.75V 4.62A 1876.15W 0.02 x00:00:85 00:00:85
117.62V 98.60A 405.00W 0.02 x00:00:85 00:00:85
75.75V 98.60A 405.00W 0.79 x00:00:85 00:00:85
Obs.: Observei o RTC e parece ser razoavelmente preciso, eu acertei ele no sábado pela manhã e agora segunda a tarde não atrasou nem um minuto, os segundos eu não tinha acertado tão precisamente então não posso falar.
" quando gravo o código completo e conecto o SD as leituras param"
Isso quer dizer que o SD Card esta inferindo, não é ?
Meça o pino CS do SD Card, para ter certeza que ele não esta ativando o SPI Bus (barramento)
Será que o conversor de sinal lógico esta interferindo ? Tem osciloscópio , meça os pinos SPI.
Essa semana foi corrida, só consegui ver hj, fiz algumas leituras com o osciloscópio nos pinos SPI o CS parece que está normal, não há sobreposição da onda, ou seja, só um slave está ativando por vez, nas imagens a onda verde é o gravador SD e a amarela o CS5463 mas ainda não está funcionando não cria o arquivo txt.
Passei o dia tentando hoje fazer funcionar, consegui evoluir um pouco.
1º Mudei um pouco o código, passei a colocar o controle o pino CS do gravador na própria função que inicia o SD;
int CS = 9;
.
.
.
SD.begin(CS);
2º Diminui a quantidade de gravações para uma a cada 10 segundos;
tempoatual1 = millis();
if((tempoatual1-temposalvo1)>=10000){
grava_log();
}
Descobri que é o display que está influenciando, carreguei o mesmo código, sem o display estar conectado consegui gravar o txt com as leituras corretas:
112.18V 5.56A 533.08W 0.90 September 19:12:03
112.21V 5.57A 533.08W 0.90 September 19:12:13
111.84V 5.54A 529.62W 0.90 September 19:12:23
112.11V 5.56A 533.08W 0.90 September 19:12:33
111.82V 5.55A 529.62W 0.90 September 19:12:43
Já quando conecto o display as leituras ficam completamente bagunçadas:
139.48V 156.36A -8653.84W -0.15 September 19:16:29
151.49V 166.92A 20547.69W 0.90 September 19:16:39
150.31V 123.76A 10813.84W 0.90 September 19:16:49
151.97V 167.28A -5406.92W 0.90 September 19:16:59
138.85V 82.46A 34611.92W 0.90 September 19:17:09
Vou conferir a ligação, pra ver se tem algum curto ou ligação errada mas acho que não, o modelo que estou usando é o QC2004A com módulo I2C.
Bom dia Alan, boas evoluções no projeto !
Meça a tensão 5V , pois pode ser que com o display ativo haja uma queda de tensão.
Pois o display usa a interface I2C e não deveria atrapalhar a interface SPI.
Perai !!! Estava revendo as formas de onda e acho que tem algo errado na forma de onda SDO com o cartão SD conectado ! Veja que o sinal esta com nível lógico muito baixo !
Por que isso ? Tem algo errado ai !
Putz, tá errado mesmo ! Quando liga o display , o VCC do CS5463 vai baixar e ele vai ficar doidão ! Qual é o valor desse resistor ? 10 ohms ?
E os pinos estão trocados também ! O 14 com o 3 !
VA+ pino 14
VD+ pino 3
A tensão de alimentação analógica ( VA+) tem que ser maior que a tensão de alimentação Digital (VD+). Esta assim no Datasheet. Não sei porque.
Mas faça assim !
Depois que corrigir os erros, meça com o scope o pino SDO novamente.
Ele esta com sinal incompatível !
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por