Pages: [1]   Go Down
Author Topic: Arduino + max6957  (Read 622 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour a tous.

J'ouvre ce post car je me retrouve coincé avec le max6957 de chez maxim.
Celui-ci communique avec l'Arduino (Stickduino dans mon cas) via le protocole SPI.
J'ai beau revérifier mon câblage, puis mon code. Je n'ai pas encore réussit a allumer une seule led.

Si quelqu'un a déja mit en place un max6957, je me sentirais moins seul smiley. Mes recherches sur les moteurs de recherche n'aboutissent pas.

Je post mon code si quelqu'un voit une erreur.
Merci d'avance.

Code:
int Clock = 0;
int Latch = 1;
int Data = 2;

void max6957_init() {
  max6957_send(0x09,0x55); // Conf port 0x09 0x55 Spec PDIP (cf page5)
  max6957_send(0x0A,0x55); // Conf port 0x0A 0x55 Spec PDIP (cf page5)
  max6957_send(0x0B,0x00); // Conf port 0x0B 0x00 Led driver (cf page2 Table2)
  max6957_send(0x0C,0x00); // Conf port 0x0C 0x00 Led driver (cf page2 Table2)
  max6957_send(0x0D,0x00); // Conf port 0x0D 0x00 Led driver (cf page2 Table2)
  max6957_send(0x0E,0x00); // Conf port 0x0E 0x00 Led driver (cf page2 Table2)
  max6957_send(0x0F,0x00); // Conf port 0x0F 0x00 Led driver (cf page2 Table2)
  max6957_send(0x02,0x0F); // Global current 0x02 0x0F 16/16(24ma)
  max6957_send(0x04,0x01); // Conf Regsiter Shutdown 0x04 0x01 Normal operation
}

void max6957_send(int m, int n) {
  digitalWrite(Latch, LOW);
      fct_shift(Data, Clock, MSBFIRST, (m)); // 8bits command (cf page9)
      fct_shift(Data, Clock, MSBFIRST, (n)); // 8bits data (cf page9)
    Serial.println();
  digitalWrite(Latch, HIGH);
}

//Fonction récupéré du fichier wiring_shift.c pour le debug
void fct_shift(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val)
{
  int i;

  for (i = 0; i < 8; i++)  {
    if (bitOrder == LSBFIRST) {
      digitalWrite(dataPin, !!(val & (1 << i)));
      Serial.print(!!(val & (1 << i)));
      }
    else  {
      digitalWrite(dataPin, !!(val & (1 << (7 - i))));
      Serial.print(!!(val & (1 << (7 - i))));
      }
  digitalWrite(clockPin, HIGH);
  digitalWrite(clockPin, LOW);            
  }
}

void setup() {
  Serial.begin(9600);
  pinMode(Clock, OUTPUT);
  pinMode(Latch, OUTPUT);
  pinMode(Data,  OUTPUT);
  digitalWrite(Clock, LOW);
  digitalWrite(Latch, LOW);
  digitalWrite(Data,  LOW);
  max6957_init();
}

void loop() {
  //Port 4 a 11 inexistant en vesion PDIP
  max6957_send(0x2C,0x01); // Port 12 a 1 (cf page12 table3)
  delay(1500);
  max6957_send(0x2C,0x00);
  delay(1500);
}
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 45
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour.
Je remonte ce post histoire de donner des nouvelles après avoir remit la main sur mon prototype ce matin.
Mon code ci-dessus est bien valide, le problème venait de plus haut, coté Stickduino, la pin digital 0 ne voulait apparemment rien savoir.
Après être passer sur la série 4/5/6, la led sur la pin 5 (port 12) s'allume bien, et vice-versa avec 0/1/2.
Que du bonheur en somme smiley.
Bonne journée.
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je suis pas sûr de comprendre : le bus SPI utilise des ports précis normalement, non ? donc comme digital 0 est dédié à la liaison série, il ne peut pas aussi être associé au SPI, si ? SPI, ce sont les pattes MISO, MOSI et SCK non ?
Logged

Pages: [1]   Go Up
Jump to: