Zum Inhalt springen

Entwicklung APC 3.0 -> Lisy_APC


Black Knight

Empfohlene Beiträge

vor 36 Minuten schrieb bontango:

Grundsätzlich sieht der Pi den Arduino über I2C schon mal 🙂

Das ist doch schon mal ein Anfang.👍

vor 37 Minuten schrieb bontango:

Erstmal 1:1 zum USB Protokoll oder auch schon die Umsetzung der DIPs?

Ja, erst mal nur 1:1 das USB Protokoll.

vor 38 Minuten schrieb bontango:

wieso willst Du da wechseln?

Einfach nur aus Layout-Gründen - die anderen Pins sitzen etwas günstiger.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 206
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

  • Black Knight

    111

  • bontango

    95

  • Volley

    1

Top-Benutzer in diesem Thema

Veröffentlichte Bilder

Ich bekomme momentan dies hier via LISY:

ask for connected hardware
API_write(1 bytes): 0x00
Error writing to serial Remote I/O error

Wobi ich annehme dass die grundsätzliche Communication Ok ist.

Habe mal mit einem Miniprogramm aus dem Internet und commandline tools auf linux getestet

#import <Wire.h>
void setup() {
  Wire.begin(0x44);
  Wire.onRequest(requestEvent);
  pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
  digitalWrite(LED_BUILTIN, LOW);
  delay(2000);
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);
}
void requestEvent(){
  static char c = 0;
  Wire.write(c);
  c++;
  if (c==255) c=0;
}

Dann bekomme ich mit 'i2cget' die daten geliefert:

pi@lisy(rw):~$ i2cget -y 1 0x44
0x01
pi@lisy(rw):~$ i2cget -y 1 0x44
0x02
pi@lisy(rw):~$ i2cget -y 1 0x44
0x03
pi@lisy(rw):~$ i2cget -y 1 0x44
0x04


Daher würde ich erwarten wenn ich bei

i2cset -y 1 0x44 0x0

gefolgt von

i2cget -y 1 0x44

auf den APC absetze, dass ich A P C geliefert bekomme, kommt aber immer 0x00, kannst Du da noch mal schauen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

remote IO error war ich schuld, man sollte auch die richtige Adresse setzen 🙄

Mit dem Testprogramm oben bekomme ich jetzt auch bytes zurück:

[385.485974][0.000168] API_write(1 bytes): 0x03
[385.486533][0.000559] API_read_byte: 0x01
[385.486630][0.000097] LISY_Mini: Client supports 1 lamps
[385.486721][0.000091] API_write(1 bytes): 0x04
[385.487277][0.000556] API_read_byte: 0x02
[385.487307][0.000030] LISY_Mini: Client supports 2 solenoids
[385.487337][0.000030] API_write(1 bytes): 0x06
PuTTY[385.487828][0.000491] API_read_byte: 0x03
[385.487859][0.000031] LISY_Mini: Client supports 3 displays
[385.487896][0.000037] API_write(2 bytes): 0x07 0x00
[385.488738][0.000842] API_read_2bytes: 0x04 0x05
[385.488772][0.000034] Display no:0 has type:4 (SEG14,Fully addressable 14 Segment Display (with comma)) with 5 segments
[385.488811][0.000039] API_write(2 bytes): 0x07 0x01
[385.489621][0.000810] API_read_2bytes: 0x06 0x07

Aber nehme ich den APC kommt immer 0x0 zurück.

Ich lade gleich mal ein update hoch, dann hast du etwas zum testen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube zu wissen, was los ist. Ich versuche mal was zu basteln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Noch'n update, mit dem programm unten sehe ich auf meiner Seite sende und empfangsdaten:

Monitor:

Bereit
Daten erhalten: 0
Daten erhalten: 6
Daten erhalten: 1

 

pi@lisy(rw):~$ ./run_lisy_apc
LISY basic DEBUG activ
[226.370778][0.000013] LISY DEBUG timer set
[226.371063][0.000285] Info: udp switch reader server for debug mode succesfully started
[226.371099][0.000036] LISY APC Hardware init start
Info: I2C communication to APC successfull initiated
[226.411659][0.040560] ask for connected hardware
[226.411774][0.000115] API_write(1 bytes): 0x00
[226.412292][0.000518] API_read_string:
Info: hardware ID is  (1)
[226.412343][0.000051] API_write(1 bytes): 0x06
[226.412835][0.000492] API_read_byte: 0x06
[226.412867][0.000032] API_write(1 bytes): 0x01

 

