Author Topic: MAX6959 nACK on address?!  (Read 2472 times)

0 Members and 1 Guest are viewing this topic.

Offline MrAureliusRTopic starter

  • Supporter
  • ****
  • Posts: 373
  • Country: ca
MAX6959 nACK on address?!
« on: October 16, 2015, 04:40:20 am »
Hey everyone.

I'm using a dreaded Arduino Nano (dreaded to me, at least) to do a quick prototype of these new 7-seg display chips I got. I've used I2C a LOT, and am really comfortable debugging and coding with it.

However, for some reason the MAX6959s are not acknowledging the address. I hooked up my ChronoVu to see what was going on, and this is what I see (the reason it sends 0x70 twice is because it's jumping to the second routine after the first fails):



As you can see, it's nACKing on both addresses. I've double and triple-checked the datasheet. They release the chip in two variants, with different I2C addresses. I've got the A version, which has a 7-bit address of 0x38, when shifted it becomes 0x70 as seen. The B version is 0x39, which I also tried out of exasperation. I feel like I'm missing something, but everything seems to check out. Solid 5V on the bus, 4k7 pullups, running at 100kHz which is fine for this chip. If the logic analyzer can decode it, there shouldn't be any reason that the chip can't. I've got 3 chips, and I've swapped them out to double check.

Here's a link to the datasheet: http://datasheets.maximintegrated.com/en/ds/MAX6958-MAX6959.pdf
Perhaps I'm missing something obvious. But, in my experience, it should ack the address if it's correct. If my bus pirate were running, I'd do an address scan and see what it says, but it's a little screwed up after I tripped over the USB cord it was connected to and it almost ripped the whole USB connector off... *sigh*

Anyway, any and all help is appreciated. Especially if you've used these chips before!
--------------------------------------
Canadian hacker
 

Offline uChip

  • Contributor
  • Posts: 35
  • Country: us
Re: MAX6959 nACK on address?!
« Reply #1 on: October 16, 2015, 04:10:43 pm »
Unless the MAX6959 is just dead, the mostly likely error is still the address (assuming signals measured at the MAX6959 are good).  Documentation can be confused or just wrong.  Use the I2C scanner application from the Arduino.cc playground (One of Nick Gammon's little gems).  The scanner will try all possible addresses and tell you what it found.
Good luck,
  - Chip

PS. If you get nothing at the top speed, try dropping to a lower one.

Code: [Select]
// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011

#include <Wire.h>

void setup() {
  Serial.begin(115200);

  // Leonardo: wait for serial port to connect
//  while (!Serial)
//    {
//    }
delay(5000);

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
 
  Wire.begin();
  TWBR = 12;  // 400 kHz (maximum)
  //TWBR = 32;  // 200 kHz
  //TWBR = 72;  // 100 kHz (default)
  //TWBR = 152;  // 50 kHz
  //TWBR = 78;  // 25 kHz
  //TWSR |= _BV (TWPS0);  // change prescaler
  //TWBR = 158;  // 12.5 kHz
  //TWSR |= _BV (TWPS0);  // change prescaler

  for (byte i = 1; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {
Serial.println ("Loop.");
delay(20000);
}
« Last Edit: October 16, 2015, 04:13:05 pm by uChip »
 

Offline MrAureliusRTopic starter

  • Supporter
  • ****
  • Posts: 373
  • Country: ca
Re: MAX6959 nACK on address?!
« Reply #2 on: October 17, 2015, 12:35:01 am »
I did an I2C address scan with my BeagleBoneBlack, and it can detect other I2C devices I have, but not those chips. I'll keep troubleshooting. It could be the breadboard it's on, or something.

Unless the MAX6959 is just dead, the mostly likely error is still the address (assuming signals measured at the MAX6959 are good).  Documentation can be confused or just wrong.  Use the I2C scanner application from the Arduino.cc playground (One of Nick Gammon's little gems).  The scanner will try all possible addresses and tell you what it found.
Good luck,
  - Chip

PS. If you get nothing at the top speed, try dropping to a lower one.

Code: [Select]
// I2C Scanner
// Written by Nick Gammon
// Date: 20th April 2011

#include <Wire.h>

void setup() {
  Serial.begin(115200);

  // Leonardo: wait for serial port to connect
//  while (!Serial)
//    {
//    }
delay(5000);

  Serial.println ();
  Serial.println ("I2C scanner. Scanning ...");
  byte count = 0;
 
  Wire.begin();
  TWBR = 12;  // 400 kHz (maximum)
  //TWBR = 32;  // 200 kHz
  //TWBR = 72;  // 100 kHz (default)
  //TWBR = 152;  // 50 kHz
  //TWBR = 78;  // 25 kHz
  //TWSR |= _BV (TWPS0);  // change prescaler
  //TWBR = 158;  // 12.5 kHz
  //TWSR |= _BV (TWPS0);  // change prescaler

  for (byte i = 1; i < 120; i++)
  {
    Wire.beginTransmission (i);
    if (Wire.endTransmission () == 0)
      {
      Serial.print ("Found address: ");
      Serial.print (i, DEC);
      Serial.print (" (0x");
      Serial.print (i, HEX);
      Serial.println (")");
      count++;
      delay (1);  // maybe unneeded?
      } // end of good response
  } // end of for loop
  Serial.println ("Done.");
  Serial.print ("Found ");
  Serial.print (count, DEC);
  Serial.println (" device(s).");
}  // end of setup

void loop() {
Serial.println ("Loop.");
delay(20000);
}
--------------------------------------
Canadian hacker
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf