Beide Ports des nano nutzen

Der TO schrieb:

LX200 und RS232; wieso arbeitet der TO dann mit USB Kabeln und FT232?

Grüße Uwe

Morgen Leute,
Meine Montierung ist eine EQ6. Die EQ6 hatte damals (2000) kein Goto sondern nur eine Handsteuerung.
Da gab es Anfang der 2000er jemanden der einen Umrüstsatz für 20€ angeboten hatte.
Seitdem kann meine EQ6 jetzt Goto (Goto = per Computer steuerung von einem Ort zum anderen fahren)
Zur Steuerung benutzte ich damals Kstars mit dem Indi-Protokoll. Irgenwann wurde der LX200 Indi-Treiber geändert und seitdem geht es nicht mehr.
Momentan verwende ich Skychart 4.xx. Die letzte Version die noch den LX200-Seriell "eingebaut" hat.
Die Skychart-version ist aber von vorgestern und auf meinem Raspberry nicht wirklich schnell.
Ausserdem ist es die einzige SW die ich noch mit der Montierung benutzen kann.
Ich habe nun herausgefunden das meine Steuerung ins Protokoll ein "ß" einbaut mit dem der neue Indi-Treiber nicht mehr klar kommt. Scheint früher wohl kein Problem gewesen zu sein

Ich könnte natürlich eine neue Steuerung einbauen und >400€ auf den Tisch legen wenn ich den hätte, aber die Steuerung funktioniert ja noch. Also setze ich einen "Filter" vor die Steuerung der das "ß" im Protokoll herausfiltert.
Die Nano und FTDI habe ich hier herum liegen und kosten nix.

Was den Anschluss betrifft, ja die alte Steuerung hatte noch einen RS232 DB9 Anschluss. Mein Raspberry hat selbigen aber nicht mehr also benutze ich einen RS232 - USB Adapter.

Der Nano mit FTDI wird nun einfach zwischen Rechner und Montierung gesteckt und "korrigiert" das Protokoll.
So wird die Montierung auch von anderen AstroSW erkannt und kann benutzt werden.

Gruß
Thomas

Habe eben nochmal nachgesehen. Die Steuerung schmuggelt ein "??" ein.
Ein Abfragen der Zeit über ein normales Terminal mit :GR# sollte normalerweise als Antwort die Uhrzeit kommen. Da meine Montierung kein GPS oder eine RTC verbaut hat sollte also 00:00.0 als Antwort von der Montierung kommen. Es wird aber ein 0??:0:00.0 von der Montierung gesendet.

@ Uwe
Die Montierung (EQ6) Empfängt nur einzelne ASCII-Befehle und antwortet dann dementsprechend.
Da gibt es keine Host/Slave verbindung wo sich etwas unterordnet.

Leider habe ich momentan kein passendes Kabel um die Montierung mit dem FTDi zu verbinden und muss erstmal das ganze per Terminal erfassen.
Ein Dummy auf dem Nano schreiben und mit dem Indi-Treiber im Debug-Mode analysieren welche Befehle da genau verhunzt werden.

Las Dir das mal in HEX ausgeben, was da tatsächlich zurück kommt.
Dein Screenshot ist leider nicht weiterverarbeitungsfähig.
Somit musste selber den Code bauen.

Der Raspberry hat einen Serial interface auf der Steckleiste. Da fehlt zu RS232 nur ein TTL zu RS232 Adapter (zB einen MAX232)

Also hast Du jetzt Raspberry -> USB -> NANO - >Software Serial -> FT232 -> USB -> Motorisiertes Stativ.

Ist das nicht einfacher Auf den Raspberry die Ausgabe abzufangen und modifiziert auszugeben?
Grüße Uwe

Hallo Leute,

danke für das Interesse, das bin ich nicht gewohnt. Es ist nett wenn man solche Unterstützung bekommt. :slight_smile:

Mit dem Screenshot wollte ich nur die Steuerung zeigen. Ich bin mir ja nicht sicher ob Ihr euch mit dem
Thema auskennt.
ich habe ungefähr so ne Ahnung wie ich das machen will, einen konkreten Plan habe ich noch nicht.
Ich habe bis jetzt 2 "Fehler" gefunden. Die beiden Fragezeichen sind das eine, und ein "Stern" wird durch <0xdf> ersetzt.

