Autor Thema: Alternative zum DS2423 Counter  (Gelesen 113686 mal)

Offline doubh

  • New Member
  • *
  • Beiträge: 21
Antw:Alternative zum DS2423 Counter
« Antwort #555 am: 25 Mai 2016, 16:40:51 »
hallo zusammen.

ich habe eine bug in der firmware entdeckt (und gefixt), der dazu geführt hat, dass manche flanken am eingang nicht gezählt wurden.
der fehler tritt auf, wenn 1-wire kommunikation stattfindet und in diesem moment eine flanke am eingang ansteht.

der fehler liegt im marco EN_OWINT(), dass in der ISR PIN_INT() aufgerufen wird.
1) PIN_INT (_VECTOR(1)) hat die höchste prio der aktiven IRQ
2) wenn der change interrupt PCINT0_vect auftritt, während gerade PIN_INT ausgeführt wird, ist das interrupt flag PCIF0 gesetzt
3) wird nun EN_OWINT() ausgeführt, wird mit dieser instruktion GIFR|=(1<<INTF0) das PCIF0 flag gelöscht und der pin change IRQ ist verloren
4) IRQ verloren -> flanke verloren -> counter falsch


fix:
zum löschen von INTF0 nur das entsprechende bit setzen (siehe datenblatt)
zudem sollte das flag vor dem einschalten des interrupts gelöscht werden und nicht danach:
#define EN_OWINT()               {GIFR=(1<<INTF0);GIMSK|=(1<<INT0);}          // enable interrupt


des weiteren würde ich generell nested interrupts vermeiden und entsprechend zu beginn jeder ISR cli() und am ende sei() aufrufen.
es kann z.b. auch ein problem geben, wenn in der timer ISR counterpack.counter = Counter[0]; ausgeführt wird und im selben moment der pin change interrupt auftritt.
da die 16-bit counter zuweisung nicht atomar abläuft, kann sie unterbrochen werden. ist bereits ein byte zugewiesen und beim inkrementieren des counters in der pin change ISR gibt es einen byte überlauf, stimmt die zuweisung nicht mehr.
bsp:
- Counter[0] ist gerade 0x00FF
- erstes byte in timer ISR ist zugewiesen, z.B. high-byte 0x00
- in diesem moment steht eine flanke an und der pin change ISR unterbricht die timer ISR (wg höherer prio)
- Counter[0] wird 0x0100
- timer ISR läuft weiter und weist das zweite byte zu, das low-byte ist aber nun 0x00
--> ergebnis in counterpack.counter: 0x0000

--> daher ist es sicherer hier keine nested interrupts zu verwenden.


gruß,
doubh

Offline g.finder

  • New Member
  • *
  • Beiträge: 17
Antw:Alternative zum DS2423 Counter
« Antwort #556 am: 12 Juni 2016, 15:29:52 »
Ist der Quellcode zum Tiny mit SRF02 irgendwo zu finden?

Gruß, Gerd

Offline Raven

  • Full Member
  • ***
  • Beiträge: 232
Antw:Alternative zum DS2423 Counter
« Antwort #557 am: 04 September 2016, 20:24:02 »
Ist der Quellcode zum Tiny mit SRF02 irgendwo zu finden?

Gruß, Gerd

ich wühle mich auch gerade durch...hier schon mal nachgelesen`?

https://forum.fhem.de/index.php/topic,22431.msg158105.html#msg158105
http://www.fhemwiki.de/wiki/1-Wire_Emulation_per_ATTiny
Cubietruck-Prod: HM-LAN, Heizung, Rolläden, Schalter, Viessmann (optolink)
Cubietruck-DEV:
Fritzbox 7490

Offline g.finder

  • New Member
  • *
  • Beiträge: 17
Antw:Alternative zum DS2423 Counter
« Antwort #558 am: 05 September 2016, 09:24:38 »
Danke Raven

Gerd

Offline pcjogi

  • Jr. Member
  • **
  • Beiträge: 61
Antw:Alternative zum DS2423 Counter
« Antwort #559 am: 25 September 2016, 19:53:41 »
Hallo zusammen,

ich bräuchte für meine Gaszähler noch einen DS2423 Counter Ersatz. Baut hier noch jemand einen (bzw. ich würde 2 nehmen).

Ich habe werde ausreichende Lötkenntnisse geschweige denn kann ich Leiterplatinen etc. fertigen (lassen). Alles kann man lerne, aber ich muss nicht alles können, wenn das jemand besser kann.

Vielen Dank

Jürgen
Haupt-Fhem 5.7 auf Debian 8, Sub-Fhem (FS20 und Homeeasy) 5.7 auf RasPi, Sub-Fhem (Heizungssteuerung ) 5.7 auf RasPi mit GPIO: Homematic,FS20,Homeeasy,EPGM, TRX

Offline gelbwichtel

  • Jr. Member
  • **
  • Beiträge: 73
Antw:Alternative zum DS2423 Counter
« Antwort #560 am: 20 März 2017, 20:57:22 »
Hi,
ich denke ich fange hier mal an zu fragen, obwohl sich in diesem Thread ja schon lange nichts mehr bewegt hat.
Hat jemand dieses Interface mal versucht mit EspEasy zu koppeln und kann vielleicht posten wie es zu definieren ist ?

Danke vorab
cu
gelbwichtel

RPi + CSM (21 Max HT, 4 WT, 2 FKT, MaxLan), RPi + COC (FS20 ST4, S8M, S4M, TFK, RPT,  SM8), AVR-Net-IO (Ethersex, 20  x 1w DS18B20)