#include <Wire.h>

#define adresse 0x44
int zahl = 0;

void setup() {
 
  Serial.begin(9600);
  Wire.begin(adresse);

  Wire.onReceive(empfangeDaten);
  Wire.onRequest(sendeDaten);

  Serial.println("Bereit");
}

void loop() {
  delay(100);
}

void empfangeDaten(int byteCount) {
  while (Wire.available()) {
    zahl = Wire.read();
    Serial.print("Daten erhalten: ");
    Serial.println(zahl);

    
  }
}

void sendeDaten() {
  Wire.write(zahl);
}

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 20 Minuten schrieb Black Knight:

Ich glaube zu wissen, was los ist. Ich versuche mal was zu basteln.

OK, wenn Du testen willst "lisy_update_APC.tgz" auf 5.26-5 habe ich gerade hochgeladen

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe I2C einfach nicht. Wie wird dem Slave denn mitgeteilt, wie viele Bytes der Master als Antwort erwartet? Die OnRequest Funktion hat ja keinen Parameter also woher soll ich wissen, wie viele Bytes ich senden soll?

Link zu diesem Kommentar
Auf anderen Seiten teilen

OK, also wenn's bei dir so klappt, dann wird offensichtlich jedes Byte einzeln angefordert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Obwohl ich vermute dass du zB auch write("APC") schicken kannst auf Antwort von 0x00 und er das dann auf der unteren Ebene buffert

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hatte ich auch gedacht, also habe ich auf dieses OnRequest ganz verzichtet und die Daten einfach mit write raus gehauen. Da das aber nicht geklappt hat versuche ich es jetzt mit einem eigenen TxBuffer Byte für Byte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du hast ja gerade so'n schönes Testsetup. Kannst du bitte nochmal meine neue Version runter laden und probieren ob sich jetzt mehr tut?

Link zu diesem Kommentar
Auf anderen Seiten teilen

sieht sehr gut aus 👍🙂

 

pi@lisy(ro):~$ ./run_lisy_apc
LISY basic DEBUG activ
[961.420030][0.000014] LISY DEBUG timer set
[961.420266][0.000236] Info: udp switch reader server for debug mode succesfully                                     started
[961.420302][0.000036] LISY APC Hardware init start
Info: I2C communication to APC successfull initiated
[961.460913][0.040611] ask for connected hardware
[961.460987][0.000074] API_write(1 bytes): 0x00
[961.462224][0.001237] API_read_string: APC
Info: hardware ID is APC (4)
[961.462277][0.000053] API_write(1 bytes): 0x06
[961.462777][0.000500] API_read_byte: 0x05
[961.462810][0.000033] API_write(1 bytes): 0x01
[961.464478][0.001668] API_read_string: 00.14
[961.464509][0.000031] LISY_Mini: Client has SW version: 00.14
[961.464538][0.000029] API_write(1 bytes): 0x02
[961.466001][0.001463] API_read_string: 0.10
[961.466031][0.000030] LISY_Mini: Client uses API Version: 0.10
[961.466060][0.000029] API_write(1 bytes): 0x03
[961.466564][0.000504] API_read_byte: 0x41
[961.466593][0.000029] LISY_Mini: Client supports 65 lamps
[961.466622][0.000029] API_write(1 bytes): 0x04
[961.467131][0.000509] API_read_byte: 0x19
[961.467160][0.000029] LISY_Mini: Client supports 25 solenoids
[961.467188][0.000028] API_write(1 bytes): 0x06
[961.467688][0.000500] API_read_byte: 0x05
[961.467718][0.000030] LISY_Mini: Client supports 5 displays
[961.467749][0.000031] API_write(2 bytes): 0x07 0x00
[961.468583][0.000834] API_read_2bytes: 0x03 0x04
[961.468616][0.000033] Display no:0 has type:3 (SEG7, Fully addressable 7 Segmen                                    t Display (with comma)) with 4 segments
[961.468649][0.000033] API_write(2 bytes): 0x07 0x01
[961.469470][0.000821] API_read_2bytes: 0x04 0x07
[961.469502][0.000032] Display no:1 has type:4 (SEG14,Fully addressable 14 Segme                                    nt Display (with comma)) with 7 segments
[961.469535][0.000033] API_write(2 bytes): 0x07 0x02
[961.470353][0.000818] API_read_2bytes: 0x04 0x07
[961.470385][0.000032] Display no:2 has type:4 (SEG14,Fully addressable 14 Segme                                    nt Display (with comma)) with 7 segments
[961.470418][0.000033] API_write(2 bytes): 0x07 0x03
[961.471237][0.000819] API_read_2bytes: 0x04 0x07
[961.471268][0.000031] Display no:3 has type:4 (SEG14,Fully addressable 14 Segme                                    nt Display (with comma)) with 7 segments
[961.471301][0.000033] API_write(2 bytes): 0x07 0x04
[961.472122][0.000821] API_read_2bytes: 0x04 0x07
[961.472154][0.000032] Display no:4 has type:4 (SEG14,Fully addressable 14 Segme                                    nt Display (with comma)) with 7 segments
[961.472185][0.000031] API_write(1 bytes): 0x09
[961.472690][0.000505] API_read_byte: 0x49
[961.472720][0.000030] LISY_Mini: Client supports 73 switches

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hat auch nicht mehr die Aussetzer durch den Soundbefehl, hattest Du das auch direkt geändert?

