AVR Attiny44A als 1Wire Slave konfiguierbar DS2423/DS18BS20/DS2408/DS2413/DS2450

Begonnen von ritchie, 11 April 2014, 17:34:27

Vorheriges Thema - Nächstes Thema

ritchie

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.


IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

drv103

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.

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

locutus

Passend zum Beitrag biete ich im Marktplatz ein kleines Kontingent an bestückten Platinen zum Kauf an.

ak323

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
RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...

locutus

Gerberdaten und Warenkorb für alle Interessierten, die die Platine nachbauen möchten.

Unbestückte Leiterplatten: ITEAD Studio
Bauteile: Reichelt Elektronik

Die Verwendung der Daten für kommerzielle Zwecke, Herstellung oder gewerblichen Vertrieb ist untersagt.


ak323

RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...

Inputsammler

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
Rpi's und Bpi's und Hw von Dirk und locutus
CCU2,F20,Ks300,1-Wire,Homematic usw ...
vitodens 300 & IstrkrM372 auslesen über USB und FHEM
RUHE IN FRIEDEN AHA1805 RIP Mallorca +29.08.16
I miss you and your Family H.H.L.L.

ak323

Hi drv103, locutus,
ich brauche auch Outputs für meine Anwendung.

Habt ihr die Änderungen schon in den Code eingepflegt ?
RaspberryPi 2 im 19" Rack mit 16x2 i2c LCD, FHEM, diverse HomeMatic, 1-Wire (8x DS18B20, 3x DS2408, 2x DS2413, 5x DS2401, DS2423 ATTiny) über DS9490R#, Waterkotte Ai1QE (WWPR) Wärmepumpe über Modbus, WH1080 über Signalduino, 433MHz Funksteckdosen, WiFi RGBWW via Tasmota, ...

locutus

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?

ritchie

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.
IPU662  Ipfire & Fhem (Homematic + MAX) - Produktiv
Cubietruck (1Wire - USB) - Produktiv

drv103

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

th1984

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. 

Achim

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
1x RPi V1, COC, 6x FHT, 1x S300TH, 2x DS18B20, 1x KS300
1x Arduino Nano mit Firmata, 2x DS2423old, 4x DS18B20, HIH5030, verschiedene Ein/Ausgangsschaltungen am Arduino
Mysensors-Seriell Gateway, Si7021, BH1750, Relais