collapse

* Links de Robótica

* Posts Recentes

Palavras Cruzadas por Hugu
[Ontem às 00:54]


[Projecto] Bomba Airsoft por jm_araujo
[23 de Setembro de 2017, 16:54]


Apresentação por Tech_JA
[23 de Setembro de 2017, 09:19]


Medir Agua que está no Poço por filjoa
[21 de Setembro de 2017, 20:58]


URGENTE - display de 7 segmentos com backpack por helderjsd
[20 de Setembro de 2017, 12:30]


Preços e fabricantes de pcb por Sérgio_Sena
[19 de Setembro de 2017, 10:20]


Isaac Asimov - I, Robot por senso
[18 de Setembro de 2017, 03:41]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]

Autor Tópico: Arduino I2C - PCF8574  (Lida 1932 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: