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); }