Need help with PCF8574

Discussion specific to the intelligent brick, sensors, motors, and more.
brandts
Posts: 5
Joined: 16 May 2011, 10:19

Need help with PCF8574

Post by brandts »

Hi everyone,

I'm trying to control 8 leds using a PCF8574 according to the scheme as seen in the attachment (from the book NXT Extreme).
The problem is that I can't control the leds. If I connect the PCF to the NXT only 4 leds are turned on continously (the leds connected to P0, P1, P2 and P3) and the other 4 leds are all off. I tried multiple software programs like NXT-G or NXC but I can't switch any leds on or off. It also doesn't matter which port I use (sensor port 1 to 4 or motor port A, B, or C) while I only programmed to control the PCF by sensor port 1.

Can anyone tell me what I'm doing wrong?

Greetings,
Brandts
Attachments
pcf8574 8 out.jpg
h-g-t
Posts: 552
Joined: 07 Jan 2011, 08:59
Location: Albania

Re: Need help with PCF8574

Post by h-g-t »

Are you wiring it up using discrete parts or using a ready-made board?
If using a commercial board, have you set the jumpers to enable the pull-up resistors?
Have you used the nbc program in the book?
A sophistical rhetorician, inebriated with the exuberance of his own verbosity, and gifted with an egotistical imagination that can at all times command an interminable and inconsistent series of arguments to malign an opponent and to glorify himself.
brandts
Posts: 5
Joined: 16 May 2011, 10:19

Re: Need help with PCF8574

Post by brandts »

I use discrete parts. I bought a PCF8574AP fabricated by NXP: http://www.nxp.com/documents/data_sheet/PCF8574.pdf and got some leds, wires and resistors from my work. I soldered it all together on a standard solder board (similar like: http://itp.nyu.edu/physcomp/Tutorials/S ... APerfBoard).

I have no idea what you mean setting the jumpers to enable. Could you explain that a bit further?

I tried the program from the book (which I believe is NXC instead of NBC) and also tried the NXT-G software which I downloaded from www.mindsensors.com
h-g-t
Posts: 552
Joined: 07 Jan 2011, 08:59
Location: Albania

Re: Need help with PCF8574

Post by h-g-t »

Mini boards like this http://www.futurlec.com/Mini_PCF8574.shtml Image have jumpers which enable you to add in various resistors but that is not relevant in your case.

The program in the (excellent) book is definitely nbc (see below) - if you used that did you compile it with the Bricx Command Center?

Code: Select all

#include "NXTDefs.h"
#define I2CPort IN_1
#define I2CAddress 0x40
// 0x40 for PCF8574 or 0x70 for PCF8574A
dseg    segment
lswArgs TCommLSWrite        // Write structure
lscsArgs TCommLSCheckStatus // Status structure
Value byte
dseg ends
thread main
// Initialize variables
mov lswArgs.Port, I2CPort
mov lscsArgs.Port, I2CPort
// Initialize input port to I2C
SetSensorType(I2CPort,IN_TYPE_LOWSPEED)
SetSensorMode(I2CPort,IN_MODE_RAW)
ResetSensor(I2CPort)
Loop:  // Top of loop
// Build buffer and write port
arrbuild lswArgs.Buffer, I2CAddress, Value
set lswArgs.ReturnLen, 0 // Read back 0 bytes
syscall CommLSWrite, lswArgs
Wait: // Wait till done
syscall CommLSCheckStatus, lscsArgs
brtst GT, Wait, lscsArgs.Result
// Increment
add Value, Value, 1
// Start over
jmp Loop
endt
A sophistical rhetorician, inebriated with the exuberance of his own verbosity, and gifted with an egotistical imagination that can at all times command an interminable and inconsistent series of arguments to malign an opponent and to glorify himself.
brandts
Posts: 5
Joined: 16 May 2011, 10:19

Re: Need help with PCF8574

Post by brandts »

The book I used is "Extreme NXT: Extending the LEGO MINDSTORMS NXT to the Next Level".

The program I used looks like this:

Code: Select all

