collapse

* Posts Recentes

O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Arduino I2C - PCF8574  (Lida 4128 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 783
Arduino I2C - PCF8574
« em: 21 de Dezembro de 2013, 23:24 »
Boas.
Estou a construir um projecto em que uso I2C.
Mas estou com um problema.
Depois de ter tudo a funcionar as portas do expansor apenas têm 2.4V (a 1/HIGH/TRUE)
Supostamente e pelo que está no datasheet: Vo Output voltage range: –0.5 VCC + 0.5 V
Ora eu no VCC tenho 4.9V que medi com o voltimetro.

Não percebo... e penso que não será do codigo:

Assim muito rapido isto tem dois toggles que selecionam a entrada P0 e P1, e um triguer (pushbutton), envia o sinal para o expansor.
Código: [Seleccione]
#include <Wire.h>
//Pinos
//int led =  13;
int trigger = 12;
int toggle1 = 2;
int toggle2 = 3;

//Variaveis de mudança
int trigger_state = 0;
int estado1 = 0;
int estado2 = 0;
byte fog = 0;
int adress = 0x20;


void setup (){
  Wire.begin();
  pinMode(toggle1, INPUT);
  pinMode(toggle2, INPUT);
  pinMode(trigger, INPUT);
 // pinMode(led, OUTPUT);
Serial.begin(9600);
}
void loop (){
  estado1=digitalRead(toggle1);
  estado2=digitalRead(toggle2);
Serial.println(estado1);
Serial.println(estado2);
  if (estado1==HIGH){bitWrite(fog, 0, 1);}// mete 1 em P0 byte (00000001)
  if (estado1==LOW) {bitWrite(fog, 0, 0);} // mete 0 em P0 byte(00000000)
  if (estado2==HIGH){bitWrite(fog, 1, 1);}// mete 1 em P1 byte (00000001)
  if (estado2==LOW) {bitWrite(fog, 1, 0);} // mete 0 em P1 byte(00000000)
  trigger_state=digitalRead(trigger);
  if(trigger_state==HIGH){
    //digitalWrite(led, HIGH);
    Wire.beginTransmission(adress);     //Begin the transmission to PCF8574 (0,0,0)
    Wire.write(fog);
    Wire.endTransmission();         //End the Transmission
  }
/*else {  //reset aos bits assim que deixasse de carregar no botão. nao funciona correctamente (CORRIGIR)
Wire.beginTransmission(adress);     //Begin the transmission to PCF8574 (0,0,0)
    fog=0;
    Wire.write(fog);
    Wire.endTransmission();         //End the Transmission
}*/
delay(10);

}

Alguem que me possa dar aqui uma ajuda? porque nao faço a minima ideia do que se passa :/
« Última modificação: 22 de Dezembro de 2013, 01:58 por Kristey »

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 783
Re: Arduino I2C - PCF8574
« Responder #1 em: 22 de Dezembro de 2013, 01:32 »
Baddd pelos vistos funciona, eu tinha la leds ligados para conferir se ele ligava bem os pinos. E isso estava a criar problemas.

Contudo observei outro problema.
Visto que isto é para executar funções quando as portas estao a 1: porta ligada ao gate de um mosfet para abrir um circuito de 12V a 0.5A. O problema agora é que reparei que quando desligo e ligo o cisrcuito, o expansor fica com as portas todas a 1. E isso é um grande problema uma vez que isto quando está a 1 fará a ignição de foguetes.
Alguma ideia?

Sorry o double post

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: Arduino I2C - PCF8574
« Responder #2 em: 22 de Dezembro de 2013, 23:05 »
"At power on, the I/Os are high." Isto tá escrito na datasheet.
Mesmo que fizesses o código de modo a que qdo arrancasse enviasses ordem para desligar as coisas, já se terias passado alguns milissegundos em que as coisas estariam activadas. Se isso é um problema, ou tentas arranjar um expansor que esteja desligado quando arranca, ou tens de mudar o circuito de modo a ser active low. Ou metes uns not's pelo meio ou trocas/acrescentas alguns componentes, isso agora vai depender do que lá tiveres ligado.

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 783
Re: Arduino I2C - PCF8574
« Responder #3 em: 23 de Dezembro de 2013, 01:48 »
Como disse em cima resolvo esse problema com uns mosfets tipo P, fecha o cirtuito com o gate a 0, abre o circuito com o gate a 1.

Agora surgiu-me aqui uma duvida.
Gostava de por isto nos modulos:

Para selecionar o endereço, a questao é que nao basta ligar numa ponta ao VCC e a outra o pino, tenho que usar ali um pull down certo?
Tipo isto: