Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ThorstenGehrig
    antwortet
    Hi
    hier auchnochmal für alle: meine KNX-Lib hatte die funktionen
    groupWrite2ByteInt und groupAnswer2ByteInt nicht richtig implementiert (die groupAnswer2ByteFloat haben aber gepasst).
    Ich habe die Lib gerade aktualisiert: https://bitbucket.org/thorstengehrig...forum/overview
    Für die maintainer der Forks: bitte übernehmen (wenn nicht schon geschehen)

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Bonscha,

    muss mir das mit dem Nano erst genauer anschauen.
    Habe nur einen flüchtigen Blick in den Schaltplan des NANO geworfen.
    An der Hardware habe ich noch nichts getestet.

    Trennen ist zu endgültig, dann sind ja die Vorteile der USB-Programmierung komplett weg.
    Vielleicht ergibt sich ja eine bessere Alternative, das Datenblatt des FTDI wird vielleicht Auskunft geben.



    Mit freundlichen Grüßen

    Mag Gyver



    Einen Kommentar schreiben:


  • Bonscha
    antwortet
    Hallo Mag Gyver, vielen Dank für deine Mühe. Ich habe endlich einen ATMega zum Testen und mache mich dann mal ran. Was müsste ich am Nano denn ändern, damit das läuft? Einfach die Pins vom FTDI, die an RxD und TxD gehen, trennen?

    Einen Kommentar schreiben:


  • Mag Gyver
    antwortet
    Hallo Bonscha,

    dein Code funktioniert. Leider ist dieser etwas unvorteilhaft geschrieben. Hier mal ein Beispielcode für UNO:

    Code:
    #include <KnxTpUart.h>
    
    KnxTpUart knx(&Serial, "1.1.199");
    int LED = 13;
    boolean target_15_0_0;
    
    
    void setup() {
    
      pinMode(LED, OUTPUT); // Setting up status LED
    
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
    
      knx.uartReset();
    
      knx.addListenGroupAddress("15/0/0");
    }
    
    
    void loop() {
    
    }
    
    
    void serialEvent() {
      //Get Serial Event
      KnxTpUartSerialEventType eType = knx.serialEvent();
    
      //Check Serial Event
      if (eType == KNX_TELEGRAM) {
        KnxTelegram* telegram = knx.getReceivedTelegram();
    
        // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
        String target =
          String(0 + telegram->getTargetMainGroup())   + "/" +
          String(0 + telegram->getTargetMiddleGroup()) + "/" +
          String(0 + telegram->getTargetSubGroup());
    
        // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
          // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
          if (target == "15/0/0") {
            target_15_0_0 = telegram->getBool();
            if (target_15_0_0) {
              digitalWrite(LED, HIGH);
            }
            else {
              digitalWrite(LED,LOW);
            }
          }
        }
      }
    }

    Der Empfang funktioniert auch, auf dem UNO und MEGA.

    DER GND TP-UART mit dem GND des Arduino zu verbinden (Ausnahme -> Optokoppler)

    Beim UNO "void serialEvent()" sollte folgendes gemacht werden:
    • (Nicht bei Erstprogrammierung, da gibt es keine Brücke zum entfernen) Die Brücke am (ICSP1 Pin 5 mit ICSP1 Pin 6) entfernen
    • (Nicht bei Erstprogrammierung, nicht notwendig der ATmega 16u2 ist nicht im Programmiermodus) Den USB-Stecker ausstecken und wieder einstecken (Zwischen dem Ein- und Ausstecken ein bisschen Zeit vergehen lassen)
    • Programmieren des UNO ohne angesteckten TP-UART (RxD,TxD).
    • Nachdem Programmieren eine Brücke zwischen ICSP1 Pin 5 und ICSP1 Pin 6 herstellen
    • Den TP-UART (RxD,TxD) (wieder)anschließen
    • Resettaster am Arduino kurz drücken
    Beim MEGA "void serialEvent1()" :
    • Programmieren über USB "Serial"
    • TP-UART (RxD,TxD) an "Serial1" anschliessen
    Der NANO sollte eigentlich auch funktionieren, doch hier ist der Serial direkt an den FTDI angeschlossen.
    Dies könnte mit hoher Wahrscheinlichkeit das Problem sein.
    Keine Möglichkeit den FTDI abzuschalten, kann wahrscheinlich nur durch eine Hardwareeingriff gelöst werden.
    Aber danach kann man den NANO nicht mehr per USB programmieren nur noch über ISP.


    Mit freundlichen Grüßen

    Mag Gyver
    Zuletzt geändert von Mag Gyver; 15.11.2015, 08:02.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Wow, schon 50 Seiten. Nun ja, auf zu den nächsten 50.

    Und damit wir da bald hinzukommen, hier eine neue tolle Erkenntnis:

    Ich hab ja schon in einem anderen Thread vom Espressif ESP8266 berichtet. Das Ding hat 4MB Speicher und viele Mhz "Rechenleistung" (hab von 80Mhz gelesen?).
    Und da sich der ESP auch mit der Arduino IDE programmieren lässt, wäre es theoretisch möglich, den KnxStack mit dem ESP zu nutzen oder zur Not ohne viel Aufwand zu portieren.

    Kleiner Vergleich AVR Arduino zu ESP8266:
    Arduino Micro ESP8266, als "NodeMCU DevKit"
    RAM 2.5k 32k + 80k (was die +80k bedeuten weiß ich noch nicht genau)
    Flash 32k (davon 8k für den Bootloader) 4MB
    Eeprom 1k keinen, dafür aber 4MB benutzbaren Flash
    CPU 16Mhz 80Mhz (??)
    WLAN nein ja
    Straßenpreis (günstigstenfalls) ab 8..9EUR bei ebay, aliexpress: ähnlich rund 8EUR bei ebay, über z.B. aliexpress für knapp 4EUR


    Vielleicht traut sich ja jemand ran damit KNX auszuprobieren (komm grad selbst nicht dazu).

    Hier noch ein paar Links:

    http://www.voti.nl/blog/?p=52
    http://neilkolban.com/tech/esp8266/
    http://www.espressif.com
    http://www.nodemcu.org

    Einen Kommentar schreiben:


  • Masifi
    antwortet
    Hallo Zusammen,

    ich sehe das Ihr hier auch schon einiges geschafft habt. Ich arbeite auch mit KNX und Arduino.
    Würde mich freuen wenn Ihr mal in meinen Forum-Eintrag vorbeischaut.

    https://knx-user-forum.de/forum/%C3%...y-monitor-oder

    Vielleicht ergeben sich daraus noch Synergien :-)

    MFG Mat
    You do not have permission to view this gallery.
    This gallery has 2 photos.

    Einen Kommentar schreiben:


  • Bonscha
    antwortet
    So ein Teil wäre wirklich mal was... Ansonsten hier evtl. eine schnellere Alternative: http://www.amazon.de/SainSmart-Logik...logic+analyzer
    Na zumindest finde ich es gut zu wissen, dass am Code nichts falsch zu sein scheint. RX habe ich an TX angeschlossen und umgekehrt. Wie gesagt, Senden geht ja.

    Ich werde mal ein wenig rumprobieren, vielleicht bekomme ich den Mega2560 ja wieder hin.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Danke für den günstigen Tipp.

    Einen Kommentar schreiben:


  • l0wside
    antwortet
    Das hier bestellen: http://www.ebay.de/itm/24MHz-8CH-USB...8AAOSwyQtV6XEJ, vier Wochen warten (wg. China-Versand), nachschauen statt spekulieren.

    Wer ein schlechtes Gewissen hat, nimmt das hier: http://elmicro.com/de/saleae-logic.html (Logic 4 oder Logic 8). Ist das gleiche, aber vom Original-Hersteller.

    Oder Oszilloskop organisieren.

    Max

    Einen Kommentar schreiben:


  • vento66
    antwortet
    Zitat von Bonscha Beitrag anzeigen
    Ich kann ja auch auf den Bus senden, nur der Empfang klappt nicht. Der Nano hat nur die "Serial".
    Das Problem hatte ich auch. Hab es aber mangels Zeit nicht nachverfolgt. Mein Sketch läuft auf einem Mega einwandfrei.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Bist du dir sicher dass die RX-Leitung zum BCU korrekt angeschlossen ist?

    Ich würde trotzdem mal den PC statt den BCU dran hängen. Nur um sicher zu gehen dass die RX-Seite funktioniert.

    Einen Kommentar schreiben:


  • Bonscha
    antwortet
    Ich kann ja auch auf den Bus senden, nur der Empfang klappt nicht. Der Nano hat nur die "Serial".
    Zuletzt geändert von Bonscha; 30.10.2015, 12:14.

    Einen Kommentar schreiben:


  • tuxedo
    antwortet
    Bist du sicher dass "serialEvent()" korrekt ist? Je nach Arduino und Schnittstelle kann es auch "serialEvent1()" sein ... Wobei, dann müsstest du ja auch "Serial1" initialisieren, und nicht "Serial" ...

    Würde an deiner Stelle erstmal prüfen ob die Serielle Schnittstelle sauber funktioniert. D.h. statt den BCU mal den Rechner dran hängen und mit dem Rechner daten schicken. Wenn das mit einer BCU Kompatiblen Baud-Rate funktioniert, kannst du wieder auf den BCU umschwenken.

    Einen Kommentar schreiben:


  • Bonscha
    antwortet
    Besitze zwar zwei ATMega2560, leider aber einer zerschossen und der andere nicht programmierbar.
    Mein aktueller Code (Karduino-Library, läuft ansonsten auch) soll die LED anschmeißen, sobald SerialEvent getriggert wird:
    Code:
    #include <Arduino.h>
    #include <EEPROM.h>
    
    // für den KNX Zugriff
    #include <KnxTelegram.h>
    #include <KnxTpUart.h>
    #include <KnxDevice.h>
    
    KnxTpUart knx(&Serial, PA_INTEGER(1, 1, 199));
    int LED = 6;
    
    
    void setup() {
    
      pinMode(LED, OUTPUT); // Setting up status LED
    
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
     
      knx.uartReset();
      knx.setListenToBroadcasts(true);
    
      knx.addListenGroupAddress(GA_INTEGER(15, 0, 0));
    
    }
    
    
    void loop() {
    }
    
    
    void serialEvent()
    {
      digitalWrite(LED, HIGH);
      //Get Serial Event
      KnxTpUartSerialEventType eType = knx.serialEvent();
     
      //Check Serial Event
      if (eType == KNX_TELEGRAM)
      {
        
        KnxTelegram* telegram = knx.getReceivedTelegram();
    
        // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
        String target =
          String(0 + telegram->getTargetMainGroup())   + "/" +
          String(0 + telegram->getTargetMiddleGroup()) + "/" +
          String(0 + telegram->getTargetSubGroup());
    
        // Auswertung der Gruppenadresse des empfangenen Telegrammes und Zwischenspeicherung in Variable target
        if (telegram->getCommand() == KNX_COMMAND_WRITE)
        {
          // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
          if (target == "15/0/0") {
            
          }
        }
      }
    }
    Natürlich tut sich einfach nichts... Und da diese Funktion nicht mal aufgerufen zu werden scheint, benötige ich vermutlich auch keinen tiefergehenden Debug-Code?

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Mit dem Empfangen von Telegrammen (serialEvent) hatten schon einige probleme hier im Thread beschrieben. Bau dir mal ein bisschen debug-code ein wo du Landest mit den empfangenen programmen...

    Einen Kommentar schreiben:

Lädt...
X