collapse

* Links de Robótica

* Posts Recentes

Feira de electricidade e eletrónica por artur36
[Ontem às 23:07]


Power_OK Enermax por almamater
[Ontem às 12:10]


Recomendação de um opamp para um DAC r2r por jm_araujo
[23 de Novembro de 2017, 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]

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

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

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 753
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: 753
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: 753
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: