Atmel ATmega/Arduino Entwicklung allgemeine Fragen


  • Ja, damals hab ich nicht so richtig im VDR Forum gestöbert weil ich ein Standalone XBMC habe und kein VDR mit XBMC.


    [quote]
    Über USB CDC geht es nur, wenn man die libusb benutzt - nur dann lassen sich ordentliche Geschwindigkeiten erreichen. Ansonsten funktioniert das ganze auch nicht mit dem seduatmo-Plugin, wenn man eingach Daten an /dev/ttyACM0 sendet. Ob boblight direkt mit libusb arbeiten kann, weiss ich nicht.


    libusb ist keine Option denke ich weil ich nichts an den Plugins entwickeln/ändern werde.
    Also muss ich wohl doch neue Hardware kaufen, was nicht so schlimm ist, denn Arduinos kann man nie genug haben ;) und die Kosten sind jetzt auch nicht wirklich hoch ( < 10 Euro)
    Was müsste ich mir denn jetzt kaufen wenn ich für schmales Geld einen FTDI haben will und am liebsten ein Arduino in der Nano Größe?
    Gehen die beiden Sachen: FTDI Board und zusätzlich ein Arduino Nano ohne USB zB: Nano ?
    Muss man noch etwas spezielles beachten wegen 3.3V/5V ?


    Ich habe übrigens vorhin erst gesehen, dass es die Nanos auch ohne integrierten USB Port gibt. Deshalb hatte ich auch nicht bei meinem ersten Posting kapiert wie das FTDI-Board mit dem Nano verbunden wird.


    TheChief: Du hast also bei dir so eine Kombination aus Arduino Nano und FTDI-Breakout Board am laufen?


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Ich hab einen Duemilanove mit FTDI Chip onBoard, auch beim Chinamann gekauft. Link in dem anderen Thread. Hab aber auch noch einen mit pl2303, also aufpassen beim Kauf.


    Zitat

    libusb ist keine Option denke ich weil ich nichts an den Plugins entwickeln/ändern werde.


    In Boblight gibts zum besipiel das lightpack-device, welches libusb nutzt. Zur Not eben da abschauen und ein eigenes Device basteln.

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB


  • Die Baudrate wird ohnehin begrenzt sein, da der USB Chip von FTDI mit dem VCP Treiber im recht langsamen Full Speed benutzt wird (inkl overhead 12MBit auf der USB Seite), für mehr Speed hätte der d2xx Treiber verwendet werden müssen. Vermutlich wird die Baudraten Einstellung intern ohnehin ignoriert. Ab bis knapp über 1Mbit ist sicher möglich - falls der arduino nicht mit anderen Aufgaben beschäftigt ist, z.B. dem Ansteuern von LEDs.


    Also mir ging es eigentlich darum, dass ich mit meiner vorhandenen Hardware (Arduino Uno oder was mir lieber wäre der Arduino Nano) ein schnelles Boblight aufbauen kann welches nicht nur mit mikrigen Baudraten von 9600 bzw. 19200 arbeitet. Mit Raten von 57600 Baud wäre ich zufrieden. Wenn du schreibst, dass evtl. rund 1 MBit Übertragungsrate drin ist müssten die 57600 Baud ja irgendwie annähernd bei mir erreichbar sein. Mein Verständnis ist es, dass das Problem der geringen Baudrate beim Arduino Nano einzig an dem Chip + Treiber für die USB-Anbindung liegt.
    Wenn man einen anderen Treiber benutzt muss dann im BoblightPlugin was umcodiert werden oder wie muss ich das verstehen? Das sind aber dann Stellen wo ich nichts drehen kann und will, davon hab ich leider keine Ahnung.


    Zitat

    Was willst du damit erreichen? Du willst ein externes Board mit dem arduino verbinden, welches den gleichen Chip wie onboard in fast 1:1 der gleichen Konfiguration verwendet - wozu? Dieses Board ist eig. für winzige und billige arduinos gedacht, wie die aus Platzgründen auf den USB-Port und den FT232 verzichten.


    Wie gesagt, ich dachte (untermauert durch die Aussagen und Erfahrungen von TheChief), dass der USB-Chip (PL2303) auf dem Nano und dessen passender Treiber schlecht implementiert sind (Software Handshake oder sowas ähnliches hab ich irgendwo aufgeschnappt) und dadurch die Übertragungsrate begrenzt ist auf die mageren 9600 Baud bzw. 19200 Baud.
    Mit einem USB-Chip von FTDI (der ist auf dem USB-Breakoutboard in meinem Link) und dessen Treiber sind weitaus höhere Übertragungsraten möglich. Das Ganze wollte ich mit dem Arduino Mini (sorry, ich habe erst jetzt gesehen, dass der Arduino ohne integriertem USB Anschluss Arduino Mini genannt wird) verbinden. Beide Boards kosten zusammen unter 9 Euro. Mein vorhandes Arduino Nano kann ich für andere Sachen benutzen wo es nicht auf schnelle Datenübertragung über USB ankommt.



    Zitat

    Unter Linux ist der USB Port als USB cdc device sichtbar. Warum testest du nicht selbst mit der Arduino IDE unter Linux, das beantwortet doch deine Frage besser als es jeder hier im Thread könnte ?


    Ich habe kein Desktop Linuxsystem zum ausprobieren. Kenne mich auch nicht so gut mit Linux aus, habe nur ein XBMC auf ner fertigen OpenElec Distri und ein VDR auf ner MLD Server Distri am laufen.
    In dem XBMC gibts das Boblight Plugin + Boblightd fertig aktivierbar, das schafft selbst eine Linux-Laie wie ich.
    Aber sehe ich das jetzt richtig und ich kann durch ändern des Devices in der boblight.conf den USB Port als CDC Device ansprechen ohne sonstige Änderungen?
    Im Moment habe ich in der Config stehen: output /dev/ttyACM0


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Nur fürs Protokoll:
    Ich habe jetzt mal den Arduino Nano mit dem FT232 onboard gegen ein Arduino Pro Mini + seperates FTDI Board getauscht. Und siehe da, die Probleme mit der schlechten USB Baudrate sind weg. Ich kann jetzt das Board mit einer Baudrate von 115200 betreiben.


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Mal ne Frage: Ich würde gerne zu Testzwecken Boblight-kompatible Daten über den COM Port an den Arduino (mit Boblight Sketch) senden. Ich programmiere in Java und benutze dazu die RxTx Library, die ist sehr verbreitet wenn man mit Java etwas auf COM Ports empfangen oder senden will. Mit einem Port Monitor kann ich unter Windows schauen was da so übertragen wird. Die reinen Header+Nutzdaten sehen aus wie die die von einem Boblight Daemon an den Arduino gesendet werden, sollten also stimmen. Es scheint aber viel mehr Handshake oder Statusabfragen oder sowas dazwischen zu sein. Jedenfalls bekomme ich die LED-Streifen nicht zum Leuchten.
    Hat jemand schonmal versucht mit nem Javaprogramm ein Boblight zum leuchten zu bekommen? Vielleicht hat jemand nen Tipp oder ne Idee woran das liegen könnte?


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Hi,


    ich tippe mal, das Du eventuell eine unpassende "device" / "type" Kombination in der /etc/boblight.conf verwendet, am einfachsten ist der Typ momo...


    Bei diesem Typ wird prefix + (RR + GG + BB ... * channels) + postfix gesendet.



    Die Typen momo, atmo, karate, sedu verwenden CDeviceRS232, wo die Daten für mehrere Kanäle recht transparent rausgehen.
    Ansonsten mal boblight/src/device/devicers232.cpp anschauen, z.B Typ KARATE hänge eine Checksum an, atmo und sedu habe je ein eigenes PRE- UND Postfix ...



    Wenn ich mir deviceltbl.cpp anschaue, geht zwar auch über rs232, hat aber halt ein spezielles Datenformat und sowas

    Code
    //send 255 times 0x55 for auto-baud, and 3 times 0xFF to get the rs232 sync back
      memset(buff, 0x55, 255);
      buff[255] = 0xFF;
      buff[256] = 0xFF;
      buff[257] = 0xFF;
  • Ah sorry, habe es oben evtl. missverständlich beschrieben. Mein Boblight funktioniert mit dem original Boblight Daemon. Der sendet 6 Byte HeaderInfo (41 64 61 00 28 7D) + jeweils 3 Byte RGB pro LED (also zusammen 126 Bytes). Das bringt die LEDs auch zum leuchten (Typ ist übrigens Mono-Light in der boblight.conf).
    Ich wollte aber zu Testzwecken und weil ich mir ein eigenes Kalibriertool schreiben möchte die LEDs mit einem eigenen Javaprogramm ansteuern. Dabei wollte ich auf Arduinoseite den Sketch behalten der auch mit dem Boblight Daemon funktioniert. Wenn ich aber die 126 Bytes per Java (mit RxTx-Lib) übertrage bekomme ich die LEDs nicht zum Leuchten. Mit einem Software Port-Monitor habe ich mir angeschaut was da übertragen wird und festgestellt, dass die Nutzdaten passen, es sind die gleichen wie der Boblight Daemon sendet. Aber dazwischen kommen sehr viele andere "Daten" die irgendwas mit Handshake oder sowas zu tun haben könnten. Ich kann die Meldungen in dem Port-Monitor nicht wirklich interpretieren. Ich schreib morgen mal was da auf dem Bildschirm steht. Vielleicht kann dann jemand erkennen wo das Problem liegt.
    Ich dachte, dass evtl. jemand schonmal sein Boblight selbst mit einem Javaprogramm angesteuert hat und auf ähnliche Probleme gestoßen ist.


    Gruß
    Jarny

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

  • Hi,


    Zum schnellen Testen, kann ich nur einen Python-Skript anbieten,


    numPixels und prefix anpassen, nicht vergessen.


  • Danke fürs Skript aber mir gehts gerade um die Ansteuerung per Java. Ich setze wahrscheinlich irgendeinen Modus nicht richtig oder sowas.


    Gruß
    Jarny


    *edit*
    So, ich hab jetzt endlich ein Quelltext gefunden wo auch mit Java ein Arduino Boblight angesteuert wird. Habe mein Fehler entdeckt, war nur ne Kleinigkeit in meinem Code mit sinnlosen Delays. Werde mich demnächst also mal mit Kalibrierung beschäftigen können.

    MLD 3.0.3 Server. Aufnahmen schaue ich mit einem separaten XBMC (OpenElec Distribution) im Wohnzimmer am 47 Zoll HD Fernseher

    Einmal editiert, zuletzt von jarny ()

  • Ich habe auf Arduino Basis und Ethernet Shield einen kleinen Webserver gebaut.


    Erstaunlich was man mit der 16mhz CPU so alles machen, nur eine Ram Extention habe ich an dem Mega Board dazugesteckt weil der HTML Code inzwischen doch immer umfangreicher wurde.


    So nun zum Problem, auf einer HTML Unterseite habe ich einige Buttons drin.
    Beim Drücken derselben sendet der Webbrowser via POST Daten zum Server (Arduino) dort parse ich, und schalte Relais ein oder aus.
    Auf der HTML Seite wird auch angezeigt, ob das Relais an oder aus ist.


    Der HTML Code für einen Button schaut in etwa so aus:


    Code
    <div id="output1">
    <table border='1' width='200' cellpadding='5'>
    <tr bgColor='#222222'>
    <td align='center' bgcolor='#222222'><form method="post"><input type=submit name=1 value='Einschalten'></form></td>
    <td align='center' bgcolor='#222222'><form method="post"><input type=submit name=1 value='Ausschalten'> </form></td>
    <td align='center'><font color='red' size='5'>AUS
    </table>
    </div>


    Solange nur ein Client online ist funktioniert dies. Wenn nun ein zweiter Client auf die Seite geht, und einen anderen Button drückt, der Server schaltet das Relais. Die Anzeige auf den Cleint 2 stimmt dann mit dem überein was der Arduino macht.
    Auf Client 1 stimmt diese natürlich nicht, also drücke ich die refresh Taste am Browser.
    Und dieser schickt dann die alte Post Message, also von dem Button der vorher mal gedrückt wurde.


    Also ein Refesh schickt ein Post Message eines Buttons der vorher mal gedrückt wurde.
    Der Browser hat das wohl im Cache.
    Gibt es eine Abhilfe für dieses Verhalten ?

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Gibt es eine Abhilfe für dieses Verhalten ?


    Nicht auf refresh klicken? ;)

    Auf Client 1 stimmt diese natürlich nicht, also drücke ich die refresh Taste am Browser.


    Da ich vor knapp zwei Jahren auch mal sowas gebastelt hab (allerdings auf 'nem Due, der Uno war allein mit den nötigen Libs schon ganz gut befüllt): ich habe das alles per Javascript gemacht. Im Prinzip heißt das, die Verbindung permanent offen halten, so dass der Server jede Statusänderung sofort senden kann. Mit mehreren Clients hab ich's allerdings gar nicht erst getestet, das wäre mir zu viel Verwaltungsaufwand geworden (Sessions verwalten, mit mehreren EthernetServer-Objekten jonglieren).


    Wer alkoholfreies Bier trinkt, wählt auch kompetenzfreie Politiker [frei nach Volker Pispers]

  • Mit mehreren Clients hab ich's allerdings gar nicht erst getestet, das wäre mir zu viel Verwaltungsaufwand geworden (Sessions verwalten, mit mehreren EthernetServer-Objekten jonglieren).

    Das ist wohl nicht das Problem, mit der Ethernet Lib funktioniert dies im Prinzip.
    Es geht nur darum, das die Anzeige auf den anderen Clients aktuell ist wenn was geändert wird.


    Wenn ich die ganze Seite so refreshe

    Code
    <meta http-equiv="refresh" content="5" >


    Funktioniert alles wie gewollt, das will ich aber vermeiden, da die Seite recht umfangreich ist.
    Da der Server sowie schon seine Daten von einem Webspace holt, wäre nur der Refresh des DIV Tag's denkbar.


    Der Arduino schreibt die Schalterstellungen via PHP Script auf den Webspace.
    Dort gibt es ein PHP Script der Anhand der Daten den DIV Tag aufbaut.
    Die Webseite hat einen Ajax Code der dieses Script via Autorefresh anstößt.


    So ist mein Plan wie es laufen könnte.


    Durch das Webserver Projekt habe ich meine C(++) Kenntnisse deutlich verbessern können, zwangsläufig auch HTML und Java.
    Jetzt kommt wohl noch php und Ajax hinzu, muss mir halt alles erst anlesen.
    Als Autodidakt braucht man ein Projekt um weiterzukommen, das Erfolgserlebnis braucht man wohl.


    PS: Was wirklich nervt, ist das der ein und selbe HTML/Java Code auf verschiedenen Browsern unterschiedlich laufen.
    Man kann dies zwar im Code differenzieren, auf den Arduino System wird das aber zu aufwendig.

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

    Einmal editiert, zuletzt von rudirabbit ()

  • An dieser Stelle gleich eine Frage.


    Dieser Testcode einer Html Seite soll den DIV Tag output1 aktualisieren, tut es auch aber nur wenn test.php und der HTML Code der Seite auf dem Server liegen.
    Habe ich den HTML Code local auf den Rechner und fasse test.php auf den Server an (also Pfad angepasst) funktioniert es nicht mehr.


    Später soll die Seite vom Arduino zu den Browsern geschickt werden und von dem Script auf den ext. Server refreshed werden.
    Das wird dann aber wohl nicht funktionieren können ??


    Code
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script type="text/javascript">
    
     $(document).ready(function() {
       	$("#output1").load('test.php');
       	var refreshId = setInterval(function() {
          	$("#output1").load('test.php?' + 1*new Date());
       	}, 1000);
    	});

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Bin nicht sicher, ob ich dein Konzept verstanden hab:
    Arduino <--> externer Webserver <--> Clients ?
    Dann sollte das mit jedem gängigen js-framework eigentlich gehen.
    Der js-code muss "nur" dafür sorgen, dass jeder Client nach dem Seitenaufbau eine Anfrage nach neuen Daten sendet - der Server kann dann jederzeit (also z.B. sobald er selbst neue Infos vom Arduino bekommt), von sich aus eine Antwort senden. Sinnvollerweise dann Ajax-mäßig nur die relevanten Daten (Schalterstellungen) statt einer komplettten Webseite.


    Wer alkoholfreies Bier trinkt, wählt auch kompetenzfreie Politiker [frei nach Volker Pispers]

  • Bin nicht sicher, ob ich dein Konzept verstanden hab:


    Arduino <--> externer Webserver <--> Clients ?

    Ich habe es zwar anders gemeint, aber nach Überlegung macht es keinen Sinn die Websiten auf dem Arduino zu haben.
    So wie du beschreibst, also der Arduino schickt nur die Daten zum ext. Webserver macht es mehr Sinn.


    Leider muss ich dazu das bestehende Projekt komplett ändern.

    VDR 1 (SD) : ASRock A330 GC, 1 GB RAM, TT- FF Karte rev. 2.3, 7'' TFT, Lirc X10 - Selbstbau Gehäuse - Suse 11.3 (64) vdr-1.7.10 diverse Plugins
    VDR 2 (HD) : MSI G41M-P25, 2 GB RAM, E6700 2x3.20GHz, Gainward GT220, 2TB HD, Lirc X10, TT S2-3600 USB, TT S2-1600, - Suse 11.3 (64) NvidiaTreiber 260.19 vdr-1.7.18 - xineliboutplugin 1.0.90 cvs, xine-lib 1.1.90 , s2-liplianin DVB Treiber

  • Leider muss ich dazu das bestehende Projekt komplett ändern.


    Das gehört bei solchen learning-by-doing-Projekten wohl dazu, geht mir jedenfalls regelmäßig so...


    Wer alkoholfreies Bier trinkt, wählt auch kompetenzfreie Politiker [frei nach Volker Pispers]

  • Sinnvollerweise dann Ajax-mäßig nur die relevanten Daten (Schalterstellungen) statt einer komplettten Webseite.


    Stimmt, der Arduino könnte das schon in JSON ausliefern.


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Ich suche aktuell für ein anderes Projekt ein Arduino Bluetooth-Shield, dass mit iDevices und Android kompatibel ist. Heisst, ich kann mich per Telefon oder Pad mit dem Bluetooth Shield verbinden und Behfehle an den Arduino senden. Kann da jemand was empfehlen?

    - Client1: Thermaltake DH 102 mit 7" TouchTFT * Debian Stretch/vdr-2.4.0/graphtft/MainMenuHooks-Patch * Zotac H55-ITX WiFi * Core i3 540 * 4GB RAM ** Zotac GT630 * 1 TB System HDD * 4 GB RAM * Harmony 900 * satip-Plugin

    - Client2: Alfawise H96 Pro Plus * KODI
    - Server: Intel Pentium G3220 * DH87RL * 16GB RAM * 4x4TB 3.5" WD RED + 1x500GB 2.5" * satip-Plugin
    - SAT>IP: Inverto iLNB

  • Hallo, baue gerade eine Wetterstation mit DCF und Arduino.


    Dabei bin ich über das hier gestolpert. leider in C# verfasst.
    ...


    Nabend,
    hat ihr jemand was für C gefunden? (Auch wenn der originale Post schon sehr alt ist! ;) )
    Eventuell auch gerne per PM. Danke. :)


    Viele Grüße, Uwe

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!