Z.B.
Bei dem Befehl :GD# über das Terminal abgesetzt, sollte sDD*MM# von der Montierung zurückkommen. Das ist die Deklinations Position des Telekopes. Empfangen wird aber
+?00<0xdf>00#
Die Fragezeichen müssen aus dem Protokoll vom Nano entfernt werden bevor sie weitergeleitet werden und die Zeichenfolge <0xdf> = ß durch einen * ersetzt werden.

Hatte vor den Eingang (String) durch einen Filter zu jagen und die Fragezeichen sowie das "ß" zu ersetzen.
Ich hatte vor ein paar Jahren mal angefangen mit Python etwas herum zu spielen und habe mir eine kleine Steuerung Programmiert wo ich das auf diese Art gemacht hatte.

... Also hast Du jetzt Raspberry -> USB -> NANO - >Software Serial -> FT232 -> USB -> Motorisiertes Stativ...
Genau. Ich verwende nicht nur den Pi für die Steuerung, sondern auch ab und zu meinen alten Laptop.
Wie funktioniert das mit dem Zitat ??

Wie gesagt ich bin nur ein "Gelegenheitsprogrammierer". Ich hatte vor 40 Jahren mal mit Pascal und C++ zu tun, aber das ist schon ne weile her.
Momentan bin ich dabei die Steuerung für meine Kamera in Python zu Schreiben um nicht auf Konventionelle Programme zurück greifen zu müssen.
Ausserdem benutze ich fast ausschlieslich Linux und die SW ist dort rar.
Es gibt zwar gute, aber mein Equipment zu veraltet.

Gruß
Thomas

bitte eine ganze (!) Message in HEX wie du sie bekommst
und separat markieren was anders sein soll.

Das * ist auch unpräzise. Was wird da hex wirklich erwartet? 0x2A?

Zusatzfragen:
gehe ich recht in der Annahme: Alle anderen Messages sollen 1:1 durchgeschliffen werden, nur diese eine Message soll manipuliert werden?

Gibt es ein Anfang oder Ende Zeichen je Message? bzw. woran kann man erkennen dass jetzt eine neue Message kommt? ist es immer das # Zeichen? Weil irgendwie wirst du das buffern müssen...

Protokoll.

Da hat sich der Zeichensatz geändert.
Ursprünglich war das in der Windows-1252 das ß
Wenn die den jetzt maskieren, dann nutzen die vermutzlich den und vorher war da was anderes....
Musst Du Dir eine Übersetzungstabelle bauen.
Wenn Du weisst, was das vorher war, dann wirds einfach.
Ansonsten alle Protokoll-Abfragen durchführen und aufzeichen.

Hmm das ist ja das seltsame laut der Tabelle von Maede werden/wurden da keine ? oder ß verwendet.
Das PDF von Maede ist von 2002.

LX200 Kommandos von Maede

Ich bin heute Mittag mal die Befehle der Montierung durchgegangen und habe festgestellt das die Montierung wirklich einen abgespeckten LX200 Befehlssatz hat.

Meade Teleskope Protocoll
:GR#     HH:MM.T#         00:00.0#             Get Deklination
:Gr#     HH:MM:T#         00:00.0#             Get Current/target object RA
:GS#     HH:MM:SS#        00?:00:00#           Get Sideral Time
:GD#     sDD*MM#          +?00<0xdf>00#        Get Rektaszension
:Gd#     sDD*MM#          +?00<0xdf>00#        Get Currently Selected Object/target Dec

Das sind die Relevanten, ansonsten gibt es noch 7 oder 8 weitere die aber in Ordnung sind und benutzt werden bzw. Funktionieren.

Die erste Spalte ist der Befehl.
Die 2te was in der Doku von Meade steht und was erwartet wird.
Die 3te was meine Montierung von sich gibt.
Die letzte Spalte die Erklärung.

Eingeleitet wird die Sequenz mit einem Doppelpunkt und beendet mit der Raute.
Geändert werden muss nicht alles nur die Befehle abgefangen werden die diese "Sonderzeichen" enthalten.

Muss mal sehen wie es aussieht wenn die Montierung im Goto-Modus ist. Wenn also ein Objekt vom Rechner angefahren wird. In diesem Fall meldet die Montierung die ganze Zeit ihre momentane Position an den Rechner zurück damit die Position auf der "Karte"
aktualisiert wird.
Das muss ich aber an der momentan im Einsatz befindlichen Steuerung machen weil diese den Goto-Code in der FW verankert hat. Diese 2te (mit der ich Teste) hat eine ältere FW und den Code verloren den ich nicht mehr habe. Ansonsten unterscheiden sie sich nicht. Will damit sagen das der Protokoll-Fehler auch in der enthalten ist.

