Guten Tag, ich bin sehr neu hier und habe eine bitte an euch. Ich habe mir eine Platine mit diversen ein und Ausgängen gebaut, wo ich auch per UDP alle Zustände zur Loxone übertragen kann. Dies klappt soweit auch sehr gut. Auf der Platine sitzt ein Mega 2560 Rev.3 mit Ethernet (W5100). Bis jetzt ist das Programm so geschrieben, das ich auf Pin 38 die 1-Wire Sensoren scannen kann und diese per UDP senden lassen. Dort ist meine bitte an euch, mir da unter die Arme zu greifen damit ich die 1-Wire Pins erweitern kann. Ziel ist es das ich an PIN 38 und am PIN 39 jeweils 10 Sensoren scannen kann. Das Script liegt im Anhang. Ich hoffe das mir jemand helfen kann. Danke im Voraus an euch.
Michael G. schrieb: > Dort ist meine bitte an euch, mir da unter die Arme zu greifen damit ich > die 1-Wire Pins erweitern kann. Onewire.h/.c lesen, verstehen und so umschreiben dass du zwei Instanzen erzeugen kannst. Zur Zeit ist ja gefühlt die hälfte deiner Konfiguration in globalen Variablen, das auch ändern. Dann zwei Instanzen mit unterschiedlichen Namen, jeweils die Funktionen mit den richtigen Parametern aufrufen statt globalen Variablen und fertig. > Das Script liegt im Anhang. wenn ich das so lese bekomm ich eine Mischung aus Übelkeit und Traurigkeit. Wenn schon alles Global und 3 Seiten defines in die Main dann wenigsten mit nem Kommentar was das ist. Aber das setzt voraus dass das nicht nur zusammenkopiert ist. Nächstes mal das Script als .c und nicht als .txt
:
Bearbeitet durch User
K. S. schrieb: > wenn ich das so lese bekomm ich eine Mischung aus Übelkeit und > Traurigkeit. Wenn schon alles Global und 3 Seiten defines in die Main > dann wenigsten mit nem Kommentar was das ist. Aber das setzt voraus dass > das nicht nur zusammenkopiert ist. Ist doch Standard bei den meisten Arduino Usern. Sinnvolles programmieren lernt man da in der Regel nicht. Es ist ja auch für Künstler gemacht also muss auch der code ein Kunstwerk sein ?
K. S. schrieb: > Nächstes mal das Script als .c und nicht als .txt .txt hat den Charme, das es sich bestenfalls max 10% der Leser anschauen.
Guest schrieb: > Ist doch Standard bei den meisten Arduino Usern. Sinnvolles > programmieren lernt man da in der Regel nicht. Es ist ja auch für > Künstler gemacht also muss auch der code ein Kunstwerk sein ? ja da bin ich hier doch genau richtig. Ich als Künstler habe meine Platine sauber hinbekommen als Elektroniker aber meine Schwächen liegen in der Programmierung wo ich auf Künstler wie euch zurück greifen möchte. Ein Künstler in Programmieren währe ja auch nicht hier im Forum unterwegs. Die Programmierung habe ich aus dem Internet gefunden wo halt meine Bedingungen erfüllt wurden. Ich habe dort Digitale sowie Analoge ein und Ausgänge. Des weiteren erkennt er automatisch die 1-Wire und sendend Sie per UDP an meine Loxone. Danke noch mal für die ersten Hilfestellung an (the_yrr) 07.12.2019 23:41. Das ist für mich in der Richtung als nicht Künstler sehr schwer. Wie gesagt. Es währe super wenn mir da jemand helfen könnte.
Eigentlich würde nichts gegen copy-paste sprechen. Alsow wieso nicht, auch weil die Modbus Register ja unterschiedliche Bereiche haben sollen und es sollte/müsste ja mit der alten SW/Registermap kompatibel bleiben.
Hallo Chris, ich habe mit copy-paste schon einiges versucht. Aber es kommt immer nur der erste 1-Wire Anschluss durch. Kannst du mir da noch ein bisschen helfen? Danke!
Ja, kein Problem, sobald ich etwas Zeit vor dem PC habe. Mache aber nur copy/paste, austesten kann/möchte ich es nicht machen.
Hallo Chris, danke! Das austesten werde ich natürlich machen. Habe natürlich schon 3 Platinen fertig und eine Mega 2560 R3 zum testen. Gruß Michael
Michael G. schrieb: > Wie gesagt. Es währe super wenn mir da jemand helfen könnte. Was fehlt dir denn noch? K. S. hat doch die Vorgehensweise schon beschrieben. K. S. schrieb: > Onewire.h/.c lesen, ...
Habe nun doch nicht nur copy/paste gemacht. Die Modbus register müssen upgedated werden. DS18x20 hätte nicht funktioniert. Es fehlt der oneWireSubTimer.sleep(oneWireSubCycle) Aufruf. Ansonsten ist die Zeit bei 11 bit 375ms . Wie soll das gehen wenn die Resultate in 1ms abgeholt wird und anstelle der alten Werte laufende ADC Werte im Scratchpad stehen?, aber vielleicht werden die Werte erst am Schluss je nach Chip kopiert, dann hat man halt nur alte Werte. Chris
Hallo Chris, danke erst mal für deine Bemühungen. Die Werte der OneWire sollen per UDP alle 5 Sekunden übertragen werden. Ich kann nur sagen das die ADC Werte immer nur bei Veränderungen gesandt werden. Habe den Sketch mal in IDE überprüfen lassen und dabei kam das Ergebniss: exit status 1 cannot convert 'byte (*)[8] {aka unsigned char (*)[8]}' to 'byte* {aka unsigned char*}' for argument '2' to 'float dsreadtemp(OneWire, byte*)' Was muss den beim oneWireSubTimer.sleep(oneWireSubCycle) Aufruf gemacht werden? Sorry für die dummen Fragen! Bin halt in der Programmierung ein Grundschüler! Danke!
State 3 dsreadtemp, 2Zeilen darunter sendMsg dsreadtemp das ist korrect. Einfach austauschen, raufcopieren und ersetzen. Wegen sleep, das habe ich geändert. Man musste die Ds2384 .h .cc ansehen welche du verwendet zwecks timing. angenommen 400 MS x 11 sind 4.4 sec. Wenn timer auf 5sec gesetzt ist, dann wird zwischen state 0 und State 1 600ms gewartet. Derzeit sind aber alle 2 timer auf 5sec. 5x12 in diesem Fall Bei 10 Sensoren Ds2438. Es werden die detektierten Sensoren berechnet, sind 3 detektiert sind es 3+1(ds18x20)+1(timer step0 bis 1)=5. Ist aber timer 8 sec und subtimer 3 sec, bei 3x Sensoren sind es 12 sec + 8 sec => 20 sec. Wenn timer größer oder gleich subtimer x ds2438 +1 ist, dann ist timer das Intervall und subtimer das Delay zwischen den Messungen. Subtimer muss aber grössere oder gleich sein als die Zeit welche für update um ds2438 Gebraucht wird.. Man findet die lib src unter Dokumente/Arduino/libraries/DS4238/ oder wenn nicht da im Unterverzeichnis src.
Hallo Chris, ich habe alles eingestellt und konnte es hochladen. Der SerialMonitor gibt mir aber diese Meldung raus und es kommt alles über UDP außer 1_wire. Dort kommen keine Daten. Die ist ein Auszug aus dem SerialMonitor: Ethernet ON 485 RTU ON 115200 Bd, Tx Delay: 10 ms, Timeout: 20 ms IP: 192 . 168 . 178 . 93 . Address: 1 1-wire sensor unsupported: 028ff5b7473163a4 1-wire sensors found 1 : 1 1-wire sensor unsupported: 12877405f60079 1-wire sensors found 2 : 2 1-wire sensors: 2 0 Writing to relay 1 value 0 Writing to relay 2 value 0 Writing to relay 3 value 0 Währe es hilfreich diesen 1-Wire Sketch einzubauen? Dort sind fast alle 1_Wire Möglichkeiten inbegriffen. Kannst du dort mal drüber schauen? https://www.youtube.com/watch?v=MCCQH0uvZGM http://jirin.deso.cz/1-Wire_UDP_Gateway/ Danke!
Michael G. schrieb: > das ich an PIN 38 und am PIN 39
1 | OneWire ds[] {38,39}; |
PS: Bitte keine txt Dateien. Nimm die Endung ino. Dann tuts auch der Code Präsentierer incl Syntax Erheller
Arduino Fanboy D. schrieb: > PS: > Bitte keine txt Dateien. > Nimm die Endung ino. > Dann tuts auch der Code Präsentierer incl Syntax Erheller Hallo Fanboy, hier ist mal die Ino Datei ohne die Änderungen von Chris. Ich habe dein
1 | OneWire ds[] {38,39}; |
mal eingefügt aber ohne Erfolg.
Michael G. schrieb: > Ich habe dein > OneWire ds[] {38,39}; > mal eingefügt aber ohne Erfolg. Naja, du wolltest 2 Instanzen, und das sind sie, in einem Array. Und ja, ein einfaches Einfügen ist alleine wenig hilfreich.
Am einfachsten lassen sich mehrfache 1-wire Busse realisieren, wenn sie alle auf dem selben Port liegen. Man braucht ja nur 3 Grundfunktionen: pin_tristate, pin_low, pin_read. Dazu legt man einfach eine Maskenvariable an, mit der der gesamt Port verknüpft wird. Der Pin, der in der Maske gesetzt ist, ist dann ausgewählt.
Hallo Chris, leider hatte ich noch ein Fehler dabei gehabt. Habe jetzt aus der Github was gefunden und bei mir eingetragen. Dies funktioniert jetzt sehr gut. Dort kann man jetzt selber die Pins auch mit Anzahl eingeben. Habe die .Ino mal Angehängt. Danke trotzdem für deine Bemühungen. Vielen Dank!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.