ich habe gerade in Brett vorm Kopf und komme nicht weiter. Evtl. könnt Ihr mir auf die Sprünge helfen
Folgendes Problem:
Gerade bin ich dabei eine INTEX Poolsteuerung zu automatisieren. Die Hauptplatine sendet ihre Signale an zwei 74HC595 Schieberegister im Bedienfeld, welches die Daten dann anzeigt.
Nun möchte ich mich mit dem Arduino dazwischen hängen und die die Bits/Bytes mitlesen um diese dann in entsprechende MQTT Befehle zu verwandeln.
Leider komme ich auf keine zuverlässige Lösung wie ich diese Signale am besten mitlesen könnte.
uwefed:
Natürlich kann man die Ausgänge des 595 abfragen. Sinnvoller sehe ich die Datenübertragung der seriellen Seite. Grüße Uwe
Deswegen habe ich ja auch beigeschrieben, “eine Möglichkeit”.
Andersrum muss der TO entscheiden, was für ihn sinnvoll bzw. einfacher ist.
Viele tun sich ja bei serieller Übertragung sehr schwer.
SPI im SlaveMode, das wäre wohl genau die richtige Lösung. Möchte das gerne ohne zusätzliche Bausteine umsetzen.
Leider scheint der ESP32 mit Arduino IDE kein richtiges SPI im SlaveMode zu können
Habe daher mal versucht, die GPIOs manuell abzufragen, leider ist das für 100kHz wohl nicht schnell genug, da manche Sequenzen verloren gehen.
Habe es dann mal mit SPI im SlaveMode an einem Mega 2560 getestet, leider scheint auch da die Kommunikation nicht richtig abzulaufen. Vermutlich ist der mit den 16bit pro Übertragung überfordert. Letztlich bekomme ich hier keine plausiblen Ergebnisse.
Ohne Code läßt sich nicht feststellen, wo ein Fehler liegen könnte. Bei SPI muß man auch noch den richtigen Modus einstellen, entsprechend dem '595 Interface. Und SS mit richtiger Polarität, für die Synchronisation.
#include<SPI.h>
volatile int i = 0;
byte myArray[2];
void setup()
{
Serial.begin(9600);
pinMode(53, INPUT_PULLUP);
pinMode(51, OUTPUT);
pinMode(52, INPUT);
SPCR |= _BV(SPE);
SPI.attachInterrupt(); //allows SPI interrupt
}
void loop(void)
{
if (i == 2)
{
int x = (int)myArray[0]<<8|(int)myArray[1];
Serial.print("Received 16-bit data item from Master: ");
Serial.println(x, BIN);
i=0;
Serial.println("=============================================");
}
}
ISR (SPI_STC_vect) //Inerrrput routine function
{
myArray[i] = SPDR;
i++;
}
Ergebniss ist leider unplausibel:
=============================================
Received 16-bit data item from Master: 11111111111111111111111001011010
=============================================
Received 16-bit data item from Master: 11111111111111111010111011111110
=============================================
Received 16-bit data item from Master: 11111111111111111010111011111110
=============================================
Received 16-bit data item from Master: 11111111111111111111111001111110
=============================================
Received 16-bit data item from Master: 11111111111111111111111010101110
=============================================
Received 16-bit data item from Master: 11111111111111111111111010101110
=============================================
Received 16-bit data item from Master: 100111111111110
=============================================
Received 16-bit data item from Master: 11111111111111111111111011001000
=============================================
Received 16-bit data item from Master: 11111111111111111010111011111110
=============================================
Received 16-bit data item from Master: 11111111111111111010111011111110
EDIT:
Könnte dann aber wie DrDiettrich schon sagte am falschen Mode liegen.
Versuche gerade den passenden zu finden und ggf zu ändern
es fehlen die code tags.
Es gibt eine Zeile mit 16 bit!?!
Da die ersten ja immer High sind... sind die unteren 16bit realistisch?
Auf welchem Target bist unterwegs?
Wie siehts am Mega aus?
Welche Zeile ist richtig, was ist an den anderen Zeilen falsch?
Bisserl genauere Analysen kannst du sicher machen. Denk daran, wir sehen nicht was auf deinem Schreibtisch liegt!
Das ist die Kommunikation vom Controller zu den zwei hintereinander geschalteteten 74HC595.
Dazwischen hänge ich gerade mit meinem Arduino 2560.
Shift an Pin 52
Latch an Pin 53
Data an Pin 51
Ich muss dazu sagen, ist mein erstes Projekt dieser Art