MAX4820 IC – low side MOSFET Treiber 8-fach mit serieller Ansteuerung für Motoren oder Relais.

Der MAX4820 low side MOSFET Treiber für 8 Lastanschlüsse wird vorgestellt, aufgebaut und mit einen Microcontroller / Arduino angesteuert.

Verwendet wurden:
MAX4820 IC , Spannungsanschlussbrücke, LEDs, Breadboard, Steckbrücken.

Das Programm:

/* Relais / LED Treiber MAX4820
Low Side FET Treiber mit Serielle Ansteuerung SPI

DIN (Data Input) an Arduino Pin 11 (MOSI)
SCLK (Serial Clock) an Arduino Pin 13 (SCK)
CS (Chip Select) an Arduino Pin 6
VCC an 5V
GND an GND
!SET an Arduino Pin 9 oder fest auf VCC 5V legen
!RESET an Arduino Pin 8 oder fest auf VCC 5V legen

Dieses Programm schaltet alle Ausgänge an und dann wieder aus. 
Danach schaltet es alle Ausgänge der Reihe nach an.
Dann schaltet es abwechselnd jeden 2. Ausgang an.

Shelvin.de von Matthias Busse 1.2025 */

#include <SPI.h>

const int csPin = 6; // Chip Select Pin am MAX4820
const int setPin = 9; // !SET Pin am MAX4820
const int resetPin = 8; // !RESET Pin am MAX4820 anschliessen

void setup() {
  SPI.begin(); // SPI initialisieren
  pinMode(csPin, OUTPUT); // !CS 
  pinMode(setPin, OUTPUT); // !SET
  pinMode(resetPin, OUTPUT); // !RESET
  digitalWrite(csPin, HIGH); // Deselect the MAX4820
  digitalWrite(setPin, HIGH); // !SET auf high, oder fest verkabeln mit 5V wenn nicht benötigt
  digitalWrite(resetPin, HIGH); // !RESET auf high, oder fest verkabeln mit 5V wenn nicht benötigt
}

void loop() {
  activateAllMax4820();
  delay(1000);
  deactivateAllMax4820();
  delay(1000);
  for (int i = 0; i < 8; i++) { // die Ausgänge nacheinander einzeln einschalten
    turnOnOneMax4820(i);
    delay(1000);
    turnOffAllMax4820();
  }
  for (int i = 0; i < 8; i++) { // jeden 2. Ausgang abwechselnd einschalten
    turnOnMoreMax4820(0b10101010); 
    delay(300);
    turnOnMoreMax4820(0b01010101);
    delay(300);
  }
  int k=1;
  for (int i = 0; i < 8; i++) {
    turnOnMoreMax4820(k);
    k=k<<1;
    k+=1;
    delay(1000);
  }
  delay(1000);
}

void turnOnOneMax4820(int relayNumber) {
// Einen Ausgang einschalten
  byte data = 1 << relayNumber; // im Byte ist nur der gewünschte Ausgang eingeschaltet
  digitalWrite(csPin, LOW); // auswählen MAX4820
  SPI.transfer(data); //sende das Byte
  digitalWrite(csPin, HIGH); // abwählen MAX4820
}

void turnOnMoreMax4820(int relayNumbers) {
// Mehrere Ausgänge einschalten 
// mit einem binären Byte: 0b00000000 bis 0b11111111
  digitalWrite(csPin, LOW); 
  SPI.transfer(relayNumbers); 
  digitalWrite(csPin, HIGH); 
}

void turnOffAllMax4820() {
// Alle Ausgänge ausschalten
  digitalWrite(csPin, LOW);
  SPI.transfer(0b00000000); // alle aus
  digitalWrite(csPin, HIGH);
}

void activateAllMax4820() {
// alle Ausgänge mit SET einschalten
// nur wenn der !SET Pin angeschlossen ist.
  digitalWrite(setPin, LOW); 
  delay(10); // kurz warten damit das übernommen wird
  digitalWrite(setPin, HIGH);
}

void deactivateAllMax4820() {
// alle Ausgänge mit Reset ausschalten
// nur wenn der !RESET Pin angeschlossen ist.
  digitalWrite(resetPin, LOW);
  delay(10); // kurz warten damit das übernommen wird
  digitalWrite(resetPin, HIGH);
}

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..