#define I2Cport S1 // Port number
#define I2CAddr8574 0x70 // I2C address x040 8574 or 0x70 for 8574A
byte WriteBuf[]={I2CAddr8574,0x00}; // write buffer is addr and data
task main() {
int nbytes;
SetSensorLowspeed (I2Cport); // Configure I2C port
while (true) {
WriteBuf[1]++; // update data byte
I2CWrite(I2Cport, 0, WriteBuf); // send buffer
while(I2CStatus(I2Cport, nbytes)==STAT_COMM_PENDING); // wait
}
}
The compiler I use is indeed Bricx Command Center. I believe I've read somewhere on a forum that I had to be sure to use firmware 1.05 so I tried the program on 1.05 and also on the latest firmware but nothing changes. I also tried both adresses (0x40 and 0x70) but also that won't help.
philoo
Posts: 76
Joined: 29 Sep 2010, 09:04
Location: Paris, France
Contact:

Re: Need help with PCF8574

Post by philoo »

I'm dry... what bothers me most is the 4 LEDs continuously on. Are you sure your IC is not fried?
As for the NBC/NXC discussion, first edition of Extreme NXTused NBC as NXC was not yet available. But sample code were rewritten into (more palatable) NXC for the second edition.
Philo
brandts
Posts: 5
Joined: 16 May 2011, 10:19

Re: Need help with PCF8574

Post by brandts »

In not sure that the IC is fried. Is it possible that I damaged something inside the chip with soldering the contacts? Is there a way to measure this with a multimeter?

I have the second edition of Extreme NXT so that indeed explains why the sample code is different.
philoo
Posts: 76
Joined: 29 Sep 2010, 09:04
Location: Paris, France
Contact:

Re: Need help with PCF8574

Post by philoo »

brandts wrote:In not sure that the IC is fried. Is it possible that I damaged something inside the chip with soldering the contacts?
That can happen, but it's quite rare. Stupid question: are you sure the IC is not upside down?
Is there a way to measure this with a multimeter?
Not really...
Philo
h-g-t
Posts: 552
Joined: 07 Jan 2011, 08:59
Location: Albania

Re: Need help with PCF8574

Post by h-g-t »

Have you tried changing the port address in case you have bought an 'A' model chip?

"#define I2CAddr8574 0x70 // I2C address x040 8574 or 0x70 for 8574A"

If you tried it in a motor port it is possible that the extra voltage available (9v cf ~ 4.5v) has damaged your chip since it operates between 2.5 & 6v.
A sophistical rhetorician, inebriated with the exuberance of his own verbosity, and gifted with an egotistical imagination that can at all times command an interminable and inconsistent series of arguments to malign an opponent and to glorify himself.
mattallen37
Posts: 1818
Joined: 02 Oct 2010, 02:19
Location: Michigan USA
Contact:

Re: Need help with PCF8574

Post by mattallen37 »

I used to use the PCF8574 for all sorts of things. Here is an old program of mine (modified to not require my library). I know it works, as I just tested it.

Code: Select all

#define Port    S1
#define Address 0x40

void WritePins(byte port, byte addr, byte input){

  byte I2CMsg[];
  //byte Command = ~input;           //with enhanced FW
  byte Command = input*(-1)+255;   //with standard FW
  byte nByteReady = 0;
  int loop;

  ArrayBuild(I2CMsg,addr,Command);

  while (loop == STAT_COMM_PENDING) {
    loop = I2CStatus(port, nByteReady);
  }

  I2CWrite(port, 1, I2CMsg);

  while (loop == STAT_COMM_PENDING) {
    loop = I2CStatus(port, nByteReady);
  }
}

int LEDtoDrive;
bool LR;
task main()
{
  SetSensorLowspeed(Port);
  LR=1;
  LEDtoDrive=1;
  while (true)
  {
    WritePins(Port, Address, LEDtoDrive);
    if (LR==1)
    {
      LEDtoDrive=LEDtoDrive*2;
      if (LEDtoDrive>128)
      {
        LEDtoDrive=128;
        LR=0;
      }
    }
    if (LR==0)
    {
      LEDtoDrive=LEDtoDrive/2;
      if (LEDtoDrive==1)
      {
        LR=1;
      }
    }
    
    ClearScreen();
    NumOut(0,LCD_LINE1,LEDtoDrive);

    Wait (30); //Slow down a little, but must be at least 7ms
  }
}
At the top, set the port and address.
Matt
http://mattallen37.wordpress.com/

I'm all for gun control... that's why I use both hands when shooting ;)
Post Reply

Who is online

Users browsing this forum: Ahrefs [Bot] and 1 guest