Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • MJJ
    antwortet
    Volltreffer!

    Diese Zeile war der entscheidende Hinweis:
    Code:
    UCSR0C = UCSR0C | B00100000;
    Im Flur blinkt es nun :-)

    Könnte jetzt aber noch ein wenig Nachhilfe brauchen.
    Dein Problem ist wahrscheinlich, daß Du eine zweite serielle Schnittstelle nutzen willst, aber die Pins nicht genau definierst.
    Was genau meinst du damit?

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Hallo Sepp,

    bin auch neu hier und freue mich riesig über die vielen Lösungsansätze zum Arduino.

    Dein Problem ist wahrscheinlich, daß Du eine zweite serielle Schnittstelle nutzen willst, aber die Pins nicht genau definierst.

    Generell funktioniert aber das Blinken:

    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega
    
    //Für UNO
    KnxTpUart knx(&Serial, 1, 1, 20);
    
    void setup() {
      // LED - blinkt beim senden eines Telegramms
      pinMode(13, OUTPUT);
      digitalWrite(13, LOW);
      
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000;
    
      knx.uartReset();  
    }
    
    void loop() {
    knx.groupWriteBool(11,4,3, true);
      delay (5000);
      knx.groupWriteBool(11,4,3, false);
      delay (5000);  
    }
    Also, gleich probieren und berichten

    Jens

    Einen Kommentar schreiben:


  • MJJ
    antwortet
    Versucht mit UNO und NANO

    Hallo zusammen,

    bin neu hier und beschäftige mich seit kurzem mit Arduino Hardware jedoch mit KNX schon etwas länger. Das Thema hier finde ich richtig spannend deshalb habe ich mir letzte Woche gleich den BCU 5WG1117-2AB12 von Siemens bestellt.

    Bekomme aber leider eure Beispiele hier nicht ans laufen. Habe mir die aktuelle KNX Lib von Thorsten Gehrig runtergeladen und ein Beispielprogramm "zusammenkopiert". Leider passiert nix (Licht in meinem Flur sollte blinken :-/ ).
    Habe den Code auf meinem Uno und Nano hochgeladen - an BCU angeschlossen und diese an meinen Bus - leider ohne Erfolg.

    Hier das Beispiel:
    Code:
    #include <SoftwareSerial.h>
    
    #include <KnxTelegram.h>
    #include <KnxTpUart.h>
    
    //int onboardled=13;
    KnxTpUart knx(&Serial, 15, 15, 20);
    
    void setup() {
     // pinMode(onboardled, OUTPUT);
      Serial.begin(19200);
      knx.uartReset();
    }
    
    void loop() {
     // digitalWrite(onboardled, HIGH);
      knx.groupWriteBool(0,2,5, true);
      delay (1500);
     // digitalWrite(onboardled, LOW);
      knx.groupWriteBool(0,2,5, false);
      delay (1500);  
    }
    Hat das jemand mit einem UNO schon probiert?

    Gruß, Sepp

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    @Jumi2006:

    Cool...so in etwa siehts bei mir auch gerade aus, habe gerade ein Steckbrett zum Testen.

    Nochmal kurz damit ichs verstehe was da genau nicht gepasst hat mit den Wordings der "Serial": kannst mal kurz den Code durchgeben, mit dem es jetzt bei Dir läuft?

    Seit gestern abend läuft bei mir schonmal der nicht-KNX-Teil mit dem Auslesen eines I2C-Feuchte- und Temperatursensors und die Ansteuerung eines kleines schnuckeligen TFTs am Pro Mini....bin begeistert. An der automatischen Backlighteregelung per PWM über einen Helligkeitssensor sitze ich gerade dran. Habe allerdings alles auf 3,3V laufen.

    Einen Kommentar schreiben:


  • Tessi
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    Summe: 41mA aus der BCU - perfekt!
    Die werden konstant immer entnommen oder gib es da einen Low-Power-Mode solange nichts vom Bus kommt und auch kein Sensor abgefragt werden soll?

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Der Micro Pro verfügt scheinbar doch über 2 UART (evtl. einer Software?).
    Ich find gerade nicht die Stelle wo sowas stand, glaube aber igendwo bei sparkfun: https://www.sparkfun.com/products/12640

    Mein Modell hier ist von folgender: ATMega 32U4 Arduino IDE 1.0.1 Pro Micro Modul Leonardo MEGA32U4 5V 16MHZ TOP NEU | eBay
    "ATMega 32U4 Arduino IDE 1.0.1 Pro Micro Modul Leonardo MEGA32U4 5V 16MHZ TOP NEU"

    Der Vorteil ist, er kann dann auch mit TPUART programmiert werden und bietet die bekannte Debug-Konsole. Dann versuch ich da heute mal 1-Wire zum fliegen zu kriegen.

    Grüße

    EDIT:
    Läuft bestens, Stromaufnahme perfekt.
    Bestückung der BCU:
    - 1 x Arduino Pro Micro (Leonardo)
    - 2 x DS18B20
    - 4 x DS2438 mit HIH-4031

    Summe: 41mA aus der BCU - perfekt!
    Angehängte Dateien

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Zitat von JuMi2006 Beitrag anzeigen
    Alles klar, hab den entscheidenden Hinweis gefunden ... Also es bleibt hier wohl bei Serial1.
    Na lass mal hören...wo genau lag denn der Fehler? Ich lerne da auch gerne dazu, zumal ich das Ganze noch auf einen Pro Mini portieren muss :-)

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Alles klar, hab den entscheidenden Hinweis gefunden ... Also es bleibt hier wohl bei Serial1.

    Heute Abend werde ich Ihn dann mal mit 4 Multisensoren und 2 DS18B20 bestücken und schauen was da an Strom fließt.

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Ich schätze mal, dass ein Konflikt bei den "Serial" vorliegt....der Micro dürfte nur eine serielle Schnittstelle haben. Dann darf im Code auch nirgends eine "Serial1" vorkommen (einige Arduinos haben mehrere Hardware-Serielle onboard, die sind dann "durchnumeriert").

    Ersetze also mal alle Stellen mit "Serial1" durch "Serial"...auch in der .cpp...

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Ich spiele schon eine Weile rum, heute nen Tag frei und der Micro ist gekommen, also erstmal getestet. Programmiert als "Leonardo".

    Mit "Blink" zieht der Micro 40mA aus der BCU und ist damit in den Specs - super !!!

    Also wollte ich mal die KNX-Anbindung machen:

    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega
    KnxTpUart knx(&Serial, 15, 15, 20);
    
    void setup() {
      Serial.begin(19200);
      UCSR1C = UCSR1C | B00100000; // Even Parity
      knx.uartReset();
    }
    
    void loop() {
      knx.groupWriteBool(0,0,133, true);
      delay (1000);
      knx.groupWriteBool(0,0,133, false);
      delay (1000);  
    }
    Allerdings gibt mir das Fehler:
    knxtelegramm_micro:4: error: no matching function for call to 'KnxTpUart::KnxTpUart(Serial_*, int, int, int)'
    /Users/mko/Dropbox/Arduino/libraries/KNX/KnxTpUart.h:40: note: candidates are: KnxTpUart::KnxTpUart(HardwareSerial*, int, int, int)
    /Users/mko/Dropbox/Arduino/libraries/KNX/KnxTpUart.h:38: note: KnxTpUart::KnxTpUart(const KnxTpUart&)
    Mit
    Code:
    KnxTpUart knx(&Serial1, 15, 15, 20);
    kommt der Fehler nicht, aber es passiert auch nix am Bus (was ich wiederum verstehe).

    Die KnxTpUart.h sieht folgendermaßen aus:
    Code:
    #ifndef KnxTpUart_h
    #define KnxTpUart_h
    
    #include "HardwareSerial.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
    // Für UNO muss TPUART_DEBUG auf false
    
    #define TPUART_DEBUG false
    #define TPUART_DEBUG_PORT Serial
    
    // Für UNO muss TPUART_SERIAL_CLASS HardwareSerial (war mal für Mega USARTClass)
    #define TPUART_SERIAL_CLASS HardwareSerial
    
    // 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 15
    
    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 groupWrite1ByteInt(int, int, int, int);
    	bool groupWrite2ByteInt(int, int, int, int);
    	bool groupWrite4ByteFloat(int, int, int, float);
        bool groupWrite14ByteText(int, int, int, String);
    
    	bool groupAnswerBool(int, int, int, bool);
    	bool groupAnswer2ByteFloat(int, int, int, float);
    	bool groupAnswer1ByteInt(int, int, int, int);
    	bool groupAnswer2ByteInt(int, int, int, int);
    	bool groupAnswer4ByteFloat(int, int, int, float);
        bool groupAnswer14ByteText(int, int, int, String);
    
    
    	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:
    	HardwareSerial* _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
    Jemand nen Tip?

    Grüße

    Einen Kommentar schreiben:


  • ThorstenGehrig
    antwortet
    Hi Keldan,
    hab mal nicht soviel Angst vor dem Arduino. Das ist ist echt einfach - die größte herausforderung ist das "Einbauen" in eine passende Halterung!

    Die Mobotix-RFID-Lösung habe ich nie angeschaut - die gab es am Anfang noch nicht - und ich Vermute mal das Sie viel teurer ist UND die Konfiguration der T24/T25 ist eher ein "krampf".
    Mit der Arduino-Lösung hast du es direkt auf dem Bus - so will man es haben :-)
    Per "Tastencode" finde ich eher "basic". Fingerprint ist natürlich "teurer Luxus" - der mich persönlich aber schon überzeugt. Früher hätte ich nie gedacht das die Teile so zuverlässig sind.

    Vorschlag zum Arduino: schreib mich mal per PM an - und lass uns mal telefonieren.

    Gruß
    Thorsten

    Einen Kommentar schreiben:


  • keldan2
    antwortet
    Zitat von ThorstenGehrig Beitrag anzeigen
    Ja - Wirkbetrieb seit dem Wochenende zu vollster Zufriedenheit :-)
    Ich habe ja "schon immer" einen 125kHz RFID-Leser - bisher von RSS per RS485 an Wiregate. Diese Anbindung war aber nicht immer 100%ig - das neue Projekt ist jezt viel Besser.

    Gruß
    Thorsten
    Hey Thorsten,

    ich habe gerade am WE ne T25 aufgebaut - siehe Facebook (hab dich gerade mal geaddet).

    Dieses Projekt war die allererste Berührung mit der Mobotix T25, und ich muss schon sagen, gewaltig und überzeugend.

    Nun bin ich wieder am schwanken zwischen einer "Selbstbaulösung RFID", ekey, etc. oder direkt T24 mit Keypad und RFID.

    Somit hätte ich die Lösung wenn ich mal keine RFID Karte am Mann habe, auch per Tastencode die Tür zu öffnen-> das was du sagst -> per RFID am Schlüsselbund geht schneller als Fingerprint, sehe ich auch so bei meinem Conrad Reader.

    Ich weiss ja das du die T24 selbst im Einsatz hast. Nutzt du hier kein RFID ?? Gehen dort auch andere RFID TAGS - kleinere hinter der Uhr, am Schlüsselbund etc.
    Hast du die T24 incl.Video/Gegensprechen,Tür öffnen, etc.in deiner genialen XXAPI Lösung.

    Mann (Ich) habe so viele Baustellen, und dieses Arduino ist glaube ich ne Nummer zu hoch für mich.

    LG und Sorry für OT, aber es passte gerade hier rein - bez. der Baustelle am WE.

    Daniel

    Einen Kommentar schreiben:


  • idefix6
    antwortet
    ich sehe den ARM mit viel Potential.
    Man hat jede Menge Timer drin (Stichwort Dimmer), viele serielle Schnittstellen (Ansteuerung fertiger externer Dimmer).
    Er hat viel mehr Speicher, kann atomaren Operationen (was vielen Problemen vorbeugt) und er hat mehr Speicher (was gerade bei Displayansteuerung hilfreich ist), SPIs (für einfache Ansteuerung von Bitschiftern für das multiplexen von IOs) und viele andere Sachen.

    Er liegt preislich auf dem gleichen Level wie der Atmega644.
    Ich würde einen SAM4 von Atmel ins Auge fassen (die 48pin Variante).

    Da es ja schon ein Board von Arduino gibt, sollte hier doch die Unterstützung auch nicht schlecht aussehen oder?

    Einen Kommentar schreiben:


  • l0wside
    antwortet
    Zitat von idefix6 Beitrag anzeigen
    Was haltet ihr davon, die Entwicklung eher in Richtung ARM zu gehen, von Arduino gibt es hier auch schon eine Platine (also ein Atmel ARM):
    Arduino - ArduinoBoardDue

    Diese Platform hätte gut Luft nach oben und der Prozessor braucht nicht mehr Strom.
    Dem TPUART ist´s im Prinzip egal. Er will an einem Pin die Interfacespannung angelegt bekommen, das sollte man vom Arduino irgendwo abgreifen können.

    Wenn der Schaltregler den Arduino mit versorgen soll, braucht es auf dem Aufsteckboard eben einen Jumper für die Umschaltung 5V/3,3V. Mehr Aufwand sehe ich nicht.

    Ansonsten: ein ARM ist in meinen Augen zwei Hausnummern zu groß, wenn nicht gerade z.B. ein Touchpanel dran soll.

    Max

    Einen Kommentar schreiben:


  • idefix6
    antwortet
    Was haltet ihr davon, die Entwicklung eher in Richtung ARM zu gehen, von Arduino gibt es hier auch schon eine Platine (also ein Atmel ARM):
    Arduino - ArduinoBoardDue

    Diese Platform hätte gut Luft nach oben und der Prozessor braucht nicht mehr Strom.

    Einen Kommentar schreiben:

Lädt...
X