Atmega - Programmroutine über UART zu UART TO ETH

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Atmega - Programmroutine über UART zu UART TO ETH

      Moin Ladys und Gentlemens, ich brauche bitte dringend eure Hilfe!

      Ich habe ein Programm in C# mit dem ich Daten aus dem Arbeitsspeicher auslese. Da die Daten statisch sind und sich nicht verändern, habe ich in einer Codetabelle feste Stadien vergeben. Diese Daten sende ich via USB an den Comport (Serialdaten) auf der Gegenseite wartet mein Atmega (AZ Delivery Nano) und bekommt den Datensatz rein und schaut, was reinkommt - springt dann in die jeweilige Routine und schaltetet die jeweilige LED (über ein Shiftregister und Treiber) ein. Bis hierher gibt es noch keien Probleme. Als Gegenprüfung habe ich die Shell / Putty dort funktioniert es super.

      Nun habe ich mir ein WaveShare 2-CH UART To Ethernet Converter, Serial Port besorgt diesen habe ich auch erfolgreich in Betrieb genommen. Das aufschalten via C# und Putty sowie einem Sockettester läuft perfekt. Das bedeutet, das die Grundverkabelung und Einrichtung fehlerfrei verlaufen ist und ich in den nächsten Schritt gehen kann. Die Verkabelung des WaveShare 2-CH UART To Ethernet Converter zum Nano. Und hier fangen meine schlimmsten Probleme an ... eigentlich scheint es so einfach aber hier hört mein Wissen auf!

      WaveShare 2-CH UART To Ethernet Converter (Shoplink)
      WaveShare 2-CH UART To Ethernet Converter (Anleitung) Punkt: Working with Arduino

      AZ-Nano V3-Board mit Atmega328 CH340 (Produkt)
      AZ-Nano V3-Board mit Atmega328 CH340 (Pinout)


      C# Beispiel 621 bedeutet LED an 622 LED aus am Register
      Auszug aus C# //

      Source Code

      1. // Beispiel C#
      2. if (avtState == AvtState.Undefined)
      3. {
      4. if ((data.Bits & 0x2000) != 0)
      5. avtState = AvtState.Off;
      6. else if ((data.Bits & 0x2000) == 0)
      7. avtState = AvtState.On;
      8. }
      9. if ((data.hBits & 0x2000) != 0 && avtState == AvtState.Off)
      10. {
      11. serialPort1.Write("621\r");
      12. avtState = AvtState.On;
      13. Thread.Sleep(8);
      14. }
      15. else if ((data.hBits & 0x2000) == 0 && avtState == AvtState.On)
      16. {
      17. serialPort1.Write("622\r");
      18. avtState = AvtState.Off;
      19. Thread.Sleep(8);
      20. }
      Display All

      Bascom Code

      Source Code

      1. '$regfile = "m168pdef.dat" 'Chipsatz
      2. $regfile = "m328pdef.dat"
      3. $crystal = 16000000 'Frequenz
      4. $baud = 57600 'Baudrate
      5. $hwstack = 100 'Speicher
      6. $swstack = 100 'Speicher
      7. $framesize = 100 'Speicher
      8. Config Portd.2 = Output 'Ausgang definieren für Shiftregister
      9. Config Portd.3 = Output 'Ausgang definieren für Shiftregister
      10. Config Portd.4 = Output 'Ausgang definieren für Shiftregister
      11. Config Portd.7 = Output ' CFG Pin für ETH Modul
      12. Config Serialin = Buffered , Size = 20 , Bytematch = 13
      13. Config Serialout = Buffered , Size = 20
      14. Dataout Alias Portd.2 'Ausgang betiteln
      15. Latch Alias Portd.3 'Ausgang betiteln
      16. Clk Alias Portd.4 'Ausgang betiteln
      17. Cfg Alias Portd.7 ' CFG für ETH Modul
      18. Dim Serialdaten As String * 20
      19. Dim Led1 As Byte
      20. Dim Neuer_befehl As Byte
      21. Enable Interrupts
      22. Do
      23. If Neuer_befehl = 1 Then
      24. Neuer_befehl = 0
      25. Input Serialdaten
      26. 'REGISTER 1
      27. Select Case Serialdaten
      28. 'LEDS EINSCHALTEN
      29. Case "11" : Print "Okay" : Led1.7 = 1 '
      30. Case "21" : Led1.6 = 1 '
      31. Case "31" : Led1.5 = 1 '
      32. Case "41" : Led1.4 = 1 '
      33. Case "51" : Led1.3 = 1 '
      34. Case "61" : Led1.2 = 1 '
      35. Case "71" : Led1.1 = 1 '
      36. Case "81" : Led1.0 = 1 '
      37. Case "12" : Led1.7 = 0 '
      38. Case "22" : Led1.6 = 0 '
      39. Case "32" : Led1.5 = 0 '
      40. Case "42" : Led1.4 = 0 '
      41. Case "52" : Led1.3 = 0 '
      42. Case "62" : Led1.2 = 0 '
      43. Case "72" : Led1.1 = 0 '
      44. Case "82" : Led1.0 = 0 '
      45. End Select
      46. Shiftout Dataout , Clk , Led1 , 1
      47. Set Latch : Reset Latch
      48. End If
      49. Loop
      50. End
      51. Serial0charmatch:
      52. Neuer_befehl = 1
      53. Return
      Display All



      Sobald ich aber folgendes beschalte:
      Nano GND -> GND ETH Modul
      Nano 5V -> 5V ETH Modul

      Nano TX -> RX ETH Modul
      Nano RX -> TX ETH Modul

      Nano D7 -> CFG0 ETH Modul
      Nano RST -> RST1 ETH Modul

      Jetzt fehlt mir in Gänze der weitere Schritt in Bascom ... Cfg muss ja irgendwie etwas machen und Reset auch! Ich habe nicht einen Ansatz wie ich das richtig verkabel und was mir in Bascom fehlt.

      Die Routine funtzt über USB perfekt!

      Unbenannt.JPG

      Jedoch über das Lanmodul gibt es keinen Rückgabewert (was logisch ist weil wohl im Programm etwas fehlt und wie ich mich kenne falsch beschaltet)
      Via Putty connecte ich mich auf das Lanmodul (via IP) (Grüne LED geht an) als Testroutine habe ich wieder den Wert "11" wenn der ü´ber Putty nun gesendet wird sagt der Atmega nun nichts mehr!

      Der Bascom und C# Code ist verkürzt auf ein Register für die Lesbarkeit hier im Forum... ansonsten können die Register einfach hintergehängt werden dann kann man damit (ich habe es so) 64 LED's einzeln und gezielt ansteuern.


      Ich würde mich freuen wenn mir jemand auf die Sprünge helfen könnte.
      Vielen Dank

      The post was edited 10 times, last by escape.3d ().

    • Ich bin verwirrt - cfg ... sorry das mir auch bewusst, dass es für die Config ist aber was auf Bascom Seite an Code benötigt wird ist mir ein Rätsel und wie nun die optimale Belegung der Pins / Ports ist.

      djmsc wrote:

      CFG ist zum konfigurieren des Netzwerks da.

      Aktuell empfange und sende ich doch über UART vom PC die Daten noch via USB aber es geht doch.
      Das ETH Modul bekommt die Daten doch nicht anders? Ist doch ein Wandler / Konverter. Wahrscheinlich verstehe ich das gerade total falsch!

      Okay ich habe mir dann Config Com1, Com2 und Comx hier angesehen.
      Dort bekomme ich die Meldung:

      Source Code

      1. Error : 345 Line : 13 UART not available for the selected micro , in File : F:\...
      Ich bin absolut Ratlos und ich habe soviel schon versucht das es nurnoch verwirrend ist. Ich habe damals 2011 schon mit dem Enc Modul Bauchschmerzen gehabt und es nicht zum laufen bekommen. Es wäre wirklich nett wenn jemand ein Example einstellen könnte wie Beschaltung und Code aussehen müssen damit dieses Modul mal antwortet.

      "Alternativ biete ich für ein fertiges Bascom Script (example) + simple Beschaltungskizze 25 Euro welches in meiner Konstellation so funktioniert" Ich bin jetzt knapp 50 Jahre alt meine Nerven liegen wieder Blank... möchte nicht wieder monatelang das Internet durchstöbern um irgendwie dann ein Eth Modul ans laufen zu bekommen ... meine Liebste reißt mir sonst den Schädel ab ;)


      Also das Angebot steht - natürlich bin ich trotzdem am Ball (aber ohne Plan wonach ich suchen soll) :)

      The post was edited 1 time, last by escape.3d ().

    • Mich interessiert so ein Modul auch, deswegen habe ich einiges betrachtet, jedoch noch nicht viel.
      logisch sein sollte, so ein Modul muss configuriert werden, zumal es etliche Parameter braucht, um in einer der möglichen Betriebsarten funktionieren zu können.
      Lese, bearbeite mal diesen Link, vielleicht hilft das momentan weiter: waveshare.com/w/upload/e/ef/CH9121_SPCC.pdf

      Bascom sollte also das Uart des Moduls so configurieren, dass es den gewünschten Betrieb realisieren kann, so habe ich es momentan verstanden.
    • Also das Modul ist von mir eingestellt habe sogar die chinesische Version von sscom5 von daxia.com zum testen hier. Die Einstellung des Moduls ist sehr einfach gestrickt: Die Werte werden dann im Anschluss auf dem Modul gespeichert. Ich denke die Lösung muss so simple wie einfach sein... nur ich komme nicht darauf :/

      Obwohl das auch Unsinn ist!

      Der Atmega weiß gar nicht wohin er antworten soll! Also es scheint so, als müsste in Bascom noch definiert werden wohin er antwortet :)
      Und genau jetzt ist der Punkt erreicht da schaltet sich gerade meine rechte Gehirnhälfte aus!
      Files
      • Unbenannt.JPG

        (227.81 kB, downloaded 25 times, last: )
    • So nun Endspurt!!!

      Er antwortet :) obwohl ich sehr verwirtt bin warum er das macht!

      5v und GND sowie RX und TX sind verbunden - nicht mehr !

      Mit sscom bekomme ich nun eine Antwort vom Modul aber ich verstehe nicht warum! Könnt Ihr die Zusammenhänge erkennen?



      (Ich denke gleich habe ich es - RST fehlt ;) )
      Files
      • Unbenannt2.JPG

        (198.61 kB, downloaded 20 times, last: )
      • 2asd.JPG

        (112.82 kB, downloaded 16 times, last: )
      • 3asd.JPG

        (122.74 kB, downloaded 19 times, last: )

      The post was edited 2 times, last by escape.3d ().

    • Klappt nicht jemand ne Idee?

      NanoETH ModulVerbunden
      5v5vcheck
      GNDGNDcheck
      RXTXcheck
      TXRXcheck
      RSTResetcheck
      ???RST1



      Ich muss mit Pushbutton den Reset auslösen danach geht es ... es scheint nun wirklich nur am Reset/RST1 zu liegen. Laut Nano und Datenblatt müsste es doch dann in Bascom so lauten (geht aber nicht!)

      Source Code

      1. Config PortD.4 = Output 'Reset
      2. ...
      3. Rst Alias PortD.4 'Ausgang betiteln
      4. ...
      5. do
      6. ...
      7. Print "okay"
      8. ...
      9. Reset Rst
      10. ...
      11. loop
      12. end
      Display All
      Files
    • Der braucht nach dem Reset eine Weile bis es startklar ist. Es ist sicher nicht richtig ihm nach jeder Nachricht zu resetten.

      PS Wie schnell folgen die Sendungen (zu seinem RX)? Welcher Timeout wurde eingestellt? Während er sendet kann er für 5ms keine Nachricht (RX) empfangen.

      The post was edited 1 time, last by Pluto25 ().

    • Pluto25 wrote:

      Der braucht nach dem Reset eine Weile bis es startklar ist. Es ist sicher nicht richtig ihm nach jeder Nachricht zu resetten.
      Das ist korrekt!
      Ich sende den Wert "11" die kommen an, er geht in die Abfrage prüft und sendet dann mit Print "okay" zurück.
      Jetzt bedarf es einem Close oder CLEAR Befehl seitens des Nano an das ETH Modul!?

      Das totaler Unsinn was ich hier mache! keine Ahnung wie weiter mormal muss irgendwas mitgesendet werden ip, port, wert damit der Mega an die richtige Adresse senden kann.
      Das dass gerade so halbwegs funktioniert .... keine Ahnung aber das ist grundlegend falsch was ich hier mache!

      The post was edited 1 time, last by escape.3d ().

    • escape.3d wrote:

      Jetzt bedarf es einem Close oder CLEAR Befehl seitens des Nano an das ETH Modul!?
      Das macht das Timeout. je nach Einstellung wartet es 4Zeichen leerlauf (bei 0 ) oder eben die eingestellten ms bevor es die Nachricht weiterleitet.

      escape.3d wrote:

      ip, port, wert damit der Mega an die richtige Adresse senden kann.
      Das braucht der Mega nicht wenn die Module vorher Konfiguriert wurden.
      Das ist ja der Vorteil an den Dingern: einmal Konfigurieren und der Mega kann es (fast) wie eine Uart Verbindung verwenden. (fast) weil er die Timeout Bedingungen einhalten muß, er darf also nicht kilobyteweise ununterbrochen sprechen und muß min 5ms warten bevor er weiterspricht.
    • Eigendlich schon (im Simulator)
      Jedoch ist Bytematch = 13 gefährlich. Meist wird nicht 13(Cr) sonder 13 10 (CrLf) gesendet. Das Lf ist beim Input noch nicht da so das es beim nächsten mal vorn im String steht.
      Und "0a 31 31 " ist nicht "11" (31 31)
      Bytematch = 10 geht auch nicht weil das input nur bis 13 liest :cursing: Ein Bug ?
      Vielleicht hinter dem Reset Latch noch clear Serialin und . Bytematch bei 13 lassen

      The post was edited 1 time, last by Pluto25 ().

    • So das läuft nun Stabil ohne Fehler!

      Für die Nachwelt :)

      Source Code

      1. Config Serialin = Buffered , Size = 20 , Bytematch = 13
      2. Config Serialout = Buffered , Size = 20
      3. Dataout Alias Portd.2 'Ausgang betiteln
      4. Latch Alias Portd.3 'Ausgang betiteln
      5. Clk Alias PortD.4 'Ausgang betiteln
      6. Dim Serialdaten As String * 20
      7. Dim Neuer_befehl As Byte
      8. Dim Led1 As Byte
      9. Config Input1 = CRLF , ECHO = CRLF
      10. Enable Interrupts
      11. Do
      12. If Neuer_befehl = 1 Then
      13. Neuer_befehl = 0
      14. Input Serialdaten Noecho
      15. 'REGISTER 1
      16. Select Case Serialdaten
      17. 'LEDS EINSCHALTEN
      18. Case "11" : Input "okay1"
      19. Case "21" : Input "okay2"
      20. Case "31" : Led1.5 = 1
      21. Case "41" : Led1.4 = 1
      22. Case "51" : Led1.3 = 1
      23. Case "61" : Led1.2 = 1
      24. Case "71" : Led1.1 = 1
      25. Case "81" : Led1.0 = 1
      26. Case "12" : Led1.7 = 0
      27. Case "22" : Led1.6 = 0
      28. Case "32" : Led1.5 = 0
      29. Case "42" : Led1.4 = 0
      30. Case "52" : Led1.3 = 0
      31. Case "62" : Led1.2 = 0
      32. Case "72" : Led1.1 = 0
      33. Case "82" : Led1.0 = 0
      34. End Select
      35. End If
      36. 'Waitms 10
      37. Loop
      38. End
      39. Serial0charmatch:
      40. Neuer_befehl = 1
      41. Return
      Display All
    • Genau das ist aktuell noch ein Problem!
      @PUTTY -> UART über USB Serial Daten mag Print aber kein Input und auch kein NOECHO auf $var -> Serialdaten und auch kein CRLF
      @SSCOM -> UART via Ethernet mag Input aber kein Print o_O möchte aber auf $var Serialdaten ein NOECHO und hier möchte er beim hinsenden zum Mega ein CRLF

      Arbeite gerade daran erstmal zu verstehen, warum das so ist!
      MIr absult schleierhaft... ich denke ich werde das nur mit rumprobieren rausfinden?!

      Wenn es so halbwegs funktioniert schreibe ich mal eine Zusammenfassung *grunz* :D


      Grüße in die Abendstunden und an die ganzen verrückten hier :D
    • Ich verwende Hterm. Dem kann man sagen was es mitsenden soll.
      Das Putty das ich hier habe sendet bei Enter nur ein Cr reagiert aber richtig auf alles was kommt.
      Bekommt es kein Lf springt es in der Zeile nach von und überschreibt die dort vorhandenen Zeichen. Das sieht bei schnellerer Folge wie ein Fehler aus. Ist aber genau das was es tun soll. So kann es als Terminal arbeiten mit Zeile rauf und was sonst noch dazu gehört. Das kann Hterm nicht. Dafür zeigt es alles was kommt. Auch dann wenn Müll (bitfehler/falsche Bautrate) kommt.

      escape.3d wrote:

      ich denke ich werde das nur mit rumprobieren rausfinden?!
      Wird aber schwierig. Einfacher den Transport ansehen z.B. mit Wireshark. Dann solte sich schnell herausstellen wie das SSCOM auf Steuerzeichen reagiert.
      PS Auch Putty kann per Ethernet arbeiten. Das kann auch zeigen wo und ob das SSCOM "bockt"
    • Ich bleibe am Ball und wenn ich ein aufgebautes funktionierendes Model hier habe, gibt es eine kleine Anleitung dazu.
      Wobei ich UART via ETH / LAN für bescheuert*** halte... es ist nur der geringste Weg des Wiederstandes.

      ***Ich wüsste nicht wie ich das sonst umsetzen sollte (zum Thema bescheuert) ;)

      Grüße
    • Ein W5500 wäre auch möglich, bedarf mehr Reccorcen und Progammierarbeit, kostet auch nicht weniger und war bei mir eine "Diva", sehr empfindlich, ständig abgestürzt :(
      Dann gibts noch den ENC28J60. Bei mir recht stabiel, günstiger aber so richtig viel Recourcen und Programmierarbeit.

      Oder wenn's Wlan sein soll/darf wäre ein Esp recht günstig und braucht nur wenig Programmierarbeit.