Αναπτυξιακή πλακέτα με τον ΜΑΧ7221 ή ΜΑΧ7219

Έχουμε σχεδιάσει μια PCB αναπτυξιακή πλακέτα, διπλής όψης, διαστάσεων 17cmΧ6cm η οποία έχει βάση για τον οδηγό ΜΑΧ7219 ή τον ΜΑΧ7221 (είναι η ίδια πλακέτα και για τους δύο οδηγούς). Πάνω στην πλακέτα συνκολούνται οχτώ ψηφία 0,56 inches κοινής καθόδου, ένα τροφοδοτικό 5V βασισμένο στο ολοκληρωμένο κύκλωμα LT1076-5 και μερικά ακόμη παθητικά εξαρτήματα και συγκεκριμένα την δίοδο schottky, την αυτεπαγωγή τους πυκνωτές τις αντιστάσεις και τον DC κονέκτορα.

Το PCB της κατασκευής μας δείχνεται παρακάτω:

Το σχηματικό της πλακέτας δείχνεται παρακάτω:

Τα εξαρτήματα που χρησιμοποιούνται είναι τα εξής:

R1…………1,5K 1/4W
R2………….10K 1/4W
C1………….1000μF/25V
C2………….220nF
C3………….33nF
C4………….220nF
C5………….2200μF/16V
D1………….1N5818 schottky
L1………….100μH
IC1…………MAX7221
IC2…………LT1076-5
DIS0…DIS7 7segment 0,56in led display
J1………….DC connector

Πως το ΜΑΧ7221 δέχεται εντολές από το Arduino board

Σε αυτό το παράδειγμα συνδέουμε την πλακέτα Arduino board με την αναπτυξιακή πλακέτα με το ΜΑΧ7221 που παρουσιάσαμε νωρίτερα. Συνδέουμε τα πινς της αναπτυξιακής πλακέτας GND, CS, CLK, DIN με τα αντίστοιχα πινς GND, SS, SCK, MOSI της πλακέτας Arduino board.

Πριν τροφοδοτήσουμε με τάση τις πλακέτες ανεβάζουμε τον ακόλουθο κώδικα στο Arduino Uno.

#include <SPI.h>
#define SS 10

void max7221transfer(byte address, byte value){
  digitalWrite(SS, LOW);
  SPI.transfer(address);
  SPI.transfer(value);
  digitalWrite(SS, HIGH);
  delay(1);
}

void setup() {
  SPI.begin();
  pinMode(SS, OUTPUT);
  digitalWrite(SS, HIGH);
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  max7221transfer(0x0F, 0x01);  //Display – Test Register Format: Display test Mode
  delay(500);
  max7221transfer(0x0F, 0x00);
  max7221transfer(0x0C, 0x01); //Shutdown Register Format: Normal Operation
  max7221transfer(0x0A, 0x0A);  //Intensity Register
  max7221transfer(0x09, 0xFF); //Decode – Mode Register Format: Decode for digits 7-0
  max7221transfer(0x0B, 0x07);  // Scan – Limit Register Format: Display digits 01234567
  for(byte j=0; j<=9; j++){ 
      for(byte i=1; i<=8; i++) max7221transfer(i,j); 
      delay(500);
	  }
  max7221transfer(0x09, 0x0F);  //Decode – Mode Register Format: Decode for digits 3-0
  max7221transfer(0x01, 0x09);  //Digit 0 as number 9
  max7221transfer(0x02, 0x01);  //Digit 1 as number 1
  max7221transfer(0x03, 0x00);  //Digit 2 as number 0  
  max7221transfer(0x04, 0x02);  //Digit 3 as number 2 
  max7221transfer(0x05, 0B01001110); //Digit 4 as letter C
  max7221transfer(0x0B, 0x04);  // Scan – Limit Register Format: Display digits 01234
  
}

void loop() {
}

Σε αυτό τον κώδικα εισάγουμε στην αρχή την SPI βιβλιοθήκη και αρχικοποιούμε την SPI επικοινωνία με την εντολή SPI.begin() μέσα στη συνάρτηση setup(). Μπορούμε να στείλουμε την διεύθυνση και τα δεδομένα οποιοδήποτε καταχωρητή του ΜΑΧ7221 με τη συνάρτηση max7221transfer(διεύθυνση, δεδομένα) η οποία περιλαμβάνει δυο κλήσεις της συνάρτησης SPI.transfer( ). Στην συνάρτηση setup( ) μπορούμε να δούμε παραδείγματα πως το Arduino board στέλνει εντολές στο ΜΑΧ7221.

