LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: Kristey em 21 de Dezembro de 2013, 23:24

Título: Arduino I2C - PCF8574
Enviado por: Kristey 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 (http://www.ti.com/lit/ds/symlink/pcf8574.pdf): 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 :/
Título: Re: Arduino I2C - PCF8574
Enviado por: Kristey 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
Título: Re: Arduino I2C - PCF8574
Enviado por: tarquinio 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.
Título: Re: Arduino I2C - PCF8574
Enviado por: Kristey 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:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fmedia.digikey.com%2FPhotos%2FWurth%2520Electronics%2520Photos%2F418117270903.JPG&hash=0ec2be4cc9ffe82dddbbf89cb72cc84fbe9241a3)
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:
(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimageshack.com%2Fscaled%2Flarge%2F819%2Fxl3a.png&hash=d00e9bdded97fc31d6a36aa6c90e93cf3adce2d6)