done
[967.925032][0.188684] LISY_W sound_handler: board:0 0x7f (127)
[967.925092][0.000060] play soundindex 127 on board 0
[967.925129][0.000037] API_write(3 bytes): 0x32 0x01 0x7f
[967.931871][0.006742] API_write(2 bytes): 0x28 0x01
[967.932673][0.000802] API_write(2 bytes): 0x28 0x02
[967.933286][0.000613] API_write(2 bytes): 0x28 0x03
[967.933877][0.000591] API_write(2 bytes): 0x28 0x04
[967.934465][0.000588] API_write(2 bytes): 0x28 0x05
[967.935130][0.000665] API_write(2 bytes): 0x28 0x06
[967.935719][0.000589] API_write(2 bytes): 0x28 0x07

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb bontango:

Hat auch nicht mehr die Aussetzer durch den Soundbefehl, hattest Du das auch direkt geändert?

Nö, das hatte ich dir nur so geschickt aber nicht fest eingebaut. Hattest du gestern vielleicht 'ne SD-Karte dran und heute nicht?

Dann werde ich morgen noch die I2C Pins ändern und dann sollte das eigentlich so passen.

Man kann (muss) jetzt in den APC Settings einstellen, ob die Kommuniation über I2C oder USB ablaufen soll. Der Arduino könnte natürlich auch versuchen, den Pi über I2C zu finden und nur auf USB umschalten falls er da nix findet. Andererseits könnte es ja auch sein, dass man den Pi für PinMame drauf hat und trotzdem ab und zu versucht über USB sein MPF Spiel auf dem Laptop zu erstellen. In diesem Fall kann man jetzt einfach in den Settings umschalten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 10 Stunden schrieb Black Knight:

Hattest du gestern vielleicht 'ne SD-Karte dran und heute nicht?

Nein, in beiden Fällen keine SD Karte drin. War ja auf meinem Schreibtisch ohne APC.

Ich mach mal ein paar Tests, läuft denn die USB Kommunikation auch über Eventhandler?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 8 Minuten schrieb bontango:

läuft denn die USB Kommunikation auch über Eventhandler?

Nein, das wird direkt raus gesendet.

Kommt denn was sinnvolles zurück oder schickt er einfach irgendwas? Ich habe zwar eine Fehlermeldung in den Event Handler eingebaut wenn der Sendepuffer leer läuft, aber die würde man nur mit angeschlossenen Displays sehen.

Ich habe jetzt übrigens noch eine neue Version hochgeladen, in der die anderen I2C Pins angesprochen werden. Es sollten also jetzt SCL1 und SDA1 benutzt werden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Auf meinen Read aufruf bekomme ich im Fehlerfall nichts zurück ( 0 Byte),

"Error reading from serial switch status, return:0 No such file or directory"

 

USB geht übrigens im Moment nur mit 013, für meien Schreibtischtests bei 014 habe ich

