Hallo Zusammen,
ich habe den Quellcode von Tobias Mueller als Basis für eine erweiterte Version des 1wire Slave verwendet.
Hierbei habe ich den Quellcode überarbeitet und die beiden Version von Tobias DS2423/DS18BS20 in einen Quellcode eingepflegt.
Zusätzlich habe ich eine Emulation eine DS2408 und DS2413 eingebaut. Hierbei habe ich auch die EEPROM Routinen
zum Speichern der Daten im EEPORM bei Powerfail eingefügt. Jedoch habe ich in meinem Quellcode derzeit nur einen ATTINY44A unterstützt,
da mein Ziel ein DS2408 war und hier der Speicher bei den anderen Chips mir zu klein war. Und wegen ein paar Cent
mir die "Birne" nicht verbiegen wollte.
Zudem habe ich noch eine Optimierung des Stromverbrauchs durchgeführt. Derzeit unterstützt der Code jedoch nur den
Idle Mode der CPU, was aber immerhin 2-3mA Strom einspart, wenn der CHIP nicht arbeitet.
Der Quellcode wurde ausführlicher dokumentiert, damit andere die ganze Sache besser verstehen können
Die DS2408 Software und die DS2413 Software habe ich mit Signalspeicherung bis zur nächsten Abfrage ausgestattet, was ich noch genau testen muss. Auf dem Schreibtisch arbeitet es recht gut. Hierbei werden kurze Impulse, welche zwischen dem Abtasten der Chips von der CPU erzeugt wurden, zwischengespeichert.
Der Code steht unter GNU (wie auch im Quellcode erklärt) und ich bitte darum alle Autoren im Code stehen zu lassen, selbst wenn man den Code aus diesem Modul rauskopiert. Hier sollte immer ein Hinweis auf die ursprunglichen Autoren vorhanden sein.
Bitte auch die Wiki Betrag lesen: http://www.fhemwiki.de/wiki/1-Wire_Emulation_per_ATTiny
Viele Grüße
R.
P.S.: Anbei der Quellcode und der verwendete Schaltplan.
Edit: Schaltplan angepasst. Hier arbeite ich jetzt mit einem Fotowiderstand, welcher besser LED's erkennt (verschiedene Farben)
Der Quellcode wurde leicht überarbeitet. Fehler beseitigt. Stromverbrauch gesenkt (ca. 7mA, Neue Werte, wie im Schaltplan noch nicht gemessen)
Edit 10.10.2015
- Schaltplan aktualisiert (Fehler für Gold-Cap Ladung, Powerfailerkennung)
- Software Version 2.01 überarbeitet, Fehler EEPROM Sichern bei Powerfail behoben (Spannungsteiler entscheidend)
(Dauerbetrieb folgt noch, da hier Spannungseinbrüche zum Stop des Slaves führen können)
- Fusebits als Bild beigefügt.
- Interrupt-Handling für Powerfail geändert.
Edit: 04.12.2015
- Erweiterung des DS2423 um den Memorypage Support 14 & 15
- Kleine Fehler im DS2408 (siehe Thread)
- Powerfail Tests stehen noch aus, diese sollten aber nur eine Hardware oder Fusebits sein (BODLEVEL)
- Counter für Schreibbefehlen in Memorypage und Powerfail eingeführt.
Die Portierung der Memoryfunktion in benötigt viel Programmspeicher und kann nur noch in größere Version des ATTINY portiert werden
Edit:22.10.2017
- Erweiterung um einen DS2450, läuft seit Monaten bei mir fehlerfrei
neue Version separat mit der Version "owslave_2_03.c" abgelegt,
- Schaltplan für AnalogMessung beigefügt. 0-10V Schaltung.
define DS2408_A20000000001 OWDevice 29.A20000000001 2
attr DS2408_A20000000001 model DS2408
attr DS2408_A20000000001 room OWDevice
Hallo ritchie,
ich habe versucht das C-File zu kompilieren:
avr-gcc -g -Os -mmcu=attiny44a -c owslave.c
owslave.c: In function â__vector_2â:
owslave.c:1310:1: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
owslave.c: In function âmainâ:
owslave.c:1358:39: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
wie man sieht, ohne Erfolg. Compiler Version 4.7.2. Irgendeine Idee?
Ach übrigens, der C101 kann nicht aufgeladen werden. Durch die D100 kann der Gold-Cap nur entladen werden.
Hi,
ich habe den Quellcode mit dem AVR Studio in einer Windows VM übersetzt.
Heute morgen nochmals extra für Dich, um diese Ausgabe zu bekommen.
------ Build started: Project: owslave, Configuration: Debug AVR ------
Build started.
Project "owslave.cproj" (default targets):
Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!='').
Target "CoreBuild" in file "E:\Atmel Studio 6.0\Vs\Compiler.targets" from project "S:\owslave\owslave.cproj" (target "Build" depends on it):
Task "RunCompilerTask"
E:\Atmel Studio 6.0\make\make.exe all
Building file: .././owslave.c
Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe" -funsigned-char -funsigned-bitfields -I"S:\owslave-master\DS2423A\DS2423A" -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "owslave.d" -MT"owslave.d" -MT"owslave.o" -mmcu=attiny44a -o"owslave.o" ".././owslave.c"
In file included from .././owslave.c:37:0:
e:\atmel studio 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/crc16.h(36,2): #warning "This file has been moved to <util/crc16.h>." [-Wcpp]
S:\owslave\owslave.c(108,9): backslash and newline separated by space [enabled by default]
S:\owslave\owslave.c(134,1): multi-line comment [-Wcomment]
S:\owslave\owslave.c(140,54): backslash and newline separated by space [enabled by default]
S:\owslave\owslave.c(141,40): backslash and newline separated by space [enabled by default]
S:\owslave\owslave.c(279,5): backslash and newline separated by space [enabled by default]
S:\owslave\owslave.c(322,5): backslash and newline separated by space [enabled by default]
.././owslave.c: In function '__vector_2':
S:\owslave\owslave.c(1311,1): cast to pointer from integer of different size [-Wint-to-pointer-cast]
.././owslave.c: In function 'main':
S:\owslave\owslave.c(1359,39): cast to pointer from integer of different size [-Wint-to-pointer-cast]
Finished building: .././owslave.c
Building target: owslave.elf
Invoking: AVR/GNU Linker : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe" -o owslave.elf owslave.o -Wl,-Map="owslave.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=attiny44a
Finished building target: owslave.elf
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "owslave.elf" "owslave.hex"
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "owslave.elf" "owslave.eep" || exit 0
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objdump.exe" -h -S "owslave.elf" > "owslave.lss"
"E:\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-size.exe" "owslave.elf"
text data bss dec hex filename
2650 8 24 2682 a7a owslave.elf
Done executing task "RunCompilerTask".
Using "RunOutputFileVerifyTask" task from assembly "E:\Atmel Studio 6.0\Vs\Compiler.Task.dll".
Task "RunOutputFileVerifyTask"
Program Memory Usage : 2658 bytes 64,9 % Full
Data Memory Usage : 32 bytes 12,5 % Full
Done executing task "RunOutputFileVerifyTask".
Done building target "CoreBuild" in project "owslave.cproj".
Target "PostBuildEvent" skipped, due to false condition; ('$(PostBuildEvent)' != '') was evaluated as ('' != '').
Target "Build" in file "E:\Atmel Studio 6.0\Vs\Avr.common.targets" from project "S:\owslave\owslave.cproj" (entry point):
Done building target "Build" in project "owslave.cproj".
Done building project "owslave.cproj".
Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========
Generell sehe ich hier nur "warnings" von Casting Problemen. Hatte ich wohl übersehen.
Da musst Du dann wohl Hand anlegen, um diese Warnung zu beseitigen.
Generell wird aber ein Hex-File angelegt, wenn man es mit diesem Befehl verwendet.
avr-gcc -std=c99 -Wall -Os -mmcu=attiny44a -o owslave.hex owslave.c
Viele Grüße
Gruss R.
Ich versuch den Schaltplan gerade zu verstehen...
1. Wozu ist der Taster da?
2. Bei 4 Eingängen, welche 2 sind belegt für einen DS2423/DS2413?
3. Ist für den DS2406 auch die Speicherbefehle implementiert? OWSWITCH speichert Kum-Werte um 0Uhr direkt im Chip
4. Was genau kann man mit dem 100k Potis an den Eingängen regeln? Eine Eingangsschwelle? Ich sehe auch keine Kondensatoren zum Entprellen
5. Warum nur 4 Eingänge für einen DS2408?
6. Die LED´s blinken auf wenn Kontakt am jeweiligen Eingang anliegt? Im Ruhezustand sind sie aus?
Ich habe zwischenzeitlich Dougies Layout des DS2423 auf 1TE Hutschiene layoutet (incl Punkt6 und eeprom Speicherung), aber noch keine Zeit gehabt länger zu testen...
Grüsse
Hallo Tobias,
hier meine Antworten ...
Zitat
1. Wozu ist der Taster da?
Ich verwende Ihn um den Status der Eingänge an den LED's anzeigen zu lassen.
Zitat
2. Bei 4 Eingängen, welche 2 sind belegt für einen DS2423/DS2413?
PIN A1 / A2 Siehe auch Source Code
Zitat
3. Ist für den DS2406 auch die Speicherbefehle implementiert? OWSWITCH speichert Kum-Werte um 0Uhr direkt im Chip
Derzeit nicht. Feel free to add
Zitat
4. Was genau kann man mit dem 100k Potis an den Eingängen regeln? Eine Eingangsschwelle? Ich sehe auch keine Kondensatoren zum Entprellen
Da ich hier mit der Abfrage von LED's arbeite und keine Schalter verwende, Sah ich keinen Grund hierfür.
Zitat
5. Warum nur 4 Eingänge für einen DS2408?
Da ich Status der Eingänge direkt am zu überwachenden Geräte auch ohne FHEM sehen will und hier verwende ich
die Ausgänge für die LED's.
Zitat
6. Die LED´s blinken auf wenn Kontakt am jeweiligen Eingang anliegt? Im Ruhezustand sind sie aus?
Nein, Sie zeigen nur den Status der Eingänge an, wenn man den Taster drückt. (Um Strom zu sparen.)
Man kann natürlich auch einen Jumper setzen und sieht den Status immer direkt an den LED's.
Wie gesagt, dies ist eine Schaltung, welche ich für mich erstellt habe und daher sollte diese Schaltung auch meine
Bedürfnisse erfüllen. Dies kann ja jeder ändern wie er will, da ich ja beides bereitgestellt habe.
Viele Grüße
R.
Hallo ritchie,
mit dem AVR als 1wire Slave ergeben sich ganz neue Möglichkeiten:
als sehr interessant finde ich es, etwas nicht nur über 1wire sondern parallel dazu auch manuell über Taster zu schalten.
Als Einsatzzweck denke ich hierbei z.B. an ein Licht im Aussenbereich/Garten:
- ein-/ausschalten zentral über 1wire
- aktuellen Status (ein/aus) über 1wire abfragen
- manuell ein-/ausschalten vor Ort über einen Taster
Perfekt wäre noch die Ergänzung für automatisches ein-/ausschalten durch einen angeschlossen Bewegungsmelder an einem AVR-Eingang.
Das ist natürlich nur ein Einsatzgebiet und es gibt hier sicher etliche andere. Interessant vor allem auch bei einem 1wire-Ausfall, dass man immer noch vor Ort manuell schalten kann.
Ich habe mir den Quellcode schon mal angeschaut und habe hierzu ein paar Fragen:
- statt 4 Eingänge -> 2 Ausgänge und 2 Taster-Eingänge. Ist es ausreichend für die Ausgänge nur die DDRx Maske neu zu setzen?
- wo sollten die Taster implementiert werden, in der Hauptschleife oder in der 1wire-Schleife?
- der durch den Taster neue gesetzte Ausgang soll gleich ins Eeprom geschreiben werden, wie könnte man das lösen?
Viele Grüße
Fux
Hi,
ich bin gerade "offline", schaue mir aber Deine Sachen nach meiner Rückkehr an.
Generell kannst Du alle Ein-/Ausgänge nach Deinen Wünschen anpassen, nur die 1wire
Schnittstelle solltest Du so lassen. In der Interrupt Routine so wenig wie möglich machen,
da sonst das Timing des 1wire gefährtet ist.
Am besten ein Flag in der Interruptroutine setzen und in der Mainloop dann abarbeiten.
Gruss aus den Staaten
R.
Hallo Fux,
Zitat
- statt 4 Eingänge -> 2 Ausgänge und 2 Taster-Eingänge. Ist es ausreichend für die Ausgänge nur die DDRx Maske neu zu setzen?
Hier muss Du für die Software nur die Zeile "DDRA &~" entsprechend anpassen. Natürlich muss die Hardware auch entsprechend sein.
#define INIT_COUNTER_PINS /* Counter Interrupt */ \
GIMSK|= (1<<PCIE0);\
PCMSK0= (1<<PCINT3)|(1<<PCINT4)|(1<<PCINT0); \
DDRA &=~ (1<<PINA1) | (1<<PINA2); \
istat=PINB;
#endif
Zitat
- wo sollten die Taster implementiert werden, in der Hauptschleife oder in der 1wire-Schleife?
Wie bereits gesagt, sollten diese Funktionen nicht in der 1wire Routine sein.
Je nach verwendete CPU kannst Du natürlich kleine Funktionen in der Interrupt Routine (Falls dieser PIN Change on Interrupt unterstützt, geht nicht bei jedem PIN) programmieren. Nur ist für diesen Zeitraum, eine evtl. 1wire Komunikation nicht möglich. Daher hier nur ein Flag setzen und die Bearbeitung in der Hauptloop durchführen.
Eine reine Abfrage des Schalters, sollte auch in der Hauptroutine möglich sein, je nach Impulslänge. (sehr kurze Signale -> Interruptroutine).
Das menschliche Betätigen eines Tasters -> Mainloop.
Drehzahlmessung -> Interrupt
Zitat
- der durch den Taster neue gesetzte Ausgang soll gleich ins Eeprom geschreiben werden, wie könnte man das lösen?
Diese Quellcodezeile sind für das Schreiben in das EEProm zuständig.
#include <avr/eeprom.h>
...
// für eine Schreiboperation...
eeprom_write_byte((uint8_t *)0,0x55);\
eeprom_write_byte((uint8_t *)1,latch_piostate);\
// für Leseoperationen
state=eeprom_read_byte((uint8_t *)0); // read the magic code, if the eeprom is valid
if( state == 0x55)
{
Counter[0]=eeprom_read_dword((uint32_t *)1); // EEprom Values are valid
Counter[1]=eeprom_read_dword((uint32_t *)5);
}
Aber vorsichtig, diese Funktionen laufen "Atomic", das heisst, sie werden nicht durch einen Interrupt unterbrochen.
Daher werden die entsprechenden Funktionen nur beim Ein-/Ausschalten des Controllers aufgerufen.
Der von mir erstellte Code ist für einen Atmel At Tiny 44A vorgesehen. Durch eine entsprechende Erweiterungen der entsprechenden
Macrodefinitionen kann jeder andere Controller verwendet werden. Also auch ein Atmega 32/64/...
Zitat
Als Einsatzzweck denke ich hierbei z.B. an ein Licht im Aussenbereich/Garten:
- ein-/ausschalten zentral über 1wire
- aktuellen Status (ein/aus) über 1wire abfragen
Dies kann man auch mit den Standardbausteinen des 1wire machen, dafür ist der Software-Slave nicht notwendig.
Seine Stärken sind hier evtl. Sicherheitsfunktionen zusätzlich einbinden. Motoren nur einschalten, wenn evtl. Rückmelden vorhanden sind oder
noch nicht. Diese eigenständig ausschalten (kein Wasser mehr da, Pumpe ausschalten, da Trockenlauf die Pumpe beschädigt...)
Da geht natürlich auch mit zusätzlichen Standard 1wire Bausteinen, kostet aber mehr und die Verwaltung macht hierbei FHEM. Nicht wirklich sicher, da bei Ausfall des Systems die Pumpe immer noch läuft.
Und natürlich der "Manuelle Betrieb" ohne FHEM, meine Anwendung.
Viele Grüße
R.
Hallo ritchie,
Danke für Deine ausführliche Antwort! Hoffe ich habe demnächst mal Zeit um das Ganze anzuschauen.
Grüße
Fux
Hi and sorry about English,
I manage to compile your code for Attiny84 but could you tell the fuse bits you are using? My understanding is that those should be same for tiny84 as on tiny44A.
Also would it be possible to add more counters than two?
jaripetteri
In principle you may add as many counters as you like - but then would create a non-standard 1-Wire device that has no software support (so far).
Regards
pah
That is true. Maybe make device look like two devices on same package for 1wire bus. Two address and two dual counter. Adding another MCU is sure more simple solution.
But anyway now I'm more concern about making just one to work. I have pretty simple hardware, basically just MCU connected to LinkUSB, powered by USB. I'm able to communicate other devices (DS1820) on bus with OWFS on RPi but when I power MCU it blocks all communication on bus. I have compared my hardware with Ritchie's and it should be fine. Fuse settings I'm using are High = 0xDD, Low = 0XE2 & Extended = 0xFF and those i'm not sure are those right. Also tried to make DS2408 device but same result. I'm missing something here but can't figure it out what it is.
Is there tools to sniff 1wire bus somehow?
Hi Jaripetteri,
I used a logic analyser to check, if the transmission work.
But my Analyser is a only for hobbyist and not that good.
But it shows the transmission very well for about 20 ms.
Google will tell you alot of choices, depending on the prize.
I just used the standard fuses for the chip. I can check this at the weekend,
if you still need the setting. How about your skills in atmega programming ?
The software is able to create almost every combination of information
for the 1-wire bus. But keep in mind, that such chips will run only in your envirement.
If you have special requests, you can change this, but it is not supported by owserver or
OWSWITCH,.... . You have to modify such code as well, by your self.
I would not recomment to do this. Use better more that one of such chips to fullfil your requirement.
Hope this helps
R.
Bekommt man das eigentlich leicht in die arduino IDE mit einem 328p übertragen?
Gesendet von meinem ALCATEL ONE TOUCH 997D mit Tapatalk
Hi Tobias,
ich vermute mal, das man sich schon etwas mit dem chip beschäftigen muss. Der größte Aufwand
ist immer bei der Anpassung der entsprechenden Register Definitionen (Header MACROS).
Leicht würde ich also nicht sagen, aber machbar.
Gruss R.
Ich habe die Firmware für den ATTiny44a 1-Wire Slave (owslave.c) etwas angepasst.
Das Speichern der Werte im EEprom was zu unsicher und hat bei mir auch mal Probleme bereitet.
Ich verwende die ESP8266-07 <-> DS2480 <-> ATtiny44a Hardware, wie hier beschrieben:
http://forum.fhem.de/index.php/topic,38024.0.html
Achtung, das Pinout ist unterschiedlich.
Super Arbeit!!!
Steht irgendwo was an welchem Pin des ATTiny44a anzuschließen ist? Ist die FW auch auf dem ursprünglichen ATTiny25 nutzbar bzw an dem ursprünglichen Schaltbild des DS2423?
Siehe bitte Schaltplan:
http://forum.fhem.de/index.php?action=dlattach;topic=38024.0;attach=33258
Ich nehme an, Du meinst diesen DS2423 hier:
http://m1n1.de/html/1wire.html
In der aktuellen Konfiguration wird die FW auf dem ATtiny25 nicht laufen – die Portbelegung stimmt nicht mit dem ATtiny44A überein.
ok, hätte ja sein können das man über ein Define auswählen kann ob die 44er oder die 25er Variante läuft... Hab jetzt nicht groß in den code geschaut...
Ich finde es aber großartig das man einen Code hat den man nur noch über die defines customizen muss :)
Ich bin ursprünglich über diese Seite
https://www.tobynet.de/index.php/1-wire-device-mit-avr/12-avr-owdevice-v12
auf die Idee gekommen, einen ATTiny zu verwenden.
Ein größeres Projekt dazu findet sich hier:
https://github.com/smurfix/owslave
Leider ist nicht alles über Defines anpassbar.
Es gibt z.B. zwar OW_PORT & OW_PIN, aber in INIT_TEMP() wird wieder direkt PB2 verwendet...
Vielleicht stricke ich das mal um - wenn viel Zeit ist :)
Hi,
Ich kann mir das ganze gerne mal ansehen.
Derzeit habe ich aber eingeschränkte Moeglichkeiten.
Es wird also was dauern, bis ich dazu komme.
Ich wollte sowieso noch einige Funktionen einbauen,
Da kann ich das gleich mit machen (alle Defines anlegen).
Gruß aus USA
siehe auch wiki für weitere Infos.
R.
ZitatDerzeit habe ich aber eingeschränkte Moeglichkeiten.
Ich dachte, die USA seien das Land der unbegrenzen Möglichkeiten ?
LG
pah
Dachte ich auch immer, ;)
aber in einem Motel und auf einem Tablet/Handy ist man schon was eingeschrankt.
Ausserdem wuerde meine Frau mich einen Kopf kleiner machen.
Viele Gruesse aus Franklin / North Carolina
R.
Hallo Zusammen,
ich bin derzeitig an der Überarbeitung und Tests der von mir hier abgelegten Software am arbeiten.
Hierbei habe ich bis jetzt folgende Erweiterungen eingefügt.
//VERSION 2.01 Correct some warnings during use of eeprom Functions Type cast
// Add Software_reset after eeprom_write to avoid Problems of
// prevent unknown executing code during power fail (add watchdog function)
// Add function of failure diagnosis on LEDs for communication check
Sind noch weitere Sachen/Fehler bis heute aufgefallen ? Vielleicht kann ich sie ja berücksichtigen.
In der Wiki (http://www.fhemwiki.de/wiki/1-Wire_Emulation_per_ATTiny) will ich dann auch die vewendeten Fuse Bits ablegen und einige Infos zur Erstellung.
Edit 1: Es befinden sich zwei Schaltungsfehler in der Schaltung, welche eine korrekte Funktion der Powerfail Erkennung verhindern.
D100 muss durch eine Drahtbrücke ersetzt werden. Sie verhindert das Laden des Kondensator C101 :o
Der Widerstand R2 muss auch 100K geändert werden, damit die Spannung näher an dem Umschaltpunkt von High auf low liegt, damit
der Prozessor mehr Zeit zum Sichern der Daten hat.
Ebenso scheint die Software noch nicht ganz rund in diesem Bereich zu arbeiten. Wenn ich fertig bin, werden die Dokument aktualisiert.
Zudem wird hiernach noch BOR notwendig, damit der Prozessor keinen Blödsinn mehr macht.
Viele Grüße
R.
Hallo Zusammen,
neue Version der Software abgelegt.
Ich habe hier Fehler in der Behandlung des EEPROM Sicherung bearbeitet. Ebenso einige Sachen noch parameterierbar gemacht.
Auch habe ich zwei Fehler in der Schaltung behoben. (Eine Diode entfernt und die Widerstandswerte für R1&R2 geändert.
Viele Grüße
R.
Ok, ist in der Software auch die Nutzung der internen memory pages drin ? Die hatte ich mal eingebaut, weil das ganz nützlich zum Ablegen der Zwischenwerte ist.
LG
pah
Hallo Pah,
das habe ich nicht eingebaut.
Wenn Du mir aber diese Version zur Verfügung stellen würdest, würde ich es noch einbauen.
Viele Grüße
R.
Bitte e-Mail-Adresse per PN, dann schicke ich die Datei.
LG
pah
Hi,
super arbeit... Insbesondere da mein Initial-Wiki Beitrag jetzt endlich mit Leben gefüllt wurde wozu ich bis dato noch keine Zeit gefunden hatte :) :)
Hast du für den ATTiny25 auch einen aktualisierten Schaltplan parat? Würde super in den Artikel passen. Von diesen Dingern hab ich noch 50 Stück bei mir rumliegen ;)
Ist in der Schaltung auch die Änderung zur besseren Erkennung von langsamen Spannungsabfällen eingebaut? Siehe Bild. War mal hier im Forum in einem Thread dabei gewesen...
Abbildung 5 in Kapitel 3 des in Arbeit befindlichen Buches.
(http://sh_0305.png)
Allerdings nur mit der "einfachen" Erkennung des Spannunsabfalls, und auch nur als Option
LG
pah
Hallo Zusammen,
@Tobias
ZitatHast du für den ATTiny25 auch einen aktualisierten Schaltplan parat? Würde super in den Artikel passen. Von diesen Dingern hab ich noch 50 Stück bei mir rumliegen
Na, wenn Du 50 Stück davon noch auf Lager hast, ist das doch eine entsprechende Motivation, die Anpassung selber zu machen.
Ich selber habe nur den Counter von "dougie" im Einsatz. Für meine eigenen Schaltungen verwende ich den Attiny 44a und andere. Daher liegt diese Schaltung nicht ganz in meinem Focus.
Derzeit bin ich an in der Erweiterung der Software um das Schreiben/Lesen ins "EEPROM" des DS2423 zu emulieren.
Da ich die Erweiterung für das EEPROM gestern eingebaut habe (hier nochmals vielen Dank an pah für den Quellcode), muss ich auch das zeitliche Verhalten "meiner" Schaltungs-Version prüfen, da ich jetzt 128 bytes mehr zu sichern habe (ich will memorypage12..15 unterstützen). Hier benötigt der Prozessor ca. 70 ms für das Sichern der Wert, bevor BOD zuschlägt.
Zitatsuper arbeit... Insbesondere da mein Initial-Wiki Beitrag jetzt endlich mit Leben gefüllt wurde wozu ich bis dato noch keine Zeit gefunden hatte
Das hatte ich vor ein paar Monaten (Mai) mal gemacht. Jedoch alles auf den Attiny 44a gemünzt.
Vielleicht erweitere ich den Code irgendwann mal um den Attiny25. (Define Bereich). Da dieser jedoch deutlich weniger Funktionen hat, ist meine Motivation derzeit nicht sehr gross hierfür.
@pah
Nicht schlecht der Specht.
Viele Grüße
R.
Hallo zusammen,
danke zunächst einmal für die Bereitstellung der Sourcen.
Ich habe mich die letzten Tage mit den Sourcen auseinandergesetz und versucht, die Output-Funktion des DS2408 in Betrieb zu nehmen.
Dies scheiterte zunächst... Mir sind dabei folgende Punkte aufgefallen, die Probleme bereiten:
Registerdefinition
Zunächst ist das #define des ChannelAccess-Registers verdreht. In Version 2.2 steht hier:
#define OW_WRITE_CHANNELACCESS_REGISTER 0xA5
Allerdings ist 0xA5 der OW_Resume Befehl. Damit dürfte dann jeder OW_Resume Befehl in der Schreib Routine landen...
Hier müsste stattdessen "0x5A" stehen, wie es beim DS2413 der Fall ist:
#define OW_WRITE_CHANNELACCESS_REGISTER 0x5A
Die Output-Routine
Die zu setzenden Outputs werden als zwei Bytes übergeben. Das erste stellt binär die Zustände der 8 IOs dar, das zweite ist invertiert.
Bei der Addition der beiden uint8 ist in den Sourcen der Vergleich schief:
case OW_WRITE_CHANNELACCESS_REGISTER: // write to the Channel Access register
if ((ow_iobuffer[1] + ow_iobuffer[2]) == 0 ) // The sum must be zero for the correct transmission
{
Der Vergleich gegen "0" ist nie wahr. Wenn man sich die beiden Extremwerte anschaut, dann kann der IO-Zustand 0x00 (alles low) oder 0xFF (alles high) sein.
Invertieren ergibt dementsprechend 0xFF und 0x00. Allerdings ist 0x00 + 0xFF == 0xFF! Damit also der Vergleich wahr werden kann muss hier stehen:
case OW_WRITE_CHANNELACCESS_REGISTER: // write to the Channel Access register
if ((ow_iobuffer[1] + ow_iobuffer[2]) == 0xFF ) // The sum must be 0xFF for the correct transmission
{
Macht man diese Anpassungen, dann werden die Befehle zum Setzen (SET_PIO_[A..G] / CLEAR_PIO_[A..G]) ausgeführt.
Für meine Applikation benötige ich 4 Inputs & 4 Outputs. Daher habe ich die Makros für E bis G durch die "LED" -Makros ersetzt.
#define SET_PIO_A SET_BIT(PORTA,1) // Port definitions for the real used hardware
#define CLEAR_PIO_A CLEAR_BIT(PORTA,1)
#define SET_PIO_B SET_BIT(PORTA,2)
#define CLEAR_PIO_B CLEAR_BIT(PORTA,2)
#define SET_PIO_C SET_BIT(PORTA,2)
#define CLEAR_PIO_C CLEAR_BIT(PORTA,2)
#define SET_PIO_D SET_BIT(PORTA,2)
#define CLEAR_PIO_D CLEAR_BIT(PORTA,2)
#define SET_PIO_E SET_BIT(PORTA,7)
#define CLEAR_PIO_E CLEAR_BIT(PORTA,7)
#define SET_PIO_F SET_BIT(PORTB,1)
#define CLEAR_PIO_F CLEAR_BIT(PORTB,1)
#define SET_PIO_G SET_BIT(PORTB,0)
#define CLEAR_PIO_G CLEAR_BIT(PORTB,0)
#define SET_PIO_H SET_BIT(PORTA,5)
#define CLEAR_PIO_H CLEAR_BIT(PORTA,5)
Weiterhin habe ich die LED Defines (SHOW_IOSTATE_ON_LED & SHOW_ERROR_ON_LED) auskommentiert.
Es wäre schön, wenn wir diese Änderungen in eine nächste Version einpflegen könnten.
MfG.
Hi,
vielen Dank für Deine Hinweise.
Derzeit bin ich noch an der Bearbeitung des DS2423 (RAM Emu). Irgendwie will meine
Checksummenberechnung nicht so wie ist (Vermutung).
Deine Änderungen kommen dann in diese Version auch mit rein. Habe aber derzeit (schon seit längerem
viel um die Ohren), kann also noch was dauern.
Gruss R.
Hallo Zusammen,
ich habe die Version 2.02 des AVR 1Wire-Slave Moduls im ersten Thread abgelegt.
Es stehen jetzt noch Powerfail Tests aus.
Viele Grüße
R.
Passend zum Beitrag biete ich im Marktplatz (http://forum.fhem.de/index.php/topic,48755.0.html) ein kleines Kontingent an bestückten Platinen zum Kauf an.
Hi zusammen,
hat vielleicht irgendjemand zu diesem Projekt eine Platine erstellt ?
Ich würde mir gerne ein paar Platinen ätzen und würde mir gerne die Arbeit ersparen, daß in Eagle zu machen, wenn schon mal jemand etwas gemacht hat ... wenn nicht, muß ich halt wohl mal ran ..
VG ak323
Gerberdaten und Warenkorb für alle Interessierten, die die Platine nachbauen möchten.
Unbestückte Leiterplatten: ITEAD Studio (https://www.itead.cc/open-pcb/pcb-prototyping/2layer-green-pcb-5cm-x-10cm-max.html)
Bauteile: Reichelt Elektronik (https://www.reichelt.de/)
Die Verwendung der Daten für kommerzielle Zwecke, Herstellung oder gewerblichen Vertrieb ist untersagt.
:) :) :)
Supi ... Danke !
ak323
Hey,
Cool Danke Dir
@locutus mit was machst du deine Layouts mit Eagle oder was anderem.
Ich versuche mir gerade einzuarbeiten in Layout Programme.
Sprint, Eagle
Gruß und Danke Gerd
Hi drv103, locutus,
ich brauche auch Outputs für meine Anwendung.
Habt ihr die Änderungen schon in den Code eingepflegt ?
Zitat von: Inputsammler am 07 März 2016, 22:55:53
@locutus mit was machst du deine Layouts mit Eagle oder was anderem.
Ich versuche mir gerade einzuarbeiten in Layout Programme.
Sprint, Eagle
CadSoft Eagle
Zitat von: ak323 am 12 März 2016, 08:10:14
Hi drv103, locutus,
ich brauche auch Outputs für meine Anwendung.
Habt ihr die Änderungen schon in den Code eingepflegt ?
Und mit Outputs ist ein DS2408 gemeint?
Hallo Zusammen,
Zitatich brauche auch Outputs für meine Anwendung.
Habt ihr die Änderungen schon in den Code eingepflegt ?
Das wird bereits vom Quellcode unterstützt, nur halt nicht für alle Kombinationen von Ausgängen.
Hier muss man seine Ausgangskonfiguration selber anpassen und das Projekt neu kompilieren.
Hierbei darf man aber nie vergessen, das im Normalfall ein DS2408 oder DS2413 vollkommen ausreicht
(Ich habe selber 4 DS2408 mit jeweils 8 Relais und einige (5 oder 6) DS2413 mit einem Relais und einem Eingang im Einsatz.)
Wer nicht in der Lage ist den Quellcode
eigenständig an seine Schaltung anzupassen, sollte die Finger davon lassen.
Nicht zu vergessen, wenn man zwei von den Teilen im Netz hat, muss man für jeden einen HEX File erstellen.
Hier muss man/frau die Programmierumgebung für das Flashen haben.
Das ganze ist eigentlich für Schaltungen mit Wandelfunktionen gedacht. Hier habe ich für
mich eine Überwachung von
externen Geräten realisiert, wo ich mittels Fotodiode den LED-Status abfrage. Danach aus
sportlicher Sicht noch
weitere Funktionen eingebaut und weitere Module von Tobias in den Quellcode eingebaut, damit er einheitlich für alle Chips zu verwenden ist.
Andere Schaltungen wären mit diesem Quellcode auch möglich, können aber nicht derart verallgemeinert werden, das sie für jeden passen.
Der Quellcode, die dazugehörige Wiki und verlinkte Webseiten sollten aber jedem einen entsprechenden Einstieg
geben. Derzeit sind von mir keine weiteren Erweiterungen geplant.
Viele Grüße
R.
Hallo ak323,
bei mir nutze ich die I/O-ports auch als Ausgänge um über einen ULN-Baustein Relais zu betätigen.
Ich habe den Baustein in 4 Inputs (wie im Original) und 4 Outputs getrennt.
Dazu muss der Quelltext allerdings angepasst werden. Ich könnte dir meinen angepassten Quellcode zur Verfügung stellen.
Allerdings stimmt ritchie's Aussage... wenn man nicht mit der Materie vertraut ist, hilft es einem nicht weiter. :(
Wenn ich die Tage etwas Luft habe, beschreibe ich mal die Stellen, an denen die Änderungen stattfinden müssen.
Hinzu kommt, dass man bei der Einbindung in FHEM etwas mehr Aufwand benötigt. Derzeit muss ich die Ausgänge byteweise setzen.
Deshalb muss man zunächst die Status aller Ausgänge auslesen und nach Anwendung der gewollten Änderung wieder zurück schreiben.
Edit:
Notwendige Änderungen
Zunächst habe ich ganz oben im Quelltext die notwendigen Defines für den DS2408 einkommentiert, alle anderen Auskommentiert (auch SHOW_IOSTATE_ON_LED / SHOW_ERROR_ON_LED). In der Definition von INIT_PORTS (DS2408) habe ich die Richtungsregister der Ports angepasst, zusätzlich auch den "default"-Wert der Ausgänge (PortX=0). Anschließend habe ich PIO_E bis PIO_H definiert - dort liegen bei mir die Ausgänge. Genauso für die "SET_PIO_" und "CLEAR_PIO_" Makros. Bei der Interruptbehandlung habe ich auch eine Erweiterung vorgenommen. Auch die Schreib- und Leseroutine habe ich erweitert.
Da eine Aufzählung aller einzelnen Änderungen etwas zu umfangreich scheint, hänge ich mein .c File mal an. Es kompiliert sauber im AtmelStudio 7 durch. Allerdings ist bei mir die Zuordnung der PINs geändert(!). PA1-PA4 sind Eingänge. PA5,PA7, PB0 und PB1 Ausgänge.
Gruß
drv103
Ich habe dank der Gerber Daten von locutus die Mindestmenge an Platinen in China bestellt. Wer eine unbestückte Platine braucht kann sich einfach per PN bei mir melden. Preis 4 Euro pro Stück + 3,60 Euro Versand aus Österreich. Es sind noch 2 Stück verfügbar.
Hallo,
die Platine von Damian enthält einen ISP Stecker. Leider lässt sich der ATTiny darüber nicht programmieren. Wenn ich ihn aus der Fassung nehme und separat mit dem Programmer (USBTinyISP) verbinde, funktioniert das Programmieren. Gibt es einen "Trick" damit dies auch auf der Platine funktioniert oder mache ich da noch irgendwo einen Fehler?
Viele Grüße
Achim
Zitat von: Achim am 16 April 2016, 12:32:26
Gibt es einen "Trick" ...
Potis auf Rechtsanschlag.
Hey
Nein da gibt es keinen Trick nur richtig anschließen.
Wenn ich zuhause bin suche ich die richtige Bezeichnung.
Gruß Gerd
Hallo Damian,
ZitatPotis auf Rechtsanschlag.
geht nicht, auch nicht Linksanschlag. Ich habe ihn jetzt "extern" programmiert.
Viele Grüße
Achim
Mein 3 € USBasp aus Fernost erkennt den TINY ausschließlich in der Rechtsstellung der Potentiometer.
Im Schaltbild ist die SCK Leitung direkt mit dem LM358 verbunden. Dies könnte die Ursache sein, weshalb der Programmer scheitert.
Hey
Das Stk500 und meine anderen China Programmer haben keine Probleme.
Hatte Anfangs nur das Problem von 10 poligen Apdapter auf 6 poligen Stecker.
http://www.mikrocontroller.net/articles/AVR_In_System_Programmer
Ich habe nur bei den Chip die Fuse geändert, da dieser nicht immer gut startete.
Bei mir ist kein Unterschied ob Poti links oder rechts ist. Kann ihn immer auslesen.
Hallo,
ich habe einen USBtinyISP aus Fernost. Wahrscheinlich kommt er mit dem angeschlossenen LM358 nicht zurecht. Kabel schließe ich aus. Ist ein Flachkabel, das ich auch für die "externe" Programmierung verwendet habe.
[Update]
Ich habe die beiden LM358 ausgelötet und auf Sockel gesetzt (ja, ich weiß, einer hätte zu Test ausgereicht..). Ohne den LM358 funktioniert das Programmieren auch mit meinem USBTinyISP V3.0.
Viele Grüße
Achim
Hey Achim
Danke für die RM.
Sind die Programmer doch so unterschiedlich.
Gut zu wissen für andere Projekte.
Gruß Gerd
Hab einen Bug in der Firmware gefixt, durch den Counts verloren gingen:
Hier ists beschrieben:
https://forum.fhem.de/index.php/topic,10962.msg454396.html#msg454396
Hi zusammen,
ich habe jetzt dankenswerterweise ein paar Plantinen bekommen.
Nun ist alles zusammengelötet und ich scheitere am Programieren des ATtiny !
Kann mir einer von Euch erfahrenen Progrmmierern einen Tip geben, wie ich das hex-File über einen Ardunio als ISP in den ATtiny bekommen kann ... ?
Danke für Eure Hilfe !
ak323
Hallo zusammen,
ich habe nun mal die Platine von Locus an meinen 1wire-Bus (USBLink-Adapter fuchs-Shop_OWX definiert) angeschlossen,
nach einen shutdown restart wird die Platine als OWCOUNT - DS2423 A20000000001 korrekt erkannt.
Nun meine Fragen:
1. gibt es eine Funktionsbeschreibung für diese Platine ?
1. am IOA habe ich einen Reedkontakt angeschlossen der Kanal A: wird gezählt aber nach kurzer Zeit ist der Kanal A: wieder auf 0 und wird nicht gespeichert ?
2. was kann man mit den Potis am IOA bis IOD genau einstellen ?
3. die LEDs haben bei mir keine Funktion trotz gesetzten Jumper ?
4. nach einen Neustart des FHEM-Servers (trennen vom Strom) ist Kanal A: und B: auch wieder auf 0 ?
was mache ich da falsch ?
danke
Roberto
Zitat von: co010 am 21 Juni 2016, 18:44:01
1. gibt es eine Funktionsbeschreibung für diese Platine ?
2. was kann man mit den Potis am IOA bis IOD genau einstellen ?
Siehe Antwort #4 (https://forum.fhem.de/index.php/topic,22431.msg181695.html#msg181695)
Zitat von: co010 am 21 Juni 2016, 18:44:01
3. die LEDs haben bei mir keine Funktion trotz gesetzten Jumper ?
Nur DS2408 und DS2413, siehe Quellcode owslave.c (https://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105)
Zitat von: co010 am 21 Juni 2016, 18:44:01
1. am IOA habe ich einen Reedkontakt angeschlossen der Kanal A: wird gezählt aber nach kurzer Zeit ist der Kanal A: wieder auf 0 und wird nicht gespeichert ?
Eventuell schrittweise am Poti drehen.
Zitat von: co010 am 21 Juni 2016, 18:44:01
4. nach einen Neustart des FHEM-Servers (trennen vom Strom) ist Kanal A: und B: auch wieder auf 0 ?
Siehe OWCOUNT-FHEMWiki (http://www.fhemwiki.de/wiki/OWCOUNT)
attr <name> nomemory = 1|0 (when set to 1, disabels use of internal memory)
Okay danke locutus für die Antworten;
ich werde das nochmal testen mit dem Speichern der Zähler mit ,attr <name> nomemory = 1|0 (when set to 1, disabels use of internal memory)
mit attr <name> nomemory = 0 in der config müssten dann die Zählerstände gespeichert bleiben.
Eine Frage noch, da beim trennen der Stromversorgung am pi auch der 1-wire USB-Busmaster stromlos wird und da evt.die Counter Platine mit ext.+5V versorgen
um das Zählen der Impulse weiter zu garantieren,wäre das möglich ?
mfg Roberto
Hallo Zusammen,
hat sich von Euch schon mal jemand mit der Emulation des DS2450 in diese Software beschäftigt.
Gruss R.
Hallo zusammen,
ich habe die Platine (https://forum.fhem.de/index.php/topic,22431.msg419336.html#msg419336) ein wenig kompakter gestaltet. Da die meisten Interessenten ausschließlich den DS2423-1W-Counter benötigen, sind die Leuchtdioden, LED-Vorwiderstände, der zweite OP AMP samt externer Beschaltung und der Taster entfallen.
Die Version 2 der kleinen Platine wird mit festen Widerständen bestückt.
Die Gerberdaten sind für ITEAD (https://www.itead.cc/open-pcb/pcb-prototyping/2layer-green-pcb-5cm-x-5cm-max.html), Warenkorb für Reichelt Elektronik (http://www.reichelt.de/).
Die Verwendung der Daten für kommerzielle Zwecke, Herstellung oder gewerblichen Vertrieb ist untersagt.
Hallo Zusammen,
ich plane derzeit den Chip "DS2450" in die Simulation mit aufzunehmen und eine Hutschienenversion für das Einlesen
von Analogeingängen zur erstellen. Hierbei würde ich gerne PT1000 (optional) verwenden, damit man diese für den Heizungsbau
verwenden kann. Hat hier jemand bereits eine leere Platine für das Hutschienengehäuse unter Eagle als Download zur Verfügung ?
Da hier aber meine Heizungssteuerung mit arbeitet, muss ich wohl oder übel in den saueren Apfel beissen und das Teil selber
entwickeln. Leider ist die e-Service Lösung (Fertigmodul und Bausatz der Analog Eingangsplatine) für mich nicht zu gebrauchen (OW Server).
Ich habe sie hier liegen (3 Kanal Fertigmodul / 4 Kanal Fertigmodul und Bausatz-Leerplatinen), teuerer Spass ohne Nutzfaktor. :-[
Da der DS2450 in der Zukunft abgekündigt wird, scheint es auch eine Arbeit zu sein, welches bald von anderen benötigt wird.
Derzeit schaue ich mir die einzelen Prozessoren von Atmel an, um die geforderten Funktionen zu realisieren.
Leider wird das etwas dauern, aber derzeit gibt es nicht vernüftiges was man sonst kaufen könnte oder ?
Edit: Hardware steht und der erste Schaltplan auch.
Es wird der ATTINY44A verwendet und ein ADS1115 für die Analog-Wandlung (16Bit).
Die Software wird im Hauptcode eingefügt, jedoch wird eine andere Hardware vorausgesetzt, da mir die 10Bit Wandlung des ATTiny zu gering ist und ich auf eine zusätzlichen Chip zurückgreifen will.
Viele Grüße
R.
Zitat von: ritchie am 27 Oktober 2016, 18:50:53
Hat hier jemand bereits eine leere Platine für das Hutschienengehäuse unter Eagle als Download zur Verfügung ?
Welcher Gehäusetyp? Ich habe ein Eagle Projekt für Pollins bzw. Reichelts 2-C Hutschienengehäuse.
Hallo locutus,
das 2C Gehäuse dürfte wohl zu schmal sein, würde aber als Basis auch gehen. Schliesslich
müsste ich es ja nur was breiter gestalten.
Anbei die erste Version des Schaltplans. Ich muss noch die Datenverbindung via I2C zu dem Baustein einwenig
vordenken, bevor ich mich an die Realisierung gebe.
Derzeit schwanke ich noch mit den 16 Bit des ADS1115 gegenüber den 10Bit ADC des ATTINY. Ob sich der Unterschied für den Hausgebrauch bemerkbar macht, da der Chip lange Lieferzeiten hat.
Viele Grüße
R.
Edit: Zenerdiode in Schaltplan eingebracht (hatte ich vergessen)
Edit1: Schaltplan nochmals überarbeitet um das Programm einfacher zu gestalten und Powerfail Funktionen entfernt, da nicht benötigt.
Edit2: Schaltplan nochmals überarbeitet, Verwendung der USI I2C (TWI) Pins für das Interface zum ADS1115 verwendet.
Edit3: Erstes Layout fertig gerootet und als Bild angefügt. Software DS2450 Module codiert (ungetestet) IDS1115 Ansteuerung fehlt noch, I2C Routinen vorhanden.
Edit4: So, das sollte es jetzt sein.
Hallo,
ich bin nun auch dazu gekommen die Platine von locutus zu bestücken und auszuprobieren. Leider bekomm ich das Teil jedoch nicht zu laufen. Programmiert, Fuses gesetzt und kontrolliert, jedoch will sich das gute Stück nicht am Bus zu erkennen geben. Um Fehler am Bus auszuschließen, habe ich es schon an zwei unterschiedlichen probiert: Einmal am RPi, und einmal am Arduino, jeweils mit 5V Busspannung. Die Dallas Temperatursensoren laufen jedenfalls einwandfrei. Am Arduino gibt sich die Platine manchmal (sehr selten und auch nur bei Fuse Setting SUT_CKSEL: int. RC Osc. 8MHZ, Start-up time PWRDWN/RESET: 6 CK/14 CK + 0 ms) zu erkennen, sprich man kann sie manchmal als Device in FHEM sehen. Werte abfragen geht dann aber wieder nicht. Versucht habe ich auch verschiedene Typen (DS2423, DS18BS20 etc...) mit der Platine durchzuspielen, das Ergebnis ist aber für alle das Gleiche. Ich bin mit meinem Latein leider am Ende, vielleicht hat aber jemand einen Denkanstoß was ich da falsch mache.
Danke und viele Grüße
Hallo th1984,
ändere diese Zeilen mal
#define OWT_READLINE 3 // 3 for fast master, 4 for slow master and long lines
#define OWT_LOWTIME 3 // 3 for fast master, 4 for slow master and long lines
auf diesen Wert
#define OWT_READLINE 4 // 3 for fast master, 4 for slow master and long lines
#define OWT_LOWTIME 4 // 3 for fast master, 4 for slow master and long lines
Gruss R.
Der ATtiny macht bei (BODLEVEL) 4,3V dicht. Der Spannungsabfall an der BAT43 beträgt ca. 0,3V. Die 1W-Busspannung darf nicht unter 4,6V fallen!
Hallo,
die Zeilen hatte ich nach meinem Post auch noch ausprobiert, mit keinem Erfolg. Ich werde mir aber heute Abend nochmal die Busspannung genau anschauen, evtl liegt diese tatsächlich bei ca. 4,6 V was ja dann knapp zu wenig wäre. Dann ist die Lösung hoffentlich denkbar einfach. Danke schonmal für die beiden Inputs!
Thomas
Hallo Thomas,
bist Du mit dem Problem weitergekommen? Bei mir sieht es leider genauso aus, den Aufbau der Schaltung habe ich geprüft und keinen Fehler gefunden.
Bei 2 verwendeten Attinys zeigt sich das gleiche Bild: Der Testmode über Taster/Jumper funktioniert nicht, das Melden am OneWire-Bus erfolgt nur sporadisch (selten). Wenn der Attiny erkannt werden sind alle anderen Abfragen ungültig.
Das Setzen der Timing-Parameter auf "4" hat nichts gebracht, ebenso die Verwendung einer externen (stärkeren) Spannungsversorgung mit 5V. Am Controller liegen (nachgemessen) auch etwas mehr als 4,6V an.
Gruß
Klaus
Hallo zusammen,
das Problem in meinem Fall saß vor der Tastatur. Mit dem als Standard angelegten synchronen OneWire (OWX) funktioniert es nicht, mit dem asynchronen (OWX_ASYNC) dann schon - auch oder gerade mit Firmata auf dem Arduino.
Gruß
Klaus
Hallo,
ich komme mit dem DS2423-ATTINY, die kompakte Version von locutus , nicht weiter.
Erkennen als OWCOUNT und Zählen kein Problem.
Bei Spannungsausfall ist alles wieder auf 0.
Wo werden die Zählerstände gespeichert und wie kommt man da wieder dran?
Danke für Infos
Gar nicht. Das ist aber auch beim originalen DS2423 so.
LG
pah
Beim originalen DS2423 ist das klar.
Aber wozu ist dann der Aufwand mit dem Goldcap und
"PIN Interrupt Routine / EEPROM sichern
Ebenso wird die Routine auch aufgerufen, wenn die Spannung an dem Spannungsteiler R1/R2 auf Low Level geht. Hierdurch wird der folgende Programmteil durchlaufen und die entsprechenden Werte des jeweiligen Chip ins EEPROM geschrieben. "
(fhem Wiki)
welche Werte werden abgespeichert?
Könnte vielleicht freundlicher Weise ein Entwickler die Funktion und Anwendung des Powerfail-feature erläutern?
Vielen Dank
Hallo zusammen,
ich habe die kompakte Platine von Locutus an meinem 1 wire Bus (I2C host interface DS2482-100 ABElectronics) angeschlossen
und er wurde als DS2423 erkannt.
Leider bekomme ich das Teil nicht stabil zum laufen, nach booten des Raspis (Stromversorgung unterbrochen) oder einer
kurzzeitigen Unterbrechung der Busspannung (5.02 V) wird dasTeil nicht mehr erkannt.
Am Controller liegen 4,7 V an.
Meine DS18S20 Sensoren funktionieren am Bus ohne Probleme.
Hat jemand einen Denkanstoß, was mache ich falsch?
Danke und Gruß
Klaus
Mit diesem und anderen Problemen schlage ich mich seit Wochen herum.
Der Attiny hängt sich bei Spannungsausfall öfter mal auf.
Wiederbeleben geht mit längerer Spannungslosigkeit, entladen des C1 oder verbinden Pin 5 und 6 des ISP-Steckers. Also Hardware-reset.
Das Modul ist zwar eine sehr gute Idee, scheint aber noch viele Macken zu haben.
Von den Entwicklern bekommt man leider auch keine Hilfe.
Hallo Zusammen,
Generell habe ich die Software mit dem Hintergrund entwickelt
meine Steuerungsprobleme zu lösen.
Wer C kann und das ist Vorausetzung hierfür, kann das Modul
nach seinen Wünschen anpassen. Open Source.
Aus dem Gedächtnis heraus werden Zählerstand und der Speicherinhalt
des emulierten EEProm in das richtige EEPROM geschrieben.
Derzeit arbeite ich an der Emulation eines DS2450, komme aber auch hier
Nur schleppten voran, da es keine genaue Dokumentation hierzu gibt.
Dies erfolgt alles im reverse engineering.
Beruflich bin ich zudem stark eingespannt und tippe das gerade
Im Hotelzimmer im Ausland in mein Handy.
Meist ist es ein Hardware Problem in Verbindung mit Software und kann
nur im Einzelfall geklärt werden.
Viele Grüsse
R.
Hallo,
an dem DS2423-Emulator haben ja schon mehrere Leute mitentwickelt.
Meine C-Kenntnisse, und wahrscheinlich die von vielen anderen, sind nicht so umfangreich um die Programmierung bis ins Detail zu verstehen. Ich möchte aber auch nichts verändern oder anpassen. Ich möchte einfach nur verstehen, wie die Schaltung gedacht ist und funktionieren soll, damit man weiß, wo man mit der Fehlersuche beginnen soll.
Nach einer Funktionsbeschreibung wurde schon mehrfach gefragt. Das sollte doch kein Problem sein, anstatt immer neue Baustellen zu beginnen.
Vielleicht hat jemand das Modul erfolgreich im Einsatz und ist bereit über seine Erfahrungen zu berichten? Oder haben das alle nur gefrustet beiseitegelegt?
Vielen Dank
Hallo,
eine kurze Beschreibung. Genaue Informationen gibt das Datenblatt des verwendeten MC her.
- Der Goldcap soll die Spannung bei Spannungsverlust so weit erhalten, das der MC noch die Möglichkeit hat,
seinen Programmcode sicher zu durchlaufen (Hier kann einem der Brown-Out Interrupt evtl. einen Strich durch
die Rechnung machen.
- Über den Spannungspegel zwischen R1 und R2 soll ein Wechsel von High nach Low erkannt werden, welcher
dann den entsprechenden Interrupt auslöst. (Level Definitionen High/Low nachlesen).
Je nach Toleranzen der Widerstandkombination kann es zu falschen (zu früh) oder zu späten Interrupts kommen.
Nach dem Schreiben des EEProms wird ein Software-Reset ausgelöst. Daher hängt er dann, da er von einem Spannungseinbruch ausgeht. Evtl. muss der Kondensator verringert werden.
BOR in den Fuse abschalten kann auch helfen.
Dieses Verhalten bezieht sich aber nur auf die von mir oben abgelegt Version.
ZitatDas sollte doch kein Problem sein, anstatt immer neue Baustellen zu beginnen.
Doch, wie gesagt ich habe diesen Quellcode für Fachleute hier hinterlegt.
Den DS2450 entwickle ich derzeit für meine Hardware, da er in naher Zukunft nicht mehr zu bekommen ist
und eine entsprechende Firma, wo ich so ein Teil (für viel Geld bezahlt) gekauft habe und diese noch
schlechter funktionieren (auch über MC simuliert). Busstörungen bis zum Erbrechen.
But feel free to change the software and add any function you like or fix a bug if you found one.
Viele Grüße
R.
Hallo Zusammen,
anbei nochmals ein Statusbericht des DS2450.
Interface arbeitet jetzt im "Laborbetrieb" stabil. Messwerte werden entsprechend eingelesen und verarbeitet (ohne Busfehler bis jetzt, Stresstests kommen jetzt).
Wie sich der Chip im OWServer zeigt das beigezügte Bild.
Kalibieren ist jetzt das nächste Thema (Dynamisch wenn geht oder hardcodiert).
Viele Grüße
R.
Hallo,
vielen Dank für die Ausführungen.
Sorry für meine Hartnäckigkeit, aber es ist immer die Rede vom Schreiben ins EEPROM beim Powerfail-Interrupt. Daher noch mal die Frage, was wird wo abgespeichert, speziell bei der DS2423-Emulation?
Danke für weitere Infos
#ifdef DS2423
#define PC_INT_ISR ISR(PCINT0_vect){/*ATT44 with 0 by PCINT*/\
uint8_t i;\
if (((PINA&(1<<PINA2))==0)&&((istat&(1<<PINA2))==(1<<PINA2))) { Counter[1]++; }\
if (((PINA&(1<<PINA1))==0)&&((istat&(1<<PINA1))==(1<<PINA1))) { Counter[0]++; }\
if (((PINA&(1<<PINA0))==0))\
{\
cli(); /* disable any other interrupt (INT0) !*/\
Counter[3]++;\
eeprom_update_byte((uint8_t *)0,0x0);/* clear magic number */ \
eeprom_update_dword((uint32_t *)1,Counter[0]);\
eeprom_update_dword((uint32_t *)5,Counter[1]);\
eeprom_update_dword((uint32_t *)10,Counter[2]);\
eeprom_update_dword((uint32_t *)15,Counter[3]);\
for(i=0;i<sizeof(MemoryPage14);i++)\
eeprom_update_byte((uint8_t *)(i+20),MemoryPage14[i]);\
for(i=0;i<sizeof(MemoryPage15);i++)\
eeprom_update_byte((uint8_t *)(i+60),MemoryPage15[i]);\
eeprom_update_byte((uint8_t *)0,0x55); /* Values are valid */\
software_reset();\
}\
istat=PINA;}
#define INIT_COUNTER_PINS /* Counter Interrupt */\
PCMSK0 |= (1<<PCINT1)|(1<<PCINT2); /* Set Change PIN Interrupt */\
DDRA &= (~(1<<PINA1) |~(1<<PINA2)); /* Set used port as Input */\
istat=PINA; /* Init the State buffer */
#endif
MemoryPage 14 + MemoryPage15 siehe Datenblatt.
Wenn man hier nicht erkennt, das es sich um die Zähler handelt.... (hmmm), besser Finger von lassen oder
ein bisschen einarbeiten. Irgendwo muss man sich da auch selber "durchfressen".
Viele Grüße
R.
Wie ich schon gesagt habe, sind meine C-Kenntnisse nicht so gut, um alles im Detail zu verstehen.
Da Du aber das Teil für Deine Anwendung erstellt hast, sollte es Dir doch möglich sein, mit ein paar Worten meine Frage zu beantworten?
Gut, die Zählerstände werden bei Powerfail in Memorypage 14 und 15 geschrieben. Dann passiert nichts mehr und das System wartet auf Reset. Richtig?
Und dann? Nach dem Reset steht in allen Memorypages 0
Ich habe viel herumprobiert, Widerstände geändert, separate Stromversorung, Powerfail manuell ausgelöst. Entweder alles 0 oder Absturz.
Wenn man nicht weiß, was die Software machen soll, ist das nur blindes herumstochern.
Hallo,
Die Counter werden nicht in MemoryPage14 und MemoryPage15 gespeichert, sondern im EEPROM. Die Speicherbänke 14 und 15 des DS2423 werden ebenfalls im EEPROM des MC gespeichert.
Verändere mal die Software in der Form, das ein Ausgang gesetzt wird, wenn die Informationen in das EEProm gespeichert werden.
Dann prüfe mal nach, ob der Ausgang gesetzt wird.
Hierzu müsstest Du den Software Reset durch eine While(1); ersetzen.
Viele Grüße
R.
Ich will und kann die Software nicht ändern.
Ich gehe davon aus, dass das Powerfail-Feature in dem Modul überhaupt nicht nutzbar ist?
OFFTOPIC: @locutus
Zitat von: locutus am 17 September 2016, 23:35:53
ich habe die Platine (https://forum.fhem.de/index.php/topic,22431.msg419336.html#msg419336) ein wenig kompakter gestaltet.
Kannst du dir eine SMD-Version vorstellen (DS2423)? Was würde eine reine Layout-Erstellung an Arbeitsaufwand/Kosten verursachen? Möchte mich nicht selber am Layouten probieren und würde gerne eine Dienstleistung in Anspruch nehmen. Im Rahmen vom Bodenfeuchte-Sensor (https://forum.fhem.de/index.php/topic,57460.0.html) wurde ja "Ähnliches" realisiert.
Hallo Zusammen,
erste Tests der DS2450 Simulation scheinen gut zu laufen. Im Fehlerspeicher des OW Servers sind nach 10 Minuten 0 Fehler vorhanden.
Lasse das ganze jetzt mal was laufen. Zum Vergleich, mein gekauftes Teil (DS2450 als Simulation) hatte 30% Fehlerrate. Bei einer von 1000 Lesungen 300 Fehler!,
weil ganze Registersätze nicht in der Simulation vorgesehen waren/sind. Ob das immer noch so ich weiss ich nicht.
Leider hat die Platine einen Hacken für Nachbauer. Ich habe nur SMD Bauteile verwendet und der ADS1115 ist sogar in der
Bauart "ULTRA-SMALL QFN PACKAGE", was nur unter Lupe zu löten ist.
Die Genauigkeit ist höher als bei der Verwendung des Analogeingangs des Microcontrollers. Ebenso ist die Wandelzeit schneller.
Im FHEM Bild (DS2450.PNG) kann man zwei DS2450 erkennen.
DS2450_82B214000000 -> ist ein Originalbaustein
DS2450_A30000000001 -> ist meine Softwarelösung.
Das Bild "DS2450_Platine" zeigt die Platine in einem Hutschienen-Gehäuse.
Derzeit suche ich noch eine Möglichkeit, um einen Nullpunktabgleich zu machen (Eingang auf GND gelegt.)
Diese Wert soll dann ins EEPROM geschrieben werden und nach dem Einschalten geladen werden.
Derzeitige Idee, setzten des "Power Flags" über die Weboberfläche des OWServers.
Edit:
Hier das Reading für die Temperaturen (setzt P1000 Wandler 0... 160 Grad -> 0-10V vorraus)
#
# Heizungskontrolle
#
# Heizungstemperaturen Ruecklauf Temperatur
define klHeizungRuecklaufTemperatur OWDevice 20.A30000000001 120
attr klHeizungRuecklaufTemperatur IODev myOWServer
attr klHeizungRuecklaufTemperatur alias Heizungskreislauf Rücklauftemperatur
attr klHeizungRuecklaufTemperatur event-on-update-reading temperature
attr klHeizungRuecklaufTemperatur group Temperaturen
attr klHeizungRuecklaufTemperatur model DS2450
attr klHeizungRuecklaufTemperatur room Heizung
attr klHeizungRuecklaufTemperatur stateFormat {sprintf("%.1f",ReadingsVal("klHeizungRuecklaufTemperatur","temperature",0))."°C"}
attr klHeizungRuecklaufTemperatur userReadings temperature {{32*ReadingsVal("klHeizungRuecklaufTemperatur","volt.A",0)}}
# Heizungstemperaturen Vorlauf Temperatur
define klHeizungVorlaufTemperatur OWDevice 20.A30000000001 120
attr klHeizungVorlaufTemperatur IODev myOWServer
attr klHeizungVorlaufTemperatur alias Heizungskreislauf Vorlauftemperatur
attr klHeizungVorlaufTemperatur event-on-update-reading temperature
attr klHeizungVorlaufTemperatur group Temperaturen
attr klHeizungVorlaufTemperatur model DS2450
attr klHeizungVorlaufTemperatur room Heizung
attr klHeizungVorlaufTemperatur stateFormat {sprintf("%.1f",ReadingsVal("klHeizungVorlaufTemperatur","temperature",0))."°C"}
attr klHeizungVorlaufTemperatur userReadings temperature {{32*ReadingsVal("klHeizungVorlaufTemperatur","volt.B",0)}}
Das Bild "Screen" zeigt die Darstellung auf dem Bildschirm.
Die Platine läuft jetzt in meinem Produktiv Aufbau. 24 Stunden ohne einen einzigen Fehler auf dem Bus.
Viele Grüße
R.
Hallo ritchie,
könnte ich schon so eine SMD-Platine für ein Hutschienen-Gehäuse fertig bekommen ?
oder eine nackte Platine mit Bestückungsplan ?
mfg Roberto
Hallo Roberto,
derzeit bin ich nicht in der Lage, die Platine für andere fertigen zu lassen.
Das gibt meine restliche Freizeit nicht her.
Viele Grüße
R.
Hallo ritchie,
Okay danke für die Info, soll es irgendwann mal Platinen dafür geben ?
mfg Roberto
Hallo Roberto,
Derzeit entwickle ich nur für meine Zwecke.
Die Prototypen (5 Stück) haben 121.04 EUR gekostet !
Einige Teile meiner Arbeit stelle ich hier auch öffentlich (Software / Schaltplan). Platinen habe ich bis jetzt nicht angedacht
und da hier auch einige das Kommerziell nutzen (trotz GPL), will ich meine Layoutdatei nicht veröffentlichen.
Viele Grüße
R.
hatte mir vor einigen Monaten zwei DS2423 von locutus gekauft.
Nachdem sie ein Weile ungenutzt rumgelegen haben, hatte ich kürzlich ein Device ans Laufen bekommen.
Leider wollen jetzt beide nicht mehr mit mir reden.
Den Quellcode bekomme ich kompiliert (DS2423 + owid gesetzt).
Wie bekomme ich das hex-File auf den ATtiny44a? Hatte jemand ein paar Tipps für mich?
Nachtrag:
habe gerade die ISP-Pins mit dem Pinout vom ATtiny44a abgeglichen und siehe da. er geht wieder! Habe ich damit den gold cap entladen?
wäre arduinoISP das Mittel der Wahl gewesen?
Zitat von: habeIchVergessen am 01 April 2017, 20:54:16
Wie bekomme ich das hex-File auf den ATtiny44a? Hatte jemand ein paar Tipps für mich?
... den Tipp hätte ich auch gerne ...
Ist relativ einfach. Entweder nimmst du eine gekaufte programmerplatine wo du den artiny aufstecken kannst, oder programmiert ihn über einen programmer deiner Wahl per ISP
Gesendet von meinem Leap mit Tapatalk
habe ein arduino nano mir arduinoISP geflasht und mit avrdude ein hex-file geflasht
avrdude -p attiny44 -c avrisp -P\\.\COM22 -b 19200 -U flash:w:DS2408_29.a30000000001.78.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude: Device signature = 0x1e9207 (probably t44)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "DS2408_29.a30000000001.78.hex"
avrdude: input file DS2408_29.a30000000001.78.hex auto detected as ELF
avrdude: writing flash (2358 bytes):
Writing | ################################################## | 100% 4.52s
avrdude: 2358 bytes of flash written
avrdude: verifying flash memory against DS2408_29.a30000000001.78.hex:
avrdude: load data flash data from input file DS2408_29.a30000000001.78.hex:
avrdude: input file DS2408_29.a30000000001.78.hex auto detected as ELF
avrdude: input file DS2408_29.a30000000001.78.hex contains 2358 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 2.71s
avrdude: verifying ...
avrdude: 2358 bytes of flash verified
avrdude: safemode: Fuses OK (E:FF, H:DC, L:E2)
avrdude done. Thank you.
device wird nicht erkannt. Mache ich etwas falsch?
Nachtrag: zum Test habe ich das Device, das funktioniert, neu geflasht (owid geändert). Fuse habe ich verglichen und angepasst. Bootloader auch neu geflasht.
ATtiny aus dem Sockel genommen und auf Breadboard geflasht. Wird nicht zuverlässig erkannt.
mit dem Austausch der ATtiny's hat sich auch die Zuverlässigkeit bei der Erkennung geändert. Scheint also ein Platinenproblem zu sein.
die BAT43 (D1) ist defekt.
Kann mir jemand eine Überblick über den DS2408 geben?
Bei mir funktioniert eigentlich nur Channel Access Write, Read PIO Registers und Activity Latch Reset.
Wie kann ich die Ausgänge steuern (In- vs. Output)?
Zu den ATtiny-Flashproblemen:
Ich arbeite viel mit dem ATtiny 85 und 841. (z.B. hier (https://forum.fhem.de/index.php/topic,59933.msg607590.html#msg607590) )
Die ATtiny werden mit avrdude auch nicht erkannt. Da liegt meiner Meinung
nach an der Standard-Bitclockeinstellung, da die Fuses initial ja auf CLK, intern, geteilt durch 8
eingestellt sind. Avrdude verwendet dann 1.5 MHz als Bitclock, was doch etwas zuviel ist.
Die ATtinies waren dann nur mit 32KHz Bitclock zum Ansprechen zu bewegen (USBasp + avrdude).
Hier eine Beispiel-Einstellung auf 32KBit:
-c usbasp -p t841 -P usb -B 20.96 -e -U flash:w:"C:\Users\Jürgen\AppData\Local\Temp\arduino_build_220080\sketch_841_Led_Blink_D7.ino.ino.hex":a
Parameter -B 20.96 hinzufügen....
Für Win + Raspi unter Mono kann ich mit der Kombi USBasp-Programmer (http://www.fischl.de/usbasp/) und GUI: AVRDUDESS (https://github.com/zkemble/AVRDUDESS)
empfehlen.
Grüße,
Jürgen
mit dem zusätzlichen Parameter -B habe ich keine Veränderung beim Flashen festgestellt.
hat jemand ein DS2408 im Einsatz (ich habe die Platine von locutus; die große!!!)?
wenn ich zwei DS2423 auf einem Bus habe, dann werden beide nicht erkannt.
Wird jeweils nur einer angeschlossen, dann wird dieser erkannt. Das spätere Hinzufügen des zweiten resultiert aber nicht in dessen Erkennung (Reihenfolge ist egal).
Haben andere vergleichbare Probleme?
Zitat von: habeIchVergessen am 10 April 2017, 11:51:36
wenn ich zwei DS2423 auf einem Bus habe, dann werden beide nicht erkannt.
Wird jeweils nur einer angeschlossen, dann wird dieser erkannt. Das spätere Hinzufügen des zweiten resultiert aber nicht in dessen Erkennung (Reihenfolge ist egal).
Haben andere vergleichbare Probleme?
Haben die DS2423 Emulationen unterschiedliche 1Wire IDs geflashed bekommen?
Greetz
Eldrik
ja.
Weitere Sensoren am Bus?
Separate 5V Spannungsversorgung oder 5V direkt vom Busmaster? Spannungsversorgung durchgemessen?
Greetz
Eldrik
1x DS18B20
separate 5V, 4,91V gemessen, 1-wire bus 4,66V von BusMaster, WemosD1 scheint nicht mehr zu liefern. Ggf. werde ich die Platine von hexenmeister noch um eine externe Spannungsversorgung ergänzen.
Zitat von: habeIchVergessen am 01 April 2017, 20:54:16
hatte mir vor einigen Monaten zwei DS2423 von locutus gekauft.
Nachdem sie ein Weile ungenutzt rumgelegen haben, hatte ich kürzlich ein Device ans Laufen bekommen.
Leider wollen jetzt beide nicht mehr mit mir reden.
Den Quellcode bekomme ich kompiliert (DS2423 + owid gesetzt).
Wie bekomme ich das hex-File auf den ATtiny44a? Hatte jemand ein paar Tipps für mich?
Nachtrag:
habe gerade die ISP-Pins mit dem Pinout vom ATtiny44a abgeglichen und siehe da. er geht wieder! Habe ich damit den gold cap entladen?
wäre arduinoISP das Mittel der Wahl gewesen?
Kann uns vielleicht bitte jemand ein HEX file für den DS2423 auf dem Attiny44 bereitstellen ?
Wie ich die .hex nun auf den Attiny bekomme ist geklärt ... (USBasp) ...
Danke.
unter Windows sieht ein make.cmd etwa so aus (avr-gcc ist in der Arduino IDE zu suchen)
@echo off
setlocal
set avrgcc="%UserProfile%\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\4.9.2-atmel3.5.3-arduino2\bin\avr-gcc.exe"
del /Q /S owslave.hex owslave.o
%avrgcc% -v -std=c99 -Wall -Os -mmcu=attiny44a -o owslave.hex owslave.c
in owslave.c das entsprechende Device auswählen (#define DS24xx per Kommentar ändern; Sektion "// selection of the used")
danach owslave.hex per make erzeugen und flashen
Danke ! Ich habes in den ATTINY reinbekommen, allerdings scheinen die Zähler mit dieser Platine (https://forum.fhem.de/index.php/topic,22431.msg404229.html#msg404229 (https://forum.fhem.de/index.php/topic,22431.msg404229.html#msg404229)) nicht richtig erfasst zu werden .. die LEDs gehen nicht an ..
Ist das HEX für diese Schaltung von locutus ? ... müssten dann nicht insgesamt 4 counter in OWFS auftauchen ?
Danke für weitere Hilfe, ak323
Die LEDs müssen expl. in owslave.c erlaubt werden (Default ist aus).
Nach meinem Wissensstand kann ein DS2423 nur 2 Counter liefern. Beim locutus-Device sind das IN 3+4.
OK, danke habeIchVergessen ...
Mein ATtiny44 zählt jetzt mit dem .hex welches Du gepostet hast, allerding nicht immer 1 mehr, sondern irgendwie undefiniertes Inkrement (mit einem Draht als Kontakt) .. ?! .. ich denke man sollte das eigentlich mit dem Poti einstellen können ? Flankensteilheit/Trigger ?
Ich will einen induktiven Näherungssensor zum Auslesen der Wasseruhr verwenden (https://forum.fhem.de/index.php/topic,44613.msg364285.html#msg364285 (https://forum.fhem.de/index.php/topic,44613.msg364285.html#msg364285)).. hilft da ein Optokopper oder ein Schmitt-Trigger einzelne Impulse für die Eingänge bereit zu stellen ? ... gerne Vorschläge ...
Wozu ist denn "mincount" ? ... scheint sich nicht auszuwirken ... ?
Danke auch für die Erklärung wie man mit der Arduino IDE kompiliert ... hatte mir schon AVR Studio 7 runtergeladen .. ;-)
Habe den ATtiny überigens mit einem USBasp extern auf einem Breadboard geflashed ...
[Nachtrag 24.04.]
Cool !
... mit einem Temic K153P Fototransistor am Eingang zählt er nun die Impulse meines "intelligenten" Stromzählers .. mal sehen, ob er sich auch nicht verzählt ... 8)
[Nachtrag 25.04./06.05.]
Jetzt zählt der 2. Counter auch meinen Wasserverbrauch !
Optisch entkoppelt auch über einen K153P auf der LED des induktiven Näherungssensors ... CNY17 Optokoppler (funktioniert einfach stabiler).
ak323
Zitat von: habeIchVergessen am 10 April 2017, 11:51:36
wenn ich zwei DS2423 auf einem Bus habe, dann werden beide nicht erkannt.
Wird jeweils nur einer angeschlossen, dann wird dieser erkannt. Das spätere Hinzufügen des zweiten resultiert aber nicht in dessen Erkennung (Reihenfolge ist egal).
Haben andere vergleichbare Probleme?
... wenn du mir noch ne .hex mit der 2. ID zur Verfügung stellst, kann ich das mal Testen...
Zitat von: ak323 am 30 April 2017, 09:53:13
... wenn du mir noch ne .hex mit der 2. ID zur Verfügung stellst, kann ich das mal Testen...
3 weitere hex-Files im Anhang
OK, ich habe jetzt zwei Platinen mit jeweils einem ATtiny als 2423 programiert (1D.A20000000001 & 1D.A20000000002) und beide laufen an einem i2c 2480 1-wire Controller. Versorgungsspannung direkt über den i2c des Raspberry Pi ...
Morgen kann ich noch mal an einem DS9490 mit externer 5V Spannungsversorgung testen ...
Mir ist übrigens aufgefallen, daß man den ATtiny kurze Zeit (60s ?) spannungslos haben muss .. ansonsten hatte ich auch Probleme ihn zu erkennen ... wenn ich die Platinen angeschlossen hatte und den extern programmierten ATtiny in die Fassung gesteckt habe, hat alles geklappt ...
VG ak323
Ich habe (mit der ganz alten Software aus 2012) zwei ATtiny 25 als DS2423, beide unterschieden sich nur in der letzten Stelle der ID.
Sie laufen seit Jahren bestens am gleichen Bus und werden von OWX auch gut erkannt - aber nicht, wenn ich OWFS einsetze. Man sollte mal prüfen, ob das systematisch ist - das wäre nicht der erste OWFS-Fehler, den man hier findet.
Könnte sein, dass man einfach ein paar mehr Bits in der ID unterschiedlich setzen muss.
LG
pah
ich benutze einen DS2482-100 auf hexenmeisters 1-wire WLAN-Gateway (https://forum.fhem.de/index.php/topic,45853.msg599592.html#msg599592).
owslave.c habe ich aus diesem Thread (werde noch prüfen, ob von Seite 1 oder 2!).
folgende IDs habe ich getestet:
- 1d.a20000000002.4d
- 1d.a20000000100.35
- 1d.a30000000001.98
Benutzen der ATtiny44 und -25 die gleichen Sourcen?
Zitat von: ak323 am 02 Mai 2017, 00:49:00
Morgen kann ich noch mal an einem DS9490 mit externer 5V Spannungsversorgung testen ...
So, am DS9490 mit externer 5V Einspeisung funktionieren auch beide zusammen.
VG ak323
Danke. Muss wohl meinen Testaufbau prüfen.
Hallo zusammen,
hier die SMD-Version des DS2423. Potentiometer am LM358 wurden durch Festwiderstände ersetzt.
Schaltplan, Stückliste und Gerberdaten (https://www.itead.cc/open-pcb/pcb-prototyping/2layer-color-pcb-5cm-x-5cm-max.html) im Anhang.
Die Verwendung der Daten für kommerzielle Zwecke, Herstellung oder gewerblichen Vertrieb ist untersagt.
Verfügbarkeit und Preise
Ich biete die Platinen im Marktplatz (https://forum.fhem.de/index.php/topic,77716.0.html) zum Kauf an.
Coole Sache !
Leider weiß ich nicht, was ich noch alles zählen soll ;–)
Hallo,
wenn jemand aus einer Bestellung noch Platinen (SMD-Version des DS2423) übrig hätte würde ich gerne 6-Stück abnehmen.
mfg Rob
Hallo Zusammen,
ich habe jetzt meine Schaltung des DS2450 und die entsprechende Software oben beigefügt. Die Software läuft jetzt bereits seit Monaten ohne Fehler an
meiner Heizungssteuerung (3 x PT1000) mittles separater Schaltung. Die abgelegte Schaltung ist für 0.. 10Volt gedacht. Es werden alle
Register unterstützt, so das der OW Server keine Fehler auslöst. Damals hat ein "professioneller Anbieter" das in seiner Lösung nicht geschafft,
was mich eine Menge Geld gekostet hat. Daher hatte ich meine eigene Lösung erstellt, welche ich Euch jetzt zur Verfügung stelle.
Gewerbliche Nutzung, auch in Teilen ist nicht erlaubt.
Viele Grüße
R.
Zitat von: co010 am 04 Oktober 2017, 11:09:25
wenn jemand aus einer Bestellung noch Platinen (SMD-Version des DS2423) übrig hätte würde ich gerne 6-Stück abnehmen.
ich habe gerade welche bestellt. falls noch Interesse besteht, dann alles weitere per PM.
@locutus: danke
Zitat von: locutus am 03 Oktober 2017, 23:15:26
hier die SMD-Version des DS2423.
Im Schaltplan wird ein ATtiny84a genannt und in der Teileliste ein ATtiny44a.
wenn ich mich nicht täusche, sind sie pin-kompatibel und unterscheiden sich nur bzgl. Flash und Ram.
Richtig? Ist der 84a notwendig?
Richtig! Der ATtiny84 ist ausschließlich für die alternative Firmware (https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter/ds2423-counter-fhem) von Tobias Müller relevant.
@ritchie: v2.03 ca. Zeile 2060 ist noch ein Bug (MemoryPage gibt es nur für den 2450)
#ifdef DS2450
MemoryPage[18]=lmode; // Debug
#endif // DS2450
@locutus: Der verlinkte Code (tm3d.de) (https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter/ds2423-counter-fhem) der smd-Platine v1.1 läuft auf den großen Platinen mit 4 Counter-Eingängen (anno 02-2016).
die smd-Platine v1.1hat ja 2 Counter-Eingänge und die LEDs. Wie kann ich den 2. DS2423 in den Sourcen deaktivieren?
Hallo,
Ich betreibe die SMD-Counter Platine von @locutus mit der alternativen Firmware von tm3.de ,da A und B als Counter mit sim.DS2423 und DS2413 zum Reseten der
Counter Kanäle über FHEM mit großem Erfolg auf den ATtiny84a.
Es werden in FHEM 2 Device am 1-wire Bus erkannt und angelegt.
Grüße
ich habe den DS2423_DS2423-Sourcecode (tm3d.de (https://www.tm3d.de/elektronik-projekte/1-wire-sim-beispiele/ds2423-counter/ds2423-counter-fhem); FHEM_PLATINE gesetzt ) unter linux kompiliert und auf 3 Devices am gleichen Bus laufen.
-- 2x große Platine mit je 4 Countern + 1x Temp
device: 1d.a20000000001.af -> DS2423
device: 1d.a20000000002.4d -> DS2423
device: 1d.a20000000011.32 -> DS2423
device: 1d.a20000000012.d0 -> DS2423
device: 28.ee4c6c251601.d7 -> DS18B20
uptime: 00:12.47
-- 1x mini Platine v1 neu angeschlossen
bus #1: scanning 28.ee4c6c251601.d7 -1d.a20000000002.4d -1d.a20000000022.6e +1d.a20000000012.d0 -1d.a20000000001.af -1d.a20000000021.8c +1d.a20000000011.32 -
device: 1d.a20000000001.af -> DS2423
device: 1d.a20000000002.4d -> DS2423
device: 1d.a20000000011.32 -> DS2423
device: 1d.a20000000012.d0 -> DS2423
device: 1d.a20000000021.8c -> DS2423
device: 1d.a20000000022.6e -> DS2423
device: 28.ee4c6c251601.d7 -> DS18B20
uptime: 00:12.49
-- auslesen
OK VALUES Esp1wire 1d.a20000000001.af 31.1=191,31.2=177,30=DS2423,
OK VALUES Esp1wire 1d.a20000000002.4d 31.1=57,31.2=50,30=DS2423,
OK VALUES Esp1wire 1d.a20000000011.32 31.1=176,31.2=87,30=DS2423,
OK VALUES Esp1wire 1d.a20000000012.d0 31.1=37,31.2=7,30=DS2423,
OK VALUES Esp1wire 1d.a20000000021.8c 31.1=4,31.2=98,30=DS2423,
OK VALUES Esp1wire 1d.a20000000022.6e 31.1=0,31.2=0,30=DS2423,
kompilieren unter Windows erzeugt ein nicht funktionierendes Binary (Compiler 4.9.2-atmel3.5.4-arduino2)!
wenn ich owslave.c aus diesem Thread kompiliere (beide Versionen Windows+Linux getestet), dann wird nicht einmal ein Device + 1x Temp. zuverlässig erkannt.
set MCU=attiny44a
set SRC=owslave_2_03.c
-- Variante 1 (Windows)
%avrgcc% -v -std=c99 -Wall -Os -mmcu=attiny44a -o owslave.elf owslave_2_03.c
-- Variante 2 (Linux+Windows)
%avrgcc% -v -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "owslave.d" -MT"owslave.d" -MT"owslave.o" -mmcu=%MCU% -o owslave.o %SRC%
%avrgcc% -v -o owslave.elf owslave.o -Wl,-Map=owslave.map -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=%MCU%
%objcopy% -O ihex -R .eeprom -R .fuse -R .lock -R .signature owslave.elf owslave.hex
ich wäre dankbar, wenn sich jemand finden würde, der eine hex-Datei für mich erstellt und diese hier postet. Eine Dokumentation des Ablaufes wär toll.
ich verwende den Sourcecode von tm3d.de für den DS2423_DS2423.
für die gr. Platinen mit 4 Eingängen (2 Counter) funktionieren die Counter, LEDs und der Taster. EEPROM schreiben nicht.
für die mini-Platine mit 2 Eingängen funktionieren die Counter und EEPROM schreiben. Den 2. DS2423 unterdrücke ich mit einer falsche Prüfsumme in owid2.
SMD werde ich testen, wenn die Teile da sind.
für die SMD-Platine funktionieren die Counter, LEDs, der Taster und EEPROM schreiben. 2. DS2423 wieder per Prüfsumme "deaktiviert".
Wie schon geschrieben funktionieren damit mehrere Devices am gleichen Bus (DS2482 Busmaster).
habe mir ein USB-Stick mit DS2480B (1-Wire-USB-Adapter mit WLAN-Schnittstelle von locutus) (https://forum.fhem.de/index.php/topic,18996.msg489913.html#msg489913) zusammen gebaut und einen ähnlichen Aufbau wie weiter oben getestet.
Leider ändert sich am Ergebnis nicht viel:
- Software aus diesen Thread (v2.03) läuft bei mir nicht stabil mit anderen Devices (weitere DS2423-Emulation + 2x DS18B20)
- nach einem Reset vom USB-Controller werden die emulierten Geräte nicht zuverlässig erkannt
- nicht emulierte werden erst nach mehreren Versuchen erkannt
Hallo,
ich versuche gerade den OW-Counter von Loctus wieder in Betrieb zu nehmen. Mit Hilfe der Anleitung auf tm3d.de .
Mit einem Arduino Nano habe ich die ISP-Schnittstelle verbunden.
Arduino Nano PIN - OW-Counter ISP-PIN
5V - 2
GND - 6
10 - 5
11 - 4
12 - 1
13 - 3
Zwischen 5V und DI10 hab ich einen 10Kohm Widerstand
Dann starte ich owTools -a ARDUINO5 und bekomme folgendes :
Open /dev/ttyS5
0 Devices found
Das ganze hatte schon einmal funktioniert, das musste ich nur magels Zeit wieder abbrechen. Ich möcht die ID der Counter ändern.
Damals hatte ich das als Ausgabe bekommen:
owTools -a ARDUINO7
Open /dev/ttyS7
_______________________________________________________________________
BD05000084DA401D Configcode from www.tm3d.de - ( DS2423 4k ram with counter )
DS2423 DS2423 DS2423 DS2423
Counter Counter Counter Counter
3.000 1.000 0.000 0.000
_______________________________________________________________________
8A05000084DA411D Configcode from www.tm3d.de - ( DS2423 4k ram with counter )
DS2423 DS2423 DS2423 DS2423
Counter Counter Counter Counter
16776963.000 0.000 0.000 0.000
Kann mir jemand bitte auf die Sprünge helfen?
Danke
Oder kann ich die ID mit OWTools direkt über den 1-Wire-Master verändern ?
Sorry aber ich stehe wiklich auf dem Schlauch. Ich sollte meine Projekte nicht so lange liegen lassen.
Jens
kannst ja die owid in der Firmware anpassen und gleich die gewünschte flashen.
Hallo,
ich habe mir einen DSZ mit dem DS2423 (2Kanal) gekauft.
Ich lese immer, dass dieser via USB an dem PI angeschlossen wird.
Gibt es auch Alternativen ? Kann ich den 1W Ausgang (was ja nach DALLAS Standard kein wirklicher 1W ist) auch auf einen GPIO packen ? ggf. direkt an den RX Pin 15 ?
Was sagt dann das Modul OWCOUNT ? dieses benötigt den OWServer o.ä.