DS2890 wird nicht korrekt erkannt

Begonnen von UweH, 28 Januar 2016, 18:47:04

Vorheriges Thema - Nächstes Thema

ntruchsess

100% sicher ist das mit dem ATiny85 noch nicht. Das Teil hat keinen Hardware-I2C hat und der 1-Wire-Slave ist sehr Timekritisch. Werde mir erst mal die I2C-libs zu gemüte führen, ob sich das zu sehr in die Quere kommt. Wobei sich das grundsätzlich schon lösen lassen sollte - der I2C ist in dem Fall ja Master und muss daher (im Gegensatz zum 1-Wire Slave) nur beschränkt echtzeittauglich sein.
Und in die 8K muss es natürlich auch noch reinpassen - der hex-file für den DS2890 auf ATmega328p ist ohne Ansteuerung eines Potis aktuell schon etwas über 4kb groß. Man wird sehen, muss mir erst mal ein paar digitale Potis bestellen.
while (!asleep()) {sheep++};

ntruchsess

so, der Arduino-clon macht Fortschritte: DS2890.ino.

Der sketch kann digitale Potis aus der MCP455x-serie über I2C ansteuern. Z.B. können 2 MCP4651 mit jeweils 2 Potis am Arduino hängen, der sich gegenüber dem 1-Wire wie ein DS2890 mit 4 Potis verhält. Um auch andere Chips zu unterstützen implementiert die mcp455x-klasse ein generisches Potentiometer-interface. Damit sind im DS2890.ino-sketch selbst nur ein paar Zeilen zu ändern um eine anderen Chip dranzuhängen.

Auf der FHEM-seite wird das unter OWX_ASYNC auch mehr oder weniger voll unterstützt (Download siehe Links in vorherigem Post). Mit einem original (china)-DS2890 (danke noch mal an UweH!) funktioniert auch alles (natürlich nur 1 Poti im Chip...). Braucht nur noch etwas 'Feinschliff', dann kann ich das einchecken.

@UweH: das mit dem ATiny bin ich noch nicht praktisch angegangen, denke aber das könnte schon funktionieren. Und falls nicht, kann man immer noch auf ATmega88 oder 168 gehen, damit geht's auf jeden fall. So viel teurer sind die ja auch net.

Gruß,

Norbert



while (!asleep()) {sheep++};

UweH

Moin Norbert,

ich habe mal versucht, den Sketch zu kompilieren, kriege aber viele Fehlermeldungen. Ich hoffe, die Wire.h und die Arduino.h, die ich gefunden habe, sind korrekt. Vielleicht kannst Du Deine Versionen mal mit anhängen.

Gruß
Uwe

ntruchsess