const byte APC_defaults[64] =  {0,3,3,1,1,0,0,0,             // system default settings

gegen


const byte APC_defaults[64] =  {0,3,3,1,2,0,0,0,      // system default settings

ausgetauscht, funktioniert aber nicht (timeout). Muss ich sonst noch was ändern um USB mit 014 zu testen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 18 Minuten schrieb bontango:

Muss ich sonst noch was ändern um USB mit 014 zu testen?

Nö, das sollte alles sein. Dann habe ich wohl beim einbauen der I2C Eventhandler was im USB-Teil kaputt gemacht, denn vorher hatte ich es noch getestet. Kann ich mir heute Mittag mal ansehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

USB Kommunikation sollte wieder gehen.

Wenn jetzt noch das mit SDA1 und SCL1 funktioniert, dann kann ich mit dem Layout anfangen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

I2C funktioniert, kannst loslegen mit dem Layout! 👍

Denk dran möglichst viel SMD auf eine Seite zu packen ☝️

USB geht auch wieder,sogar ohne die Aussetzer !???🤔

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor einer Stunde schrieb bontango:

Denk dran möglichst viel SMD auf eine Seite zu packen

Ich überlege, ob ich zwei Versionen mache.

Eine genauso wie jetzt, nur mit Lisy drauf und dann noch eine bei der ich wirklich versuche alles möglichst durch SMD zu ersetzen und auf eine Seite zu packen, damit man das in China bestücken lassen kann. Die Zweite wäre dann natürlich schlechter zu reparieren, aber käme dafür fast fertig ins Haus.

Was meinst du?

vor einer Stunde schrieb bontango:

USB geht auch wieder,sogar ohne die Aussetzer !???

Komisch. Aber ich werde das jetzt auch mal im meinen Black Knight packen, mal sehen was bei mir passiert.

Ich müsste mir sowieso noch bei Gelegenheit ansehen, ob diese Arduino I2C Lib die Request Handler aus einem Interrupt heraus aufruft oder nicht. Ich leite den Request nämlich momentan ohne Zwischenpuffer einfach an meine Kommandoauswertung weiter. Wenn der Empfangs-Request aus einem Interrupt käme, dann könnte es natürlich sein, dass der nächste schon aufgerufen wird obwohl der vorherige noch bearbeitet wird (z.B. bei Sounds) und das könnte dann allen möglichen Blödsinn auslösen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Black Knight:

Was meinst du?

Ne einfache Reparatur halte ich auch für wichtig, ich würde die gefährdeten Bauteile also alles was Kontakt nach 'aussen' hat

und aus der Erfahrung gern mal kaputt geht als DIP Variante auslegen und den Rest als SMD.

Habe ja auch ne LISY35-SMD Variante, aber die PICs ( meine Aussenschnittstelle) lasse ich bislang noch in DIP

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Genau und mit zwei Versionen könnte man sich entscheiden. Wer sich nicht so mit Elektronik auskennt und sowieso nichts selbst reparieren kann ist vermutlich dankbar, wenn alles vorbestückt ist.

Ich weiß halt nicht, ob ich die SMD Klamotten auf eine Seite kriege, wenn ich die großen DIPs noch drauf habe.

Blöderweise hat JLCPCB den 74HCT154 nicht im Programm und als DIP gibt's den auch nicht mehr. Den wird man also immer noch als SMD auflöten müssen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 13 Minuten schrieb Black Knight:

Blöderweise hat JLCPCB den 74HCT154 nicht im Programm und als DIP gibt's den auch nicht mehr.

wie wäre es denn mit zwei 74HCT138 als Ersatz, den haben sowohl JLC als SMD auch auch Reichelt als DIP.

Sollte nicht wesentlich mehr Platz in Anspruch nehmen und ist bei entsprechender Beschaltung 100% kompatibel.

hatte ich bei LISY auch gemacht bevor ich auf shift register (595) umgestiegen bin ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, habe ich mir auch schon überlegt. Es ginge auch ein 74HC154, den gibt's auch bei JLC und als DIP und dann noch ein HCT Treiber als Pegelwandler davor.

Wenn man jetzt wüsste, ob die Leute bei sowas wirklich Probleme beim löten haben oder nur jammern und es dann doch hin kriegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

×
×
  • Neu erstellen...

Wichtige Information

Datenschutzerklärung und Registrierungsbedingungen