Πως το ΜΑΧ7219 δέχεται εντολές από το Arduino board

Αυτό το παράδειγμα είναι παρόμοιο με το προηγούμενο, με τη διαφορά ότι εδώ έχουμε τον οδηγό ΜΑΧ7219 ο οποίος χρησιμοποιεί το δικό του σειριακό πρωτόκολλο για να επικοινωνεί με το Arduino board. Αυτό το πρωτόκολλο είναι αρκετά όμοιο με το SPI πρωτόκολλο.

Συνδέουμε τα πινς της αναπτυξιακής πλακέτας CS, CLK, DIN με οποιαδήποτε Ι/Ο πινς του Arduino board τα οποία και θα δηλώσουμε στον κώδικα. (Δεν πρέπει να ξεχάσουμε να συνδέσουμε και το GND πιν).

Πρώτα ανεβάζουμε στο Arduino board τον ακόλουθο κώδικα και ύστερα τροφοδοτούμε με τάση τις πλακέτες.

#define DIN 11
#define LOAD 7
#define CLK 13

void max7219transfer(byte address, byte value){
  digitalWrite(LOAD, LOW);
  shiftOut(DIN, CLK, MSBFIRST, address);
  shiftOut(DIN, CLK, MSBFIRST, value);
  digitalWrite(LOAD, HIGH);
  delay(1);
}

void setup() {
  pinMode(DIN, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LOAD, OUTPUT);
  digitalWrite(LOAD, HIGH);
  digitalWrite(DIN, LOW);
  digitalWrite(CLK, LOW);
  max7219Transfer(0x0F, 0x01);  //Display – Test Register Format: Display test Mode
  delay(500);
  max7219transfer(0x0F, 0x00);
  max7219transfer(0x0C, 0x01); //Shutdown Register Format: Normal Operation
  max7219transfer(0x0A, 0x0A);  //Intensity Register
  max7219transfer(0x09, 0xFF); //Decode – Mode Register Format: Decode for digits 7-0
  max7219transfer(0x0B, 0x07);  // Scan – Limit Register Format: Display digits 01234567
  for(byte j=0; j<=9; j++){ 
      for(byte i=1; i<=8; i++) max7219transfer(i,j); 
	  delay(500);
	  }
  max7219transfer(0x09, 0x0F);  //Decode – Mode Register Format: Decode for digits 3-0
  max7219transfer(0x01, 0x09);  //Digit 0 as number 9
  max7219transfer(0x02, 0x01);  //Digit 1 as number 1
  max7219transfer(0x03, 0x00);  //Digit 2 as number 0  
  max7219transfer(0x04, 0x02);  //Digit 3 as number 2 
  max7219transfer(0x05, 0B01001110); //Digit 4 as letter C
  max7219transfer(0x0B, 0x04);  // Scan – Limit Register Format: Display digits 01234
  }

void loop() {
  }

Η επικοινωνία της αναπτυξιακής πλακέτας με το Arduino board βασίζεται στη συνάρτηση max7219transfer(διεύθυνση, δεδομένα). Οι μεταβλητές της συνάρτησης είναι η διεύθυνση και τα δεδομένα του καταχωρητή του ΜΑΧ7219 που θέλουμε να προσπελάσουμε. Όπως βλέπουμε στον κώδικα αυτή η συνάρτηση βασίζεται σε δυο κλήσεις της συνάρτησης του Arduino: shiftOut(dataPin, clockPin, bitOrder, value).

Χρήσιμα αρχεία για κατέβασμα

Μπορείτε να κατεβάσετε τα αρχεία eagle της κατασκευής  και να τα χρησιμοποιείται ελεύθερα κάνοντας κλικ στον σύνδεσμο:

Αρχεία eagle για την κατασκευή Κ120 αναπτυξιακή πλακέτα για τον ΜΑΧ7221 ή ΜΑΧ7219