Hm, ich benutze seit ein paar Wochen Eclipse (mit dem Plugin von http://eclipse.baeyens.it/). Da sind die Libraries von der 1.6.9er Arduino-IDE dabei. Habs grade noch mal mit ner junfräulichen 1.6.5er IDE probiert (alles auf Linux), damit compilierts auch fehlerfrei. An der Wire-lib ist ja eigentlich auch schon ewig nix geändert worden?

Was gibt's denn für Fehler?

Gruß,

Norbert
while (!asleep()) {sheep++};

UweH

Ich benutze die 1.6.7 auf Linux. Die Dateien liegen alle im gleichen Ordner.
So sieht's aus:

Arduino: 1.6.7 (Linux), Board: "Arduino Nano, ATmega328"

OneWireIO:7: error: redefinition of 'Pin oneWireData'
Pin oneWireData(2);
                ^
DS2890:37: error: 'Pin oneWireData' previously declared here
Pin oneWireData(2);
     ^
OneWireIO:12: error: redefinition of 'const byte owROM [7]'
const byte owROM[7] = { 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
                   ^
DS2890:45: error: 'const byte owROM [7]' previously defined here
const byte owROM[7] = { 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 };
            ^
OneWireIO:22: error: multiple definition of 'enum DeviceState'
enum DeviceState
      ^
DS2890:71: error: previous definition here
enum DeviceState {
      ^
OneWireIO:29: error: redefinition of 'volatile DeviceState state'
volatile DeviceState state = DS_WaitingReset;
                      ^
DS2890:80: error: 'volatile DeviceState state' previously defined here
volatile DeviceState state = DS_WaitingReset;
                      ^
/home/uwe/Arduino/OneWireArduinoSlave-DS2890/DS2890/OneWireIO.ino: In function 'void setup()':
OneWireIO:39: error: redefinition of 'void setup()'
void setup()
      ^
DS2890:98: error: 'void setup()' previously defined here
void setup() {
      ^
/home/uwe/Arduino/OneWireArduinoSlave-DS2890/DS2890/OneWireIO.ino: In function 'void loop()':
OneWireIO:49: error: redefinition of 'void loop()'
void loop()
      ^
DS2890:109: error: 'void loop()' previously defined here
void loop() {
      ^
OneWireIO:60: error: 'DS_ConvertingTemperature' was not declared in this scope
  if (localState == DS_ConvertingTemperature && millis() > localConversionStartTime + 750)
                    ^
OneWireIO:74: error: 'DS_TemperatureConverted' was not declared in this scope
   state = DS_TemperatureConverted;
           ^
/home/uwe/Arduino/OneWireArduinoSlave-DS2890/DS2890/OneWireIO.ino: In function 'void owReceive(OneWireSlave::ReceiveEvent, byte)':
OneWireIO:80: error: redefinition of 'void owReceive(OneWireSlave::ReceiveEvent, byte)'
void owReceive(OneWireSlave::ReceiveEvent evt, byte data)
      ^
DS2890:124: error: 'void owReceive(OneWireSlave::ReceiveEvent, byte)' previously defined here
void owReceive(OneWireSlave::ReceiveEvent evt, byte data) {
      ^
OneWireIO:91: error: 'DS_ConvertingTemperature' was not declared in this scope
     state = DS_ConvertingTemperature;
             ^
exit status 1
redefinition of 'Pin oneWireData'

ntruchsess

#50
Zitat von: UweH am 28 Februar 2016, 14:27:28
Die Dateien liegen alle im gleichen Ordner.

OneWireIO:7: error: redefinition of 'Pin oneWireData'
Pin oneWireData(2);


Lösch die OneWireIO.ino, die liegt da fälschlicherweise noch mit drin. Das ist der Beispielssketch, der mit der OneWireArduinoSlave-library mitkommt.
while (!asleep()) {sheep++};

UweH

OK, das war's aber noch nicht ganz. Da sind noch einige Abhängigkeiten, z.B. sam.h, hab ich gefunden, jetzt will er noch "adc.h" haben...


In file included from sketch/Arduino.h:26:0,
                 from sketch/OneWireSlave.h:28,
                 from sketch/OneWireSlave.cpp:25:
sketch/chip.h:44:25: fatal error: include/adc.h: No such file or directory
#include "include/adc.h"

UweH

Wenn ich mir die ganzen includes ansehe...da fehlt noch mehr, das sieht nach einer kompletten library aus

ntruchsess

Zitat von: UweH am 28 Februar 2016, 15:16:25sam.h
irgendwie scheint mir Dein Include-pfad wo ganz anders hin zu zeigen ;-)
Hast Du denn eine ATmega328p-basiertes Board (Uno, Nano oder Mini) ausgewählt? sam.h klingt mir eher nach Due
while (!asleep()) {sheep++};

UweH


ntruchsess

Für mich sieht das danach aus, dass die IDE nicht dir richtigen Includes benutzt (sondern welche, die ein anderes Packet mitbringt). Man kann in den Einstellungen der Arduino-ide einstellen, dass man den kompletten Compiler-output zu sehen bekommt. Dann sieht man was von woher(!) inkludiert wird (und ob das überhaupt zur IDE gehört).
while (!asleep()) {sheep++};

UweH

Ich habe das jetzt mal unter Windows probiert und da läuft's. Das war leider vergeudete Zeit, aber so weiß ich wenigstens, wo der Fehler war.
Danke erstmal.

Du hast Pin2 als 1-Wire-Port definiert, es sollte also ein 1-Wire-Device beim Suchlauf gefunden werden...oder?

Gruß
Uwe

UweH

#57
Soooo...er tut es  ;D
Merkwürdigerweise klappt das Hochladen nicht per USB, bricht mit Fehlern ab. Hochladen per Programmer (AVRISP mkII) dagegen läuft durch.
Das Setzen eines value quittiert OWVAR so:
OWVAR: Could not set device OWX_2C_000000000002, reason: OWXVAR: Set failed with return value 255 from release value

Edit: *aufdiestirnklatsch* Verdammt, ich muss die OWX-Dateien noch anpassen, kann nicht funktionieren...

ntruchsess

Zitat von: UweH am 28 Februar 2016, 19:03:36
Soooo...er tut es  ;D

kaum macht man's richtig, schon geht's  ;)

Zitat von: UweH am 28 Februar 2016, 19:03:36
Das Setzen eines value quittiert OWVAR so:
OWVAR: Could not set device OWX_2C_000000000002, reason: OWXVAR: Set failed with return value 255 from release value

das ist zu erwarten, wenn Du noch nicht:

Zitat von: UweH am 28 Februar 2016, 19:03:36
Edit: *aufdiestirnklatsch* Verdammt, ich muss die OWX-Dateien noch anpassen, kann nicht funktionieren...

-> auf OWX_ASYNC (vor vorher hier angehängt) mit DS2480 (über USB oder Ethernet...) - alles andere geht (noch) net.

Viel Erfolg!

Gruß,

Norbert
while (!asleep()) {sheep++};

UweH

Zitat von: ntruchsess am 28 Februar 2016, 21:48:22
kaum macht man's richtig, schon geht's  ;)
Ja...immer das Gleiche...das größte Problem ist 30cm vor dem Bildschirm  >:(

Aber jetzt läuft's und die MCP4651 sind auch schon geordert. Den MAX4162 habe ich mittlerweile hier, aber wahrscheinlich in der Woche eher weniger Zeit, mich damit zu befassen.

Gruß
Uwe