Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • JuMi2006
    antwortet
    Ich muss das morgen mal testen ... heute ist es zu spät.
    Ich spreche aber vom Mini und nicht vom Micro. Das mit dem Speicher ist natürlich ein Argument, aber vielleicht kann man da trotzdem was machen, so viele Varianten gibt es ja auch wieder nicht.
    Ich schau mir das morgen mal an, mein Testcode ist schon etwas länger da er auf Mega und Leonardo (Pro Micro) ohne Anpassungen läuft. Heute war ich schonmal froh dass das Shield mir 3.3V rausgeworfen hat wie es per solder-jumper konfiguriert war.

    Gruß Mirko

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    Ich hab das jetzt noch nicht getestet aber wenn ich mir die Diffs anschaue ist das auch noch nicht so schlau geregelt. Vorher wurde geschaut ob TPUART_DEBUG true ist (if (TPUART_DEBUG)) damit sollte es möglich sein die Debug-Funktion im Code freizuschalten.
    Jetzt wurde das in sofern geändert dass Du schaust ob TPUART_DEBUG definiert wurde ... wenn ich das richtig verstehe dann müsste man immer die Library anfassen. Wäre es nicht besser das so zu gestalten dass die Library nicht vom User angefasst werden muss?
    Hi JuMi,

    danke fuer die Rueckmeldung!
    Der Gedanke mit dem define war dadurch begruendet, dass mir beim testen mit einem Leonardo schlicht der Speicher ausgegangen ist. Durch das define wird der betreffende Debug-Code bereits vom Pre rausgenommen was etwa 1.5kB Groesse im Endresultat gespart hat und fuer meinen konkreten Fall einfach ueberlebenswichtig war
    Ich halte das eigentlich generell fuer sinnvoll, da bei "Endprodukten" vermutlich nirgendwo ein Debug mitlaeuft und viele Testaufbauten (zumindest war das bei mir so) dann auch auf anderen Boards laufen. Und wenn sich da die Schnittstellen aendern (Serial zu Serial1 oder so) muss man eh in die Lib reinfassen...

    Man(n) kann aber einfach ne Kopie der Lib lokal anlegen und dann bei Bedarf KnxTpUart oder aber (zB) KnxTpUartDebug inkludieren... das waere zB eine Moeglichkeit.

    Zitat von JuMi2006 Beitrag anzeigen
    Kannst Du mal den "Pro Mini 3.3V Atmega328" mit dem Pre testen? Hier wollte es nicht so richtig.
    Leider nicht vollstaendig, da eine meiner Katzen meinen Testaufbau "gegessen" hat
    Aber das reine Kompilieren in der Arduino-IDE tuts bei mir, zumindest mit meinem "KNX-Beacon Code" mit dem ich grundsaetzliche Konnektivitaet teste, im wesentlichen ist das der hier:

    Code:
    #include <KnxTpUart.h>
    KnxTpUart knx(&Serial,15,15,20);
    
    void setup() {
      Serial.begin(19200);
      knx.uartReset();
      knx.addListenGroupAddress(0,0,100);
    }
    
    void loop() {
      knx.groupWriteBool(0,0,100,true);
      delay(1000);
      knx.groupWriteBool(0,0,100,false);
      delay(1000);
    }
    In der KnxTpUart.h muss TPUART_DEBUG_PORT auf Serial stehen (nen anderen gibts beim Micro ja nicht), sonst wird nix geaendert (obwohl es unabhaengig davon kompiliert ob TPUART_DEBUG nun definiert ist oder nicht).

    Was genau hast du denn fuer einen Fehler bekommen? Vielleicht irgendwo im Code nen flaschen UART angesprochen?

    gruesse :: Michael

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Ich hab das jetzt noch nicht getestet aber wenn ich mir die Diffs anschaue ist das auch noch nicht so schlau geregelt. Vorher wurde geschaut ob TPUART_DEBUG true ist (if (TPUART_DEBUG)) damit sollte es möglich sein die Debug-Funktion im Code freizuschalten.
    Jetzt wurde das in sofern geändert dass Du schaust ob TPUART_DEBUG definiert wurde ... wenn ich das richtig verstehe dann müsste man immer die Library anfassen. Wäre es nicht besser das so zu gestalten dass die Library nicht vom User angefasst werden muss?

    Ich werde das morgen mal testen weil ich heute Abend noch die alte Version auf dem Rechner hatte und meine v0.2 vom Arduino-Shield fertig ist.
    Kannst Du mal den "Pro Mini 3.3V Atmega328" mit dem Pre testen? Hier wollte es nicht so richtig.

    Grüße

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von Catter Beitrag anzeigen
    Also an alle die ebenfalls dieses problem haben:
    Lib aus dem Arduino Ordner löschen und eine cleane Version hineinkopieren.
    Dann in der KnxTpUart.h bei den defines SerialUSB zu Serial machen und USARTSerial zu HardwareSerial.
    Im Arduinoprogramm immer Serial1 verwenden.
    Nein, alle die dieses Problem haben - bitte das machen, was ich hier geschrieben habe und nicht dem obigen Ratschlag folgen:
    https://knx-user-forum.de/388322-post313.html

    Aber nochmal: neue Version ausm Repository runterladen, nix mit SerialUSB, USARTSerial oder wie auch immer anfassen, sondern alles so lassen wie es ist. Einzig den Debug-Port definieren (Serial fuer den Leonardo) und es sollte laufen.

    gruesse :: Michael

    Einen Kommentar schreiben:


  • Catter
    antwortet
    leonardo

    ich weiß, dass solche infos wichtig sind...
    leider weiß ich aber selbst nicht genau woran es gelegen hat :0

    Habe die lib nochmal gelöscht um nochmal von 0 anfangen zu können, hab dann die nötigen Änderungen für Serial1 vorgenommen und plötzlich hats geklappt!

    Warum es die ganzen male zuvor nicht geklappt hat, kann ich nicht sagen, denn das ganze habe ich vorher sicher schon 3 bis 4 mal gemacht und es hat nie funktioniert. :/
    Das war auch der Grund warum ich es überhaupt mit SoftwareSerial versucht hatte.

    Also an alle die ebenfalls dieses problem haben:
    Lib aus dem Arduino Ordner löschen und eine cleane Version hineinkopieren.
    Dann in der KnxTpUart.h bei den defines SerialUSB zu Serial machen und USARTSerial zu HardwareSerial.
    Im Arduinoprogramm immer Serial1 verwenden.

    So funktionierts bei mir jetzt

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von Catter Beitrag anzeigen
    Habs endlich hinbekommen
    Woran hats denn gelegen? Solche Infos koennen uns vermutlich dabei helfen, das Ganze noch etwas runder zu kloppen

    gruesse

    Einen Kommentar schreiben:


  • Catter
    antwortet
    funktioniert

    Habs endlich hinbekommen

    Jetzt können die Spielerein beginnen

    Vielen dank für eure Hilfe

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von intelligente Haustechnik Beitrag anzeigen
    Tue mal die Softwareserial raus und nehme Serial1, das sollte dann gehen
    Nae, lad dir mal lieber eine aktuelle Version der Lib runter - ich habe einige Aenderungen vor allem in Bezug auf den Leonardo und seine "spezielle" USB-Schnittstelle gemacht. Habe ich auch einige Posts zuvor mal erlaeutert...

    gruesse :: Michael

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Hallo,

    das hatten wir schon mal so um Seite 18 herum gehabt.

    Tue mal die Softwareserial raus und nehme Serial1, das sollte dann gehen

    Jens

    Einen Kommentar schreiben:


  • Catter
    antwortet
    Arduino Leonardo

    Hey Leute,

    habe mir jetzt auch die BCU geholt

    leider habe ich auch gewisse schwierigkeiten..

    Habe einen Arduino Leonardo aber schaffe es nicht irgendwelche Signale auf den Bus zu bekommen

    Meine KnxTpUart.h:
    Code:
    #ifndef KnxTpUart_h
    #define KnxTpUart_h
    
    #include "HardwareSerial.h"
    #include "SoftwareSerial.h"
    #include "Arduino.h"
    
    #include "KnxTelegram.h"
    
    // Services from TPUART
    #define TPUART_RESET_INDICATION_BYTE B11
    
    // Services to TPUART
    #define TPUART_DATA_START_CONTINUE B10000000
    #define TPUART_DATA_END B01000000
    
    // Debugging
    #define TPUART_DEBUG false
    #define TPUART_DEBUG_PORT Serial
    
    #define TPUART_SERIAL_CLASS SoftwareSerial
    
    // Timeout for reading a byte from TPUART
    #define SERIAL_READ_TIMEOUT_MS 10
    
    // Maximum number of group addresses that can be listened on
    #define MAX_LISTEN_GROUP_ADDRESSES 5
    
    enum KnxTpUartSerialEventType {
    	TPUART_RESET_INDICATION,
    	KNX_TELEGRAM,
    	IRRELEVANT_KNX_TELEGRAM,
    	UNKNOWN
    };
    
    class KnxTpUart {
    public:
    	KnxTpUart(TPUART_SERIAL_CLASS*, int, int, int);
    	void uartReset();
    	void uartStateRequest();
    	KnxTpUartSerialEventType serialEvent();
    	KnxTelegram* getReceivedTelegram();
    	
        void setIndividualAddress(int, int, int);
        
    	void sendAck();
    	void sendNotAddressed();
    	
    	bool groupWriteBool(int, int, int, bool);
    	bool groupWrite2ByteFloat(int, int, int, float);
    	
    	bool groupAnswerBool(int, int, int, bool);
    	bool groupAnswer2ByteFloat(int, int, int, float);
    
    	void addListenGroupAddress(int, int, int);
    	bool isListeningToGroupAddress(int, int, int);
        
        bool individualAnswerAddress();
        bool individualAnswerMaskVersion(int, int, int);
        bool individualAnswerAuth(int, int, int, int, int);
        
        void setListenToBroadcasts(bool);
        
        
    private:
    	SoftwareSerial* _serialport;
    	KnxTelegram* _tg;       // for normal communication
        KnxTelegram* _tg_ptp;   // for PTP sequence confirmation
    	int _source_area;
    	int _source_line;
    	int _source_member;
    	int _listen_group_addresses[MAX_LISTEN_GROUP_ADDRESSES][3];
    	int _listen_group_address_count;
        bool _listen_to_broadcasts;
    	
    	bool isKNXControlByte(int);
    	void checkErrors();
    	void printByte(int);
    	bool readKNXTelegram();
    	void createKNXMessageFrame(int, KnxCommandType, int, int, int, int);
    	void createKNXMessageFrameIndividual(int, KnxCommandType, int, int, int, int);
    	bool sendMessage();
        bool sendNCDPosConfirm(int, int, int, int);
    	int serialRead();
    };
    
    
    
    #endif
    Und mein Arduino Programm:
    Code:
    #include <KnxTpUart.h>
    #include <SoftwareSerial.h>
    
    SoftwareSerial Serial2(10, 11); // RX, TX
    KnxTpUart knx(&Serial2, 1, 1, 55);
    
    void setup() {
      Serial2.begin(19200);
      UCSR1C = UCSR1C | B00100000;
      knx.uartReset();
    }
    
    void loop() {
      knx.groupWriteBool(0,0,1, true);
      delay (1000);
      knx.groupWriteBool(0,0,1, false);
      delay (1000);  
    }
    Bitte helft mir, bin schon am verzweifeln

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von keldan2 Beitrag anzeigen
    ich würde gerne eine Türöffnung (derzeit per Fingerprint) durch eine Codetastatur + RFID ablösen. Ein Traum wäre auch noch zusätzlich ein Funktransponder wie beim Auto - wenn man zu Hause einfährt eben Taste am Schlüsselbund drücken (Abhörsicherheit bitte aussen vorlassen).
    Also wenn man jetzt mal ganz bewusst den Sicherheitsaspekt aussen vor lassen will: ja, klar ist das moeglich, ohne Probleme sogar.
    Du brauchst nur ein Matrix-Keypad aussen und einen Arduino innen, google mal nach "arduino keypad", da sollte sich recht schnell was dazu finden lassen - inkl. Beispielcodes.
    Funksteuerung koennte man zB ueber X10 oder Homelink machen, letzteres hat der eine oder andere vllt sogar schon im Auto verbaut. Einen fertigen Empfaenger fuers passende System kaufen der ein Relais schaltet (wichtig: Relais, keine Halbleiter!) und per DI an den Arduino haengen.

    Ist alles in allem nur eine kleinere Uebung, die Hardware auszusuchen ist vermutlich mit dem meisten Aufwand verbunden.

    gruesse

    Einen Kommentar schreiben:


  • keldan2
    antwortet
    Hallo Arduino Experten,

    ich würde gerne eine Türöffnung (derzeit per Fingerprint) durch eine Codetastatur + RFID ablösen. Ein Traum wäre auch noch zusätzlich ein Funktransponder wie beim Auto - wenn man zu Hause einfährt eben Taste am Schlüsselbund drücken (Abhörsicherheit bitte aussen vorlassen).

    Denkt ihr, das wäre mit dem Arduino möglich ?? Only RFID - hat Thorsten ja schon gelöst !!!

    LG und Danke
    Daniel

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    Nein hab ich nicht, aber dafür hab ich noch ganz andere Phänomene entdeckt ...
    Kannst Du dazu mehr sagen?

    Einen Kommentar schreiben:


  • wintermute
    antwortet
    Zitat von greentux Beitrag anzeigen
    Nur sind die S0 meistens verplombt... Also entweder denkt man dran oder zahlt fürs entplomben/plomben 50€. Da kann man auch gleich D0 machen und hat ein paar Daten mehr...
    Wenn schon zitieren, dann bitte auch richtig
    Ich schrieb:
    Zitat von wintermute Beitrag anzeigen
    Spannung, Frequenz und so geben die meisten einfachen Zaehler ohnehin nicht raus, auch nicht per SML und letzteres macht IMHO nur Sinn wenn man den Zaehler der Stadtwerke auslesen moechte - fuer eigene Einbauten ist S0 eigentlich am pfiffigsten.
    Da steht eigentlich explizit "eigene Einbauten" im Zusammenhang mit S0 - also zB Photovoltaik, Wärmepumpe oder andere spezielle Verbraucher - oder einfach ein zusaetzlicher Zaehler hinter dem der Stadtwerke.

    Aber wenn Du dir dafuer einen verplombten Zaehler kaufst und dann noch irgendwen fuers Entplomben bezahlst kann ich auch nicht helfen

    gruesse :: Michael

    Einen Kommentar schreiben:


  • greentux
    antwortet
    Am einfachsten einzubinden sind Zaehler mit S0 Schnittstelle - einfach per PullUp (entweder per Hardware oder ueber den internen PullUp des Arduino) an einen DI haengen, dann brauchts auch keine Lesekoepfe mehr - und S0 haben eigentlich alle Zaehler die auch optische Ausgaenge haben.
    Ich habe einige davon (sowohl 3- als auch 1-phasig) an einer Wago haengen, das wird aber am Arduino aehnlich schmerzfrei funktionieren.
    Nur sind die S0 meistens verplombt... Also entweder denkt man dran oder zahlt fürs entplomben/plomben 50€. Da kann man auch gleich D0 machen und hat ein paar Daten mehr...

    Einen Kommentar schreiben:

Lädt...
X