1 Wire auf 2 GPIO pins

OP #6065643
Lesenswert?

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.
Angehängte Dateien:
#6065817
Lesenswert?

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
Gast #6065864
Lesenswert?

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 ?
OP #6066845
Lesenswert?

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.
Gast #6066895
Lesenswert?

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.
Gast #6070398
Lesenswert?

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
Angehängte Dateien:
OP #6070602
Lesenswert?

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!
Gast #6070728
Lesenswert?

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.
OP #6071671
Lesenswert?

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!
#6072292
Lesenswert?

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.
OP #6072820
Lesenswert?

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!!
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren