Autor Thema: AVR Attiny44A als 1Wire Slave konfiguierbar DS2423/DS18BS20/DS2408/DS2413  (Gelesen 19691 mal)

Offline Rudi352

  • New Member
  • *
  • Beiträge: 17
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

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.

Zitat
Das 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.




APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.



« Letzte Änderung: 11 März 2017, 14:15:43 von ritchie »
APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline Rudi352

  • New Member
  • *
  • Beiträge: 17
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

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
#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.



APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline Rudi352

  • New Member
  • *
  • Beiträge: 17
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.

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.
 
APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline Rudi352

  • New Member
  • *
  • Beiträge: 17
Ich will und kann die Software nicht ändern.
Ich gehe davon aus, dass das Powerfail-Feature in dem Modul überhaupt nicht nutzbar ist?

Offline habeIchVergessen

  • Full Member
  • ***
  • Beiträge: 456
OFFTOPIC: @locutus
ich habe die Platine 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 wurde ja "Ähnliches" realisiert.

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.


« Letzte Änderung: 19 März 2017, 11:18:18 von ritchie »
APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline co010

  • New Member
  • *
  • Beiträge: 42
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

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.
APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline co010

  • New Member
  • *
  • Beiträge: 42
Hallo ritchie,
Okay danke für die Info, soll es irgendwann mal Platinen dafür geben ?




mfg Roberto

Offline ritchie

  • Sr. Member
  • ****
  • Beiträge: 559
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.
APU1.d4 Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv
Raspberry PI (1Wire - USB) - Testsystem

Offline habeIchVergessen

  • Full Member
  • ***
  • Beiträge: 456
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?
« Letzte Änderung: 01 April 2017, 22:08:20 von habeIchVergessen »

 

decade-submarginal