Also im Prinzip nix Kompliziertes.
Ich müsste morgen mal sehen was das Terminal von sich gibt wenn ich es in HEX anzeigen lasse.

Gruß
Thomas

Naja, offensichtlich schon.
Ich habe Dich darauf hingewiesen, das ich den Code aus #12 nicht verwenden kann.
Dann hätte Dir ja gerne was gebaut können.
So habe ich das jetzt mal zwischen Tür und Fenster gebaut - ungetestet.
Den auf den Nano - evtl. Parameter anpassen.
Mit dem Seriellen Monitor jedes Kommando eingeben und dann muss auf dem SerMOn die Antwort kommen....
Einmal in HEX und einmal der aufgenommene Puffer.
ungetestet...

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3);

bool isSend = false;
char myBuffer[20] = {'\0'};
byte receivePos = 0;
unsigned long timeOutStart = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  mySerial.begin(9600);
}

void loop()
{
  if (!isSend)sendCommand();
  else readCommand();
}

void sendCommand()
{
  if (Serial.available())
  {
    char c = Serial.read();
    if (!isControl(c))
    {
      Serial.print(c);
      myBuffer[receivePos] = c;
      receivePos++;
    }
    else
    {
      if (receivePos != 0)
      {
        Serial.println();
        mySerial.print(myBuffer);
        isSend = true;
        timeOutStart = millis();
      }
      memset(myBuffer, '\0', sizeof(myBuffer));
      receivePos = 0;
      Serial.println();
    }
  }
}

void readCommand()
{
  char c = '\0';
  if (mySerial.available())
  {
    c = mySerial.read();
    myBuffer[receivePos] = c;
    receivePos++;
    Serial.print(c, HEX);
    Serial.print(' ');
    timeOutStart = millis();
  }
  if (c == '#' || millis() - timeOutStart > 2000)
  {
    Serial.println();
    Serial.print(F("kommt: "));
    Serial.print(myBuffer);
    memset(myBuffer, '\0', sizeof(myBuffer));
    isSend = false;
  }
}

ich hab aktuell keine Hardware.
Daher nur mal kurz simuliert:

[url]https://wokwi.com/projects/328016832705331794[/url]

00?:00:00# wird zu 00:00:00#
und
+?00ß00# wird zu s00*00#

wobei ich immer noch glaube, du musst dir erst in HEX anschauen, was da wirklich reinkommt und daher auch den Vergleich vermutlich auf HEX Werte umbauen.

Dass man die Schnittstellen teilweise noch auf Softserial ala xy umbauen muss soll klar sein.

P.S.: der Simulator - Serial beendet immer mit einer Zeilenschaltung, daher geht das erkennen nur das erste mal. Probiers mal mit echter Hardware aus (ohne ZeilenEnde, Ohne Zeilenschaltung)

Vielen Dank für Deine Mühe :slight_smile:
Das erspart mir einige Nerven und Stunden der Recherche im Netz.
Heute komme ich nicht mehr dazu, aber ich werde es Morgen an der Steuerung testen und hier auch den hexcode posten.

Schon mal ein kräftiges Danke an Dich/Euch für die Hilfe. :slight_smile:

Gruß
Thomas

Hmm, scheint noch nicht zu Funktionieren.
Ich habe heute keine Zeit mehr muss das Morgen mal genauer ansehen.
Wollte es wenigstens mal testen und ne Rückmeldung geben wenn Du Dir schon die Mühe machst. :slight_smile:

Gruß
Thomas

Ich bin dann auch raus, da Du Beratungsresistent bist.

In diesem Sinne...

Morgen,
ich sagte gestern das ich es Morgen, also heute mal anschauen muss weil ich gestern keine Zeit mehr dazu hatte. Klar muss ich das ändern, aber ich muss erst einmal verstehen was Du da Programiert hast. Ich verstehe nur die Hälfte von diesem Code auch wenn es für dich vielleicht so einfach ist.
Auch sagte ich das ich heute erst dazu komme die Hex-werte zu posten.

Du Schriebst.

Den Screenshot kennst Du ja.

Hier wären 2 der Antworten der Steuerung in Hex.
Das ist das, was das Terminal ausspuckt:

00000000 30 30 3f 3a 30 30 3a 30   30 23                   	00?:00:0  0#
00000000 2b 3f 30 30 df 30 30 23                           	+?00.00#

Wenn Du raus bist, schade und es tut mir leid.

Gruß
Thomas

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.