Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

  • mfd
    antwortet
    Zitat von dreamy1 Beitrag anzeigen
    >80mA ist eine Angabe, mit der man schlecht helfen kann. Sind das 82mA oder 150mA oder 400mA?
    Es sind eher 82 mA.
    Allerdings hätte ich gern <50 mA. Das wäre noch besser in der Spezifikation, auch von der BCU.
    Außerdem finde ich es unschön, unnötig Energie zu verbraten. Der 3,3V Arduino ist da mit < 5mA sehr vorbildlich. Der PN532 ohne angeschlossenes Interface mit 1,xy mA auch...
    Erst wenn beide miteinander sprechen wird es häßlich.
    Zuletzt geändert von mfd; 12.12.2018, 16:37.

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    >80mA ist eine Angabe, mit der man schlecht helfen kann. Sind das 82mA oder 150mA oder 400mA?

    Der TPUART liefert z.B. völlig problemlos und innerhalb der Spezifikation 90mA@5V, wenn man sich ein paar Gedanken macht :-)

    Einen Kommentar schreiben:


  • mfd
    antwortet
    Zitat von dreamy1 Beitrag anzeigen
    Ein ADUM kann bei notwendiger galvanischer Trennung eine Lösung sein, falls diese nicht benötigt wird, reichen da bei den niedrigen Datenraten eines UART auch eine Handvoll diskreter Bauteile (so habe ich das beim Burli gemacht).
    Ok, dann kann man das ja entsprechend einplanen. Derzeit kämpfe ich damit keine galvanische Trennung zu brauchen, also ohne ext. Stromversorgung auszukommen. Das ist mit dem PN532 offenbar nicht so einfach. Zwar unterstützt das Ding sämtliche Stromspartechniken, aber es sieht nicht danach aus, als wären die in den verschiedenen Libs überhaupt berücksichtigt. Derzeit zieht das Teil im Stand ca. 60mA inkl. Arduino und bei Aktivität >80mA.

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Spezifizierter Mindest-HIGH-Pegel am TPUART sind nunmal 3.5V. Alles andere kann, muss aber nicht funktionieren - das kann dann z.B. bei Temperaturänderungen oder Halbleitertoleranzen im TPUART zu komischen Effekten führen und würde ich als Pfusch bezeichnen.

    Ein ADUM kann bei notwendiger galvanischer Trennung eine Lösung sein, falls diese nicht benötigt wird, reichen da bei den niedrigen Datenraten eines UART auch eine Handvoll diskreter Bauteile (so habe ich das beim Burli gemacht).

    Einen Kommentar schreiben:


  • mfd
    antwortet
    Zitat von dreamy1 Beitrag anzeigen
    Ein 3,3V-Arduino an einem 5V-TPUART wird ohne Pegelwandler an RX und TX vermutlich nicht funzen. Vor allem der TX am Arduino, da Du mit dem 3,3V-High-Pegel unter dem benötigten 0,7*VCC-Threshold am TPUART bleibst. Der TPUART kriegt vom Sendeversuch also nix mit. Auf RX-Seite wird Dir ohne Schutzbeschaltung die interne Clamp-Diode nach VCC am Arduino durchbrennen. Da reicht als quick&dirty-Lösung aber ein strombegrenzender Widerstand.
    Hierzu habe ich verschiedene Aussagen gelesen.
    Kann jemand mit Sicherheit sagen, ob die Siemens BCU bzw. deren TP-UART für 3,3V ausgelegt ist oder nicht?
    Für den Fall, dass eine Wandlung notwendig wird, reicht vermutlich ein ADUM aus?

    Einen Kommentar schreiben:


  • Lapheus
    antwortet
    Hallo zusammen,

    habe ein neues Notebook und möchte den aktuellen Stand der Libary von Thorsten in meine Arduino Umgebung einbinden.
    Wie kann ich den von bitbucket die Libary runterladen?

    Ich möchte keine Anwendung Souretree installieren
    (was ich aus lauter Frust schon gemacht habe, die mir aber jedes mal eine Fehlermeldung gibt, "Dies ist kein gültiger Quellpfad" )
    sondern nur einfach ein ZIP Archiv mit allen Dateien herunterladen, was ich einfach in die Arduino IDE einbinden kann.

    Bin für jede Hilfe Dankbar!
    Gefrustete Grüße.

    EDIT: Im Menübaum gibt es links einen Download Button, nicht unter Source oder Overview auf den "Check out"-Button klicken.
    Danke Thorsten!
    Zuletzt geändert von Lapheus; 08.10.2018, 17:32.

    Einen Kommentar schreiben:


  • Simml
    antwortet
    Hallo zusammen,

    Bin jetzt auch in Smelly One Besitzer. Vielen Dank für die tolle Arbeit und die schöne Dokumentation. Insbesondere das Löten hat damit prima geklappt. Werte werden angezeigt, Frau reißt bereits alle Fenster auf .

    Bin gerade dabei ihn in meine Visu einzubinden. Allerdings bekomme ich über den Bus keinerlei Daten. Die PA kann ich nicht anpingen, und Daten bekomme ich auch keine (auch nicht wenn ich die Temperatur im Gruppenmonitor abfrage). Muss vielleicht der Busankoppler noch programmiert werden? Mit dem Programmiertaster habe ich bisher auch noch nichts gemacht... (wozu ist der denn gut?)

    Ist es denn möglich, die Daten zyklisch auf den KNX Bus zu senden?

    Viele Grüße
    Simon

    Einen Kommentar schreiben:


  • intelligente Haustechnik
    antwortet
    Richtig Delay 1000 ist 1 sek.

    Einen Kommentar schreiben:


  • Golfer
    antwortet
    Sagt mal, der Wert "delay" sind doch sicher Millisekunden oder?

    Einen Kommentar schreiben:


  • Golfer
    antwortet
    Top, Danke .... Läuft.
    Kann man das irgendwie an die "Optimierte" anpassen?

    Einen Kommentar schreiben:


  • jentz1986
    antwortet
    Zitat von Golfer Beitrag anzeigen
    Funktioniert leider auxh nicht:

    error: no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'
    KnxTpUart knx(&Serial, deviceAddress);
    Autsch. Falsche lib. Der Sketch ist für die String-basierte lib, deine lib ist eine optimierte, oder die original Dka. Schau mal auf den ersten Seiten dieses Threads, da waren mal die drei Alternativen dargestellt.

    und: ein UNO ist kein Mini.

    Einen Kommentar schreiben:


  • Golfer
    antwortet
    Funktioniert leider auxh nicht, klemmt an der gleichten stelle wie beim Tutorial auch:

    Arduino: 1.8.5 (Linux), Board: "Arduino Mini, ATmega328P"

    knx_temp_test.ino:23: error: no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'
    KnxTpUart knx(&Serial, deviceAddress);
    ^
    /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino:23:37: note: candidates are:
    In file included from /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino:7:0:
    Mehrere Bibliotheken wurden für "DHT.h" gefunden
    Benutzt: /home/robbi/Arduino/libraries/DHT_sensor_library-1.3.0
    Nicht benutzt: /home/robbi/Arduino/libraries/DHT-sensor-library-master
    /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:183:5: note: KnxTpUart::KnxTpUart(HardwareSerial&, word, type_KnxTpUartMode)
    KnxTpUart(HardwareSerial& serial, word physicalAddr, type_KnxTpUartMode _mode);
    ^
    /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:183:5: note: candidate expects 3 arguments, 2 provided
    /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:158:7: note: constexpr KnxTpUart::KnxTpUart(const KnxTpUart&)
    class KnxTpUart {
    ^
    /home/robbi/Arduino/libraries/KnxDevice-master/KnxTpUart.h:158:7: note: candidate expects 1 argument, 2 provided
    /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino: In function 'void setup()':
    knx_temp_test.ino:30: error: 'class KnxTpUart' has no member named 'uartReset'
    knx.uartReset();
    ^
    /home/robbi/Arduino/knx_temp_test/knx_temp_test.ino/knx_temp_test.ino.ino: In function 'void loop()':
    knx_temp_test.ino:45: error: 'class KnxTpUart' has no member named 'groupWrite2ByteFloat'
    knx.groupWrite2ByteFloat(groupTemperatureAddress, temperature);
    ^
    knx_temp_test.ino:50: error: 'class KnxTpUart' has no member named 'groupWrite2ByteFloat'
    knx.groupWrite2ByteFloat(groupHumidityAddress, humidity);
    ^
    exit status 1
    no matching function for call to 'KnxTpUart::KnxTpUart(HardwareSerial*, const String&)'

    Dieser Bericht wäre detaillierter, wenn die Option
    "Ausführliche Ausgabe während der Kompilierung"
    in Datei -> Voreinstellungen aktiviert wäre.

    Einen Kommentar schreiben:


  • Sisamiwe
    antwortet
    Golfer

    Der Sketch klappt bei mir mit Arduino 1.8.5 mit Arduino Pro Mini an Siemens BCU mit DHT22:
    Code:
    #include <ephemera_common.h>
    #include <time.h>
    
    #include <Arduino.h>
    
    #include <avr/sleep.h>
    #include <KnxTpUart.h>
    #include "DHT.h"
    
    #define DHTPIN 4     
    #define DHTTYPE DHT22 //DHT11, DHT21, DHT22
    
    // Room: Livingroom, KNX address: 1.1.49, GroupTemperature: 0/6/30, GroupHumidity: 0/6/31
    const String deviceAddress           = "1.1.49";
    const String groupTemperatureAddress = "0/6/30";
    const String groupHumidityAddress    = "0/6/31";
    
    const int interval = 60;
    const int ledpin = 13;
    
    DHT dht(DHTPIN, DHTTYPE);
    
    KnxTpUart knx(&Serial, deviceAddress);
    
    void setup()
    {
      Serial.begin(19200);
      UCSR0C = UCSR0C | B00100000; // Even Parity
    
      knx.uartReset();
    
      dht.begin();
    
      watchdogOn(); // Enable watchdog timer.
    
      // The following saves some extra power by disabling some peripherals I am not using.
      ADCSRA = ADCSRA & B01111111; // Disable ADC, ADEN bit7 to 0
      ACSR = B10000000; // Disable analog comparator, ACD bit7 to 1
      DIDR0 = DIDR0 | B00111111; // Disable digitale inputbuffer, set analoge input pins 0-5 to 1
    }
    
    void loop()
    {
      float temperature = dht.readTemperature(); // Read temperature
      knx.groupWrite2ByteFloat(groupTemperatureAddress, temperature);
    
      delay(5000);
    
      float humidity = dht.readHumidity(); // Read humidity
      knx.groupWrite2ByteFloat(groupHumidityAddress, humidity);
    
      digitalWrite(ledpin, HIGH); // Set LED State to visualize progess  
      delay(1000);
      digitalWrite(ledpin, LOW);
    
      pwrDown(interval - 6); // Shutdown ATmega328 for "interval" seconds;
    }
    
    void pwrDown(int seconds)
    {
      set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set deepest sleep mode PWR_DOWN
      for(int i=0; i < seconds; i++)
      {
        sleep_enable(); // Enable sleep mode
        sleep_mode(); // Start sleep mode
        sleep_disable(); // Disable sleep mode 
      }
    }
    
    void watchdogOn()
    {
      MCUSR = MCUSR & B11110111; // Disable reset flag, WDRF bit3 of MCUSR.
      WDTCSR = WDTCSR | B00011000; // Set bit 3+4 to be able to set prescaler later
      WDTCSR = B00000110; // Set watchdog prescaler to 128K > is round about 1 second
      WDTCSR = WDTCSR | B01000000; // Enable watchdog interrupt
      MCUSR = MCUSR & B11110111;
    }
    
    ISR(WDT_vect)
    {
      //sleepcounter ++; // count sleepcycles
    }

    Einen Kommentar schreiben:


  • Golfer
    antwortet
    Zitat von Sisamiwe Beitrag anzeigen
    Golfer

    Schon mal hier. Ich habe es genau so gemacht und es funktioniert problemlos.
    Schon versucht, die IDE 1.8.5 nimmt den Code nicht obwohl alle Libarys installiert sind.

    Einen Kommentar schreiben:


  • dreamy1
    antwortet
    Interressante Seite...aber Achtung:

    http://www.intranet-der-dinge.de/sma...ur/knx/arduino

    Wer lange Freude an den Basteleien haben will: bei Verwendung eines 3.3V-Arduinos sollte zumindest ein 1k-Widerstand zur Strombegrenzung zwischen TX des BCU zum RX des Arduino, damit nicht dauernd die internen Clamping-Dioden im µC in Höchstleistung aktiv werden müssen. Besser wäre ein Spannungsteiler 1k/2k, damit der µC innerhalb seiner zulässigen Pegelgrenzen betrieben wird.

    Einen Kommentar schreiben:

Lädt...
X