Ankündigung

Einklappen
Keine Ankündigung bisher.

Erste Schritte_Sketch_Konnekting

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

    #16
    ich sehe schon mal ein Paar (Verständis)Probleme:
    1. Leonardo hat ATMEGA32U4 Prozessor, somit wird für DEBUG Serial (USB) verwendet und für KNX: Serial1 (D0, D1). Somit wird das Teil mit SoftSerial gar nicht gebraucht
    2. dein Leonardo hat im EEPROM sehr viel Müll (wohl von den letzten versuchen). Also bitte zuerst EEPROM löschen, z.B. Damit:
    Code:
    #include <EEPROM.h>
    
    int LEDpin = 13;
    
    
    void setup()                    
    {   
    
        for (int i = 0 ; i < EEPROM.length() ; i++) {
            if (EEPROM.read(i) != 0xFF){
                EEPROM.write(i, 0xFF);
            }
        }
    
        pinMode(LEDpin, OUTPUT);
        digitalWrite(LEDpin, HIGH);
    }
    
    void loop()                    
    {
    
    }
    Warte bis LED aufleuchtet. Danach kannst wieder dein Sketch einspielen.

    3. Ich habe dein Sketch extra für dein Leonardo Board angepasst:
    Code:
    //Knxdevice Header hinzufügen
    #include <KonnektingDevice.h>
    
    //Header eigenes Gerätes hinzufügen
    #include "kdevice_LEDTest.h"
    
    //#########################
    //## DEBUG KONFIGURATION ##
    //#########################
    #define KDEBUG //kommentieren, um Debugmodus zu deaktivieren
    #ifdef KDEBUG
    #include <DebugUtil.h>
    #define DEBUGSERIAL Serial //USB Port fuer Seriellekonsole
    #endif
    
    //###################ENDE DEBUG KONF######################################
    
    
    
    #define KNX_SERIAL Serial1 // Serial Port fuer KNX an D0/D1-Pins
    // Einstellung der ProgLED und ProgTaster
    #define PROG_LED_PIN LED_BUILTIN
    #define PROG_BUTTON_PIN 3
    
    //Einstellung der IO´s
    #define OUT1 5
    
    
    //Rückruffunktion, um die KO´s Updates to behandeln
    
    void knxEvents(byte index){
    Debug.println(F("ComObj Index : %d"), index);
      switch(index){
        case 0: //KO "schalten"
            if (Knx.read(0)){
                digitalWrite(OUT1, HIGH);
                Debug.println(F("Toggle Out1: on"));
            } else {
                digitalWrite(OUT1, LOW);
            }
            break;
         default:
            break;
      }
    }
    
    
    void setup() {
      // debug related stuff
    #ifdef KDEBUG
    
        // Start debug serial with 115200 bauds
        DEBUGSERIAL.begin(115200);
    
    
        while (!DEBUGSERIAL) //Warte bis SerialMonitro aufgemacht wird
    
    
        // make debug serial port known to debug class
        // Means: KONNEKTING will sue the same serial port for console debugging
        Debug.setPrintStream(&DEBUGSERIAL);
    #endif
    
        Debug.print(F("KONNEKTING DemoSketch\n"));
    
      pinMode (OUT1, OUTPUT);
      //Initialisierung des Arduinos
      Konnekting.init(KNX_SERIAL,PROG_BUTTON_PIN,PROG_LED_PIN,MANUFACTURER_ID,DEVICE_ID,REVISION);
    }
    
    
    
    void loop(){
      //Behandeln von KNX-Telegramme
      Knx.task();
       if(Konnekting.isReadyForApplication()){
    
         //Knx.write(0,255);
    
    
    
      }
    }
    4. in dem oberen Post, wo du deine XML Datei gepostet hast, steht:
    Code:
    [COLOR=#0000FF]<Flags>52</Flags>[/COLOR]
    D.h. dieses ComObject wird nur SENDEN aber nichts empfangen.
    Da du aber empfangen möchtest, muss da
    Code:
    [COLOR=#0000FF]<Flags>42</Flags>[/COLOR]
    stehen.

    Mir fehlt noch deine "kdevice_LEDTest.h" Datei, die du eigentlich mit dem CodeGenartor aus deiner XML Datei erstellen sollstest und somit im Sketch
    Code:
    #define MANUFACTURER_ID 262
    #define DEVICE_ID 1
    #define REVISION 0
    nicht mehr brauchst.
    Wenn du die "kdevice_LEDTest.h" Datei selber erstellen willst ist natürlich kein Problem, musst aber wisses was du da eintragen sollst. Da wird wohl das ComObj wohl wieder nur als Ausgang kopnfiguriert...

    Wenn ich die XML von oben durch den Code Creator durchjage, kommt so eine Datei raus (inkl. Korrektur):
    Code:
    #define MANUFACTURER_ID 262
    #define DEVICE_ID 1
    #define REVISION 0
    
    #define COMOBJ_switch 0
    
    KnxComObject KnxDevice::_comObjectsList[] = {
        /* Index 0 - switch */ KnxComObject(KNX_DPT_1_001, 0x2a)
    };
    const byte KnxDevice::_numberOfComObjects = sizeof (_comObjectsList) / sizeof (KnxComObject); // do not change this code
    
    byte KonnektingDevice::_paramSizeList[] = {
    
    };
    const byte KonnektingDevice::_numberOfParams = sizeof (_paramSizeList); // do not change this code

    Kommentar


      #17
      Hallo Eugen,
      ich häng mich mit einer Verständnisfrage gleich an. Will ja auch noch was lernen
      Zitat von Eugenius Beitrag anzeigen
      ... Somit wird das Teil mit SoftSerial gar nicht gebraucht
      Es ist aber auch nicht falsch, die ganzen Konfigurationen drinnen zu lassen. Es wird trotzdem das richtige ausgewählt, auf Basis des definierten Prozessors. Golpe SoftSerial kannst du in diesem Fall ignorieren, weil dein Leonardo ja ein paar Zeilen darüber schon richtig konfiguriert wurde.

      Zitat von Eugenius Beitrag anzeigen
      dein Leonardo hat im EEPROM sehr viel Müll
      Wo siehst du das?

      Danke,
      Christoph

      Kommentar


        #18
        Hallo Eugenius ,

        erstmal vielen Dank für deine Antwort.
        Ich habe dein angepasstes Sketch drauf gespielt, nachdem ich die .xml Datei angepasst habe.
        EugeniusSketch;
        Code:
        //Knxdevice Header hinzufügen
        #include <KonnektingDevice.h>
        
        //Header eigenes Gerätes hinzufügen
        #include "kdevice_LEDTest.h"
        
        //#########################
        //## DEBUG KONFIGURATION ##
        //#########################
        #define KDEBUG //kommentieren, um Debugmodus zu deaktivieren
        #ifdef KDEBUG
        #include <DebugUtil.h>
        #define DEBUGSERIAL Serial //USB Port fuer Seriellekonsole
        #endif
        
        //###################ENDE DEBUG KONF######################################
        
        
        
        #define KNX_SERIAL Serial1 // Serial Port fuer KNX an D0/D1-Pins
        // Einstellung der ProgLED und ProgTaster
        #define PROG_LED_PIN LED_BUILTIN
        #define PROG_BUTTON_PIN 3
        
        //Einstellung der IO´s
        #define OUT1 5
        
        
        //Rückruffunktion, um die KO´s Updates to behandeln
        
        void knxEvents(byte index){
        Debug.println(F("ComObj Index : %d"), index);
          switch(index){
            case 0: //KO "schalten"
                if (Knx.read(0)){
                    digitalWrite(OUT1, HIGH);
                    Debug.println(F("Toggle Out1: on"));
                } else {
                    digitalWrite(OUT1, LOW);
                }
                break;
             default:
                break;
          }
        }
        
        
        void setup() {
          // debug related stuff
        #ifdef KDEBUG
        
            // Start debug serial with 115200 bauds
            DEBUGSERIAL.begin(115200);
        
        
            while (!DEBUGSERIAL) //Warte bis SerialMonitro aufgemacht wird
        
        
            // make debug serial port known to debug class
            // Means: KONNEKTING will sue the same serial port for console debugging
            Debug.setPrintStream(&DEBUGSERIAL);
        #endif
        
            Debug.print(F("KONNEKTING DemoSketch\n"));
        
          pinMode (OUT1, OUTPUT);
          //Initialisierung des Arduinos
          Konnekting.init(KNX_SERIAL,PROG_BUTTON_PIN,PROG_LED_PIN,MANUFACTURER_ID,DEVICE_ID,REVISION);
        }
        
        
        
        void loop(){
          //Behandeln von KNX-Telegramme
          Knx.task();
           if(Konnekting.isReadyForApplication()){
        
             //Knx.write(0,255);
        
        
        
          }
        }
        in der IDE wo dieses Sketch ist ist in ein anderes "Blatt" KnxDevice.h und in ein anderes "Blatt" kdevice_LEDTest.h
        kdevice_LEDTest.h:
        Code:
        #define MANUFACTURER_ID 262
        #define DEVICE_ID 1
        #define REVISION 0
        
        #define COMOBJ_switch 0
        
        KnxComObject KnxDevice::_comObjectsList[] = {
            /* Index 0 - switch */ KnxComObject(KNX_DPT_1_001, 0x2a)
        };
        const byte KnxDevice::_numberOfComObjects = sizeof (_comObjectsList) / sizeof (KnxComObject); // do not change this code
        
        byte KonnektingDevice::_paramSizeList[] = {
        
        };
        const byte KonnektingDevice::_numberOfParams = sizeof (_paramSizeList); // do not change this code
        Natürlich habe ich die EEPROM vorher gelöscht, nachdem du es gesagt hast.

        Ich habe auch einmal die xml Datei mit Flags "62", damit ich schreiben und lesen kann, aber ging es auch nicht.

        Der letzte Versuch war wie oben beschrieben, mit Flags "42"

        Ich schicke die Adresse 1/2/0 über den Gruppenmonitor der ETS, das Licht schaltet an der Couch an und aus aber die LED an der Arduino tut nichts. Im serielle monitor (auf 115200 baud im Dropdownmenü geändert) wird auch nichts gezeigt, nur das alles i.O. inisialisiert wurde.

        Ich bin ein bisschen verzweifelt...
        Fällt euch noch etwas ein bzw. auf?

        Übrigens, sollte ich 115200 baud benutzen, wegen die Architektur des Leonardos oder hat das ein anderer Grund?

        Vielen Dank und regnerische Grüße

        Simon

        Kommentar


          #19
          Hallo Simon,
          mal ne doofe Frage:
          hast du nach dem Aufspielen des Sketch eine Konfig über die KonnektING Suite übertragen? Woher soll der Arduino sonst wissen, auf welche GA er hören soll bzw. auf welche er senden soll?

          Du kannst mal deinen loop wie folgt erweitern, dann kennst du den Status
          Code:
          void loop(){
            //Behandeln von KNX-Telegramme
            Knx.task();
             if(Konnekting.isReadyForApplication()){
                //Knx.write(0,255);
             }
            else {
              #ifdef KDEBUG
                if(Konnekting.isProgState()) Debug.println (F("Konnekting in Programming Mode"));
                if(Konnekting.isFactorySetting()) Debug.println (F("Konnekting in Factory Setting"));
              #endif
            }
          }
          Zuletzt geändert von Sonnengruesser; 29.01.2018, 18:55. Grund: Formatierung

          Kommentar


            #20
            Ja, das habe ich.

            Jedes mal, dass ich den Sketch neu hochlade, programmiere ich das Gerät mitm Suite erneut. Grade eben nochmal gemacht, PA und Applikation.

            Ich suche weiterhin auf Verständnisfehler von mir....
            Korregiert mich bitte, wenn ich mich irre;

            1. Die Funktion Events() bekommt mit, jede Adresseänderung im Bus, wenn eine von den "cases" trifft, dann führt die Anweisung dieser case durch (in meinem Fall case 0= GA 1/2/0). D.h. mein LED sollte einschalten und im monitor "Toggle on" auftauchen, wenn der case 0 nicht wahr ist, dann bleibt die LED aus. Außerdem, wenn die Funktion aufgerufen wird sollte gleich im Monitor das auftauchen:
            "ComObj Index : 0"
            Bei mir wird aber nur angezeigt dass korrekt initialisiert wurde

            Kommentar


              #21
              ich meinte, wenn der Wert vom Objekt mit Index 0 ungleich 0 ist, dann geht die LED an, sonst bleibt aus

              Kommentar


                #22
                Dein Verständnis stimmt schon, allerdings funktioniert der Empfang nicht. Versuche den Vorschlag aus meinem vorigen Post: Die debug-Dinge in den loop() einbauen. Damit kannst du sicherstellen, dass du nicht versehentlich im Programmiermodus bist und dass dein Programmiervorgang aus der Suite funktioniert hat.

                Weiters sollte sobald eine Message mit GA 1/2/0 auf dem Bus ist die Meldung
                "ComObj Index : 0" auftauchen. Tut sie das nicht kommt nix durch, also GA falsch konfiguriert, Bus funktioniert nicht, Flags falsch, etc.

                Kommentar


                  #23
                  Golpe , 115200 oder 9600 spielt eine Rolle bei der Ausgabe. Bei 115200 werden die Daten 12 Mal schneller in der Konsole angezeigt, somit wird Arduinos-Prozessor weniger blockiert durch die Ausgaben. Konkret in deinem Fall macht es kein Unterschied, aber ich habe mich "erzogen" immer 115200 zu verwenden.

                  So, zurück zum Thema. Ich habe einen Vorschlag. Ich teste mal dein Sketch.
                  Du wiederum testes DemoSketch aus der Bibliothek. Der macht nämlich fast das, was du willst:
                  In der Suite stellst du 2 ComObjects ein: Empfang und Senden.
                  Senden: sendet jede x Sekunden (stellt man in der Suite ein) 1 und 0 abwechselnd auf KNX
                  Empfang: "hört" auf die eingestellte Adresse. Also in Prinzip deine LED.

                  Du musst hier:
                  https://github.com/KONNEKTING/Konnek...Sketch.ino#L49
                  Deine Pins richtig eintragen.

                  und diese Zeile kannst du löschen (sonst geht die LED "von sich" an und da kannst die nur ausschalten):
                  https://github.com/KONNEKTING/Konnek...ketch.ino#L195

                  Gruß
                  Eugen

                  Kommentar


                    #24
                    schon gemacht.
                    Im monitor wird alles OK angezeigt aber wenn ich den progtaster drucke taucht die Meldung auf.
                    Wenn ich den taster wieder drucke, ist alles wieder ok.

                    Was mich wundert ist, dass wenn ich in die xml Datei den schreiben Flag setzte und ich im loop knx.write(0,255) oder knx.write(0,0) hinzufüge, das licht an meinem Schaltaktor schaltet ein und aus.
                    D.h. für mich, dass die arduino schickt die GA 1/2/0 und mein KNX-Aktor von Jung empfängt sie, andersrum geht aber nicht (wenn ich den lesen Flag in die xml setze)

                    Kommentar


                      #25
                      Danke für deine Mühe Eugenius ,

                      ich nehme dein Vorschlag gerne an, aber heute schaffe ich es nicht.
                      Frauchen meckert schon, dass ich den ganzen Tag am Rechner sitzte und das Abendbrot wird kalt....

                      Kommentar


                        #26
                        Also. dein Sketch: https://knx-user-forum.de/forum/proj...25#post1189225
                        geht:
                        Code:
                        DEBUG! free ram: 1898
                        KONNEKTING DemoSketch
                        Initialize KonnektingDevice
                        15/7/255 = 0x7fff
                        Manufacturer: 0x106 Device: 0x01 Revision: 0x00
                        numberOfCommObjects: 1
                        memRead: index=0x00
                        memRead: data=0x7f
                        _deviceFlags: 01111111
                        ->EEPROM
                        memRead: index=0x01
                        memRead: data=0x11
                        memRead: index=0x02
                        memRead: data=0xb9
                        memRead: index=0x0a
                        memRead: data=0x0a
                        memRead: index=0x0b
                        memRead: data=0x00
                        memRead: index=0x0c
                        memRead: data=0x80
                        ComObj index=0 HI=0x0a LO=0x00 GA=0x0a00 setting=0x80 active=1
                        IA: 0x11b9
                        Reset triggered!
                        Reset attempts: 9
                        Data available: 1
                        Reset successful
                        Init : Normal mode started
                        
                        Init successful
                        KnxDevice startup status: 0x00
                        
                        
                        konnektingKnxEvents index=0
                        internalComObject index=0
                        ComObj Index : 0
                        Toggle Out1: on
                        
                        
                        konnektingKnxEvents index=0
                        internalComObject index=0
                        ComObj Index : 0
                        
                        
                        konnektingKnxEvents index=0
                        internalComObject index=0
                        ComObj Index : 0
                        Toggle Out1: on
                        LED wird ein und ausgeschaltet je nachdem was ich auf 1/2/0 sende. Die XML ist diese hier: https://knx-user-forum.de/forum/proj...71#post1173671
                        mit der Änderung 52 auf 42.

                        Ach ja, der Sketch muss in deinem Fall nur aus zwei Dateien/Laschen bestehen: die Haupt ino-Datei und kdevice_LEDTest.h
                        Auf die dritte machst du kein "include" und somit wird die nicht verwendet (stört aber auch nicht, verwirrt nur)

                        die Änderung an der XML (52 oder 42 oder sonst was) allein bringt nichts.
                        In der XML stellt man die Werte nur für den CodeGenerator ein.
                        Erst im Sketch wird geschaut ob es für Empfang oder Senden gedacht war. Beispiel:

                        Code:
                           
                        /* Index 0 - tempValue */ KnxComObject(KNX_DPT_9_001, [B]0x34[/B]), //hier wird gesendet, 0x34 ist die HEX Darstellung der Zahl 52
                        /* Index 1 - tempInputValue */ KnxComObject(KNX_DPT_1_001, [B]0x2a[/B]), //hier wird empfangen, 0x2a ist die HEX Darstellung der Zahl 42
                        Zuletzt geändert von Eugenius; 29.01.2018, 22:13.

                        Kommentar


                          #27
                          Danke!
                          ich Frage mich was ich gestern gemacht habe...
                          heute habe ich die Dritte lasche aus dem Ordner gelöscht. Sketch neu draufgespielt und nun geht's...
                          Grundlage endlich geschafft....

                          Kommentar

                          Lädt...
                          X