SC16IS750-Software-Clone

Begonnen von Wzut, 01 Mai 2016, 19:10:42

Vorheriges Thema - Nächstes Thema

Wzut

Zitat von: HCS am 10 April 2016, 11:43:06
Um diesen Thread hier nicht damit zu zerfleddern schlage ich vor, Du machst irgendwo in der "Bastelecke" einen "SC16IS750-Software-Clone" Thread auf

yes, SIR :)
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Also dann...

Anbei auch die Schaltung, mit der ich es getestet habe.
Zum Testen habe ich drei LED dran, rot, grün und gelb.
Basis ist ein 328p mit optibootloader.

Die aktuell eingecheckte LGW Version 1.18 kann es mit folgenden Commands testen:
1x: versucht den SC16IS750 neu zu erkennen
2x: startet einen ticker, der die rote und grüne LED abwechselnd blinken lässt
3x: versucht ein angeschlossenes Radio #4 (RFM69) zu erkennen
2,120b: steuert den Buzzer, der durch die gelbe LED simuliert wird, an

Das funktioniert mit dem angehängten Sketch so weit mal.
Der Rest (inputs, serielle Schnittstelle, ...) muss noch implementiert werden.

Eventuell bekommt man das auch auf einem Tiny4313 hin, man muss dann halt per SPI flashen.

Wzut

THX, leider hatte ich heute Morgen vor der Arbeit keine Zeit das richtig zu testen, aber von der Sache her schaut das ähnlich aus wie das was ich am WE schon mal zusammengebaut hatte. ( auch mit  Wire.onReceive und Wire.onRequest )
Mit Wire.onReceive sah ich den 0x55 Schreibversuch des ESP,  Wire.onRequest sollte doch dann gleich danach greifen wenn der Rückleseversuch gestartet wird. An dem Punkt bin ich gescheitert, d.h. meine onRequest Funktion wurde nie durchlaufen. Mal schauen heute Abend ob ich mit deinem Bsp weiterkomme.

Ein grundlegendes Verständisproblem habe ich aber dennoch:
Bei I2C sendet der Slave doch nie selbständig Daten an den Master, sondern immer nur nach dessen Aufforderung. Wie macht du das im LGW bzw ein echter SC16IS750 wenn er neue Daten auf der seriellen Schnittstelle hat und diese ja nun umgehend an den Master loswerden muß ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

HCS

Zitat von: Wzut am 02 Mai 2016, 14:38:35
Mit Wire.onReceive sah ich den 0x55 Schreibversuch des ESP,  Wire.onRequest sollte doch dann gleich danach greifen wenn der Rückleseversuch gestartet wird. An dem Punkt bin ich gescheitert, d.h. meine onRequest Funktion wurde nie durchlaufen.
Tip: keine seriellen Ausgaben in Wire.onReceive und Wire.onRequest machen, das ruiniert sofort das Timing auf dem Bus.
Generell sollten die beiden so schnell es nur geht durch sein.

Zitat von: Wzut am 02 Mai 2016, 14:38:35
Ein grundlegendes Verständisproblem habe ich aber dennoch:
Bei I2C sendet der Slave doch nie selbständig Daten an den Master, sondern immer nur nach dessen Aufforderung.
Korrekt.

Zitat von: Wzut am 02 Mai 2016, 14:38:35
Wie macht du das im LGW bzw ein echter SC16IS750 wenn er neue Daten auf der seriellen Schnittstelle hat und diese ja nun umgehend an den Master loswerden muß ?
Der SC16IS750 hat 64 Byte fifo für die seriellen Daten. Wenn was reinkommt, packt er es in den fifo.
Man kann ihn fragen, wie viel aktuell im fifo drin ist und bytes draus lesen.
Das polle ich im LGW (ob Daten drin sind) und hole sie dann ab.
Auf dem Arduino könnte man den fifo dann größer als 64 Byte machen, dann darf ein SubProzessor mehr auf einmal abliefern als aktuell 64 Byte alle 100 ms