Forum: Mikrocontroller und Digitale Elektronik ds1820 Verwaltungsprogramm


von grundschüler (Gast)


Lesenswert?

Nach längerer Zeit wieder ucs. Es geht um ein Messprogramm für 
Fußbodenheizungen. Es gibt für FBHs verschiedene Trockenbausysteme mit 
Kosten zwischen 10 und 50 €/m2. Ich suche das billigste System mit 
brauchbarem Ergebnis. Die Dinger unterscheiden sich im Prinzip nur 
hinsichtlich der verwendeten Wärmeleitbleche. Verwendet werden Lamellen 
aus verzinktem Stahlblech oder Aluminium von 0,08 bis 0,5 mm Stärke. Ich 
will an einem Modell die Auswirkungen unterschiedlicher Bleche messen. 
Verwendet werden sollen ds1820 - billig bewährt und ausreichend gute 
Software vorhanden. Damit meine ich die von Peter Dannegger und Falk 
Brunner - wobei nach meiner Erfahrung die von Falk Brunner zuverlässiger 
läuft - also werde ich die verwenden.

Meine Anforderung ist, dass die ds1820-adressen automatisch vom Programm 
verwaltet werden ohne dass man den Programmcode ändern muss. Etwa so:

20 mögliche 8byte-Adressen werden im eeprom gespeichert
Es gibt im eeprom ein Inhaltsverzeichnis, das status und Ordnungsnummer 
in jeweils einem Byte speichert.
Beim Programmstart wird geprüft, ob die gefundenen Sensoren den als 
aktiv gemeldeten Sensoren entsprechen - wenn nein, passiert irgendwas.

Ich habe sowas schon mal gemacht, es funktioniert auch - aber nicht so 
gut dass ich es nach längerer Zeit ohne größeren Aufwand wieder benutzen 
kann. Also neu machen - es sei denn es gibt schon irgendwas Fertiges was 
meinen Anforderungen entspricht.

Das ist jetzt nach langer Vorrede die Frage: gibt es ein gutes 
Verwaltungsprogramm für ds1820-Adressen?

von grundschüler (Gast)


Lesenswert?

niemand versteht mich/mein Problem?

Hier mal ein erster Lösungsansatz:
1
uint8_t yesno_keyboard(void)
2
{
3
down_timer1=600;
4
  while(down_timer1){
5
    if( !(PIND&(1<<3)))return 1;
6
  }
7
return 0;
8
}
9
10
11
12
13
void a_ds1820_init(void){
14
u8 i=0,jj,j;
15
  a_ds1820_start_meas();
16
    a_eeprom_in_array_einlesen();
17
  wait;
18
  a_ds1820_find_ids();
19
  lgi(1,12,zl_sensors_hw);lw("/");li(MAX_ROMS);
20
     
21
  for (i=0;i<zl_sensors_hw;i++){
22
    if(ds1820table[i]>0x0fff){
23
      
24
      lg(2,1);for(jj=0;jj<8;jj++)lcd_hx(ds1820ids_tmp[i*8+jj]);
25
      
26
      
27
      for(j=0;j<MAX_ROMS;j++)
28
      {
29
        lg(4,1);for(jj=0;jj<8;jj++)lcd_hx(ds1820ids[j*8+jj]);
30
        lg(3,1);lw("store at "); li(j);lw(" ?    ");
31
              
32
        if(yesno_keyboard()==1){
33
          for(jj=0;jj<8;jj++)
34
          {eeprom_update_byte(eep_ds1820_adr+j*8+jj,ds1820ids_tmp[i*8+jj]);}
35
          break;
36
        }
37
      }
38
    }
39
     
40
  }
41
 }


Wenn beim Start Sensoren gefunden werden die noch nicht im eeprom 
gespeichert sind wird einzeln abgefragt, an welcher Stelle sie im eeprom 
gespeichert werden sollen.

von Josef D. (jogedua)


Lesenswert?

> aber nicht so gut dass ich es nach längerer Zeit ohne größeren Aufwand wieder 
benutzen kann. Also neu machen -

Mit deinem Lösungsansatz läufst du aber wieder in die gleiche Falle.
Ich habe gar nicht erst versucht, das zu verstehen.
Vor vielen Jahren hatte ich aber ein ähnliches Problem. Mein Ziel war, 
ganz ohne Tabellen und Eingaben auszukommen, um (neue) Sensoren 
anzulernen.
Ich habe es gelöst, wie in
[[Beitrag "Re: DS1820, DS18B20 in C"]]
beschrieben.
Wenn das für dich interessant ist, könnte ich dich unterstützen.

von grundschüler (Gast)


Lesenswert?

Josef D. schrieb:
"Bei der Inbetriebnahme schließt man also die Sensoren in der 
Reihenfolge
einzeln an, wie sie in der Überschrift stehen, und schaltet jeweils
einmal kurz ein."

Ich hab 10 fest verklebte Sensoren. Die einzeln anzulernen wäre sehr 
umständlich und ist nicht das, was ich will.



Jeder Sensor hat eine Position, die irgendwo gespeichert werden muss. Ob 
im Sensor selbst oder im eeprom ist im Prinzip egal. Die Position wird 
bei Programmstart einmal ausgelesen und in einem Array abgelegt. der 
Zugriff auf die Sensoren erfolgt dann über die im array abgespeicherte 
Position.
1
  ds1820table[0]=9;
2
  ds1820table[1]=7;
3
  ds1820table[2]=2;
4
  ds1820table[3]=6;
5
  ds1820table[4]=0;
6
  ds1820table[5]=4;
7
  ds1820table[6]=8;
8
  ds1820table[7]=3;
9
  ds1820table[8]=5;
10
  ds1820table[9]=1;
11
12
13
....
14
    onewire_match_rom(ds1820ids+8*ds1820table[sens_nr]);
15
    res = ds18B20_read_temp(&temp);

Problem ist die Eingabe der Werte in den uc. 4Zl-Lcd + 1 Taste gestaltet 
sich schwierig. Ich werde es wohl wieder über ein ir-Menu machen.

von c-hater (Gast)


Lesenswert?

grundschüler schrieb:

> Problem ist die Eingabe der Werte in den uc. 4Zl-Lcd + 1 Taste gestaltet
> sich schwierig.

Klares Designproblem. Wenn ich komplexe Daten einzugeben beabsichtige, 
sehe ich eine Möglichkeit vor, dies komfortabel tun zu können.

Mit einem 4Zeilen-Text-LCD und mindestens 5 (im Idealfall eher 6) Tasten 
kann man ein sehr komfortabel bedienbares Menüsystem realisieren.

Sprich: du hast da an der absolut falschen Stelle gespart. War wohl 
keine passende Wichsvorlage verfügbar...

von grundschüler (Gast)


Lesenswert?

c-hater schrieb:
> Sprich: du hast da an der absolut falschen Stelle gespart. War wohl
> keine passende Wichsvorlage verfügbar...

absolut unpassende Ausdrucksweise. Im übrigen frage ich hier ja gerade 
nach einer passenden Vorlage. Es gibt anscheinend keine. Ist doch schön, 
dass es noch zu lösende Aufgaben gibt.

von Wolfgang (Gast)


Lesenswert?

c-hater schrieb:
> Mit einem 4Zeilen-Text-LCD und mindestens 5 (im Idealfall eher 6) Tasten
> kann man ein sehr komfortabel bedienbares Menüsystem realisieren.

Komfortable ist etwas anderes. Hat der Controller keine serielle 
Schnittstelle, über die er mit einem PC o.ä. kommunizieren kann?

von Stefan F. (Gast)


Lesenswert?

grundschüler schrieb:
> Ich will an einem Modell die Auswirkungen unterschiedlicher
> Bleche messen.

Ich kann Dir mit Sicherheit sagen, dass alle Bleche für den gewünschten 
Temperaturbereich geeignet sind. Ein Beratungsgespräch beim Fachmann - 
vielleicht gar beim Hersteller, wird sicher wesentlich 
aufschlussreicher.

Welche Auswirkung willst du denn messen. Offenbar irgend etwas bezüglich 
der Temperatur. Vielleicht geht Dir darum, deren Wärmeleitfähigkeit zu 
vergleichen. Dafür müssten allerdings die Infos von Wikipedia bereits 
genügen. Die Wärmeleitfähigkeit wäre allerdings ziemlich egal, da

a) Das Metall ohnehin in wesentlich stärker isolierendem Material 
eingebettet ist

b) Du auch gar nicht willst, dass der Raum binnen Sekunden von 15 auf 20 
Grad aufgeheizt wird. Das wäre nämlich sehr unangenehm.

Daher nochmal die Frage: Welche Auswirkung bzw. welche Unterschiede 
willst du  messen?

von Joachim B. (jar)


Lesenswert?

grundschüler schrieb:
> Meine Anforderung ist, dass die ds1820-adressen automatisch vom Programm
> verwaltet werden ohne dass man den Programmcode ändern muss. Etwa so:
>
> 20 mögliche 8byte-Adressen werden im eeprom gespeichert
> Es gibt im eeprom ein Inhaltsverzeichnis, das status und Ordnungsnummer
> in jeweils einem Byte speichert.
> Beim Programmstart wird geprüft, ob die gefundenen Sensoren den als
> aktiv gemeldeten Sensoren entsprechen - wenn nein, passiert irgendwas.

alles eine Frage vom vorhandenen Platz und SRAM

Ich habe sowas ähnliches gemacht mit 2 Wesserver auf AVR ATmega Basis

alle beteiligten DS mit ihrer Seriennummer erfasst und entscheide per 
#define vor dem Kommpilieren ob der Webserver daheim oder @work ist.

Das kann man auch zur Laufzeit entscheiden denn man weiss ja wo die 
Sensoren sitzen!

von batman (Gast)


Lesenswert?

Bei weniger Sensoren und Änderungen speichere ich die Adressen gar nicht 
fest, sondern lasse sie nur bei jedem Einschalten einlesen und im RAM 
sortieren. Damit hat jeder Sensor erstmal eine vorläufige eindeutige 
Nummer in der Konfiguration. Im EEPROM halte ich dann nur eine 
Zuordnungsliste wie 1,3,2,4 und sortiere das Array danach um. Bedeutet 
also "Gib dem 2-ten Sensor die Nummer/Funktion/Position 3" und so mach 
ich bei einer (seltenen) Konfigurationsänderung die Zuordnung einmal 
komplett neu, das geht z.B. über einen Webserver und/oder die Tabelle 
als (SPIFFS-)Datei. Vorteil ist, dass man von der Benutzerseite die 
Adressen nie sehen muß und die Lösung trotzdem  universell mit allen 
möglichen Sensoren parallel funktioniert.

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

Wolfgang schrieb:
> Komfortable ist etwas anderes. Hat der Controller keine serielle
> Schnittstelle, über die er mit einem PC o.ä. kommunizieren kann?

Ein wirklich guter Vorschlag den ich umsetzen werde. Kleines c#-Programm 
auf dem PC, welches das m328-eeprom beschreibt.

Stefan ⛄ F. schrieb:
> Ich kann Dir mit Sicherheit sagen, dass alle Bleche für den gewünschten
> Temperaturbereich geeignet sind. Ein Beratungsgespräch beim Fachmann -
> vielleicht gar beim Hersteller, wird sicher wesentlich
> aufschlussreicher.

Ein richtiger Dilettant vertraut keinem Fachmann. Gekaufte Syteme kosten 
zwischen 20 und 50,00€/m². Mein angestrebtes Budget liegt bei 10,00/m² - 
bei angestrebt gleicher Leistungsfähigkeit. Was wird mir der befragte 
Fachmann / Hersteller wohl sagen?

Die billigsten Bleche kosten 4 €/m². Alufolie ist möglicherweise 
billiger. Die Fragestellung lautet, wie dick muss Alufolie sein, damit 
die Wirkung mit 0,5mm Stahlblech vergleichbar ist. Reichen 
möglicherweise 0,01 mm oder 0,1mm? 0,1mm kosten 1€/m2, 0,01mm lägen 
unter 30Cent/m2.

Mein Messaufbau sieht bis jetzt so aus, dass eine halbe Stunde auf 50° 
Vorlauf erwärmt wird. Danach wird nicht mehr zugeheizt und die 
Temperaturen nach einer halben Stunde Abkühlung gemessen. Je höher die 
Temperatur der steinernen Abdeckung ist- um so mehr Wärme ist dem Wasser 
entzogen worden.

von Stefan F. (Gast)


Lesenswert?

grundschüler schrieb:
> Je höher die Temperatur der steinernen Abdeckung ist-
> um so mehr Wärme ist dem Wasser entzogen worden.

Und das wird mit besser leitendem Material natürlich stärker ausfallen.

Was willst du da noch messen?

Die Frage ist eher: Wie viel Wärmeleitung ist nötig, damit das ganze 
sinnvoll und wirtschaftlich funktioniert. Ich habe starke Zweifel, dass 
du das "mal eben schnell" mit so einem Test ermitteln kannst.

Und dann kommen da ja noch nicht-funktionale Anforderungen, dass das 
Material gut zu verarbeiten sein muss und lange genug haltbar sein soll. 
Wie lange wäre das? 2 Jahre oder 100 Jahre? Ich wohne in einer 90 Jahre 
alten Ruine, die aus Müll wieder aufgebaut wurde. Da sieht man ganz gut, 
welche Notlösungen gut waren, und welche nicht. Aber so viel Zeit hast 
du wohl nicht.

von Wolfgang (Gast)


Lesenswert?

grundschüler schrieb:
> Danach wird nicht mehr zugeheizt und die
> Temperaturen nach einer halben Stunde Abkühlung gemessen. Je höher die
> Temperatur der steinernen Abdeckung ist- um so mehr Wärme ist dem Wasser
> entzogen worden.

Die willst aber gar nicht einen möglichst effektiven Wärmeentzug. Sonst 
wird der Fußboden nahe der Einspeisung warm und am Ende kommt nichts 
mehr an.

Die Metallflächen dienen als Heatspreader, um den Abstand der 
Heizschlangen vergrößern zu können, ohne dass der Fußboden zwischen den 
Rohren kalte Streifen bekommt. Es geht also um Kosten 
Heizschlagen/Pumpleistung vs. Kosten Headspreader.

von grundschüler (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Aber so viel Zeit hast du wohl nicht.

Der Corona-Tod droht.... Ich hoffe, mir bleiben noch ein paar Jahre


> Ich habe starke Zweifel, dass
> du das "mal eben schnell" mit so einem Test ermitteln kannst.

Ich muss ja nur vergleichen. Trockenbau mit Wärmeleitblechen ist ja ein 
bewährtes System für FBHs. Wenn ich mit Alufolie ähnliche 
Oberflächentemperaturen auf meinem Prüfstand erreiche kann ich davon 
ausgehen, dass es auch auf der Baustelle funktioniert.

> Und dann kommen da ja noch nicht-funktionale Anforderungen, dass das
> Material gut zu verarbeiten sein muss und lange genug haltbar sein soll.
> Wie lange wäre das? 2 Jahre oder 100 Jahre?

Arbeitszeit ist ein zu berücksichtigender Kostenfaktor. Haltbarkeit 
nicht unter 50Jahre.



Wolfgang schrieb:
> Die Metallflächen dienen als Heatspreader, um den Abstand der
> Heizschlangen vergrößern zu können, ohne dass der Fußboden zwischen den
> Rohren kalte Streifen bekommt.

Im Prinzip jein. Bei käuflichen System beträgt der Abstand zwischen den 
Heizrohren entweder 12,5 oder 25cm  (8 Rohre bzw. 4 Rohre/m). Ich 
verwende 16,6 cm Abstand (6 Rohre/m). Das steht im Prinzip fest. Die 
Rohre kosten 3,70€/m2 - da kommt man auch nicht mehr wesentlich runter. 
40 mm Styroporplatten kosten rund 3€/m2. Einzige Möglichkeit Kosten zu 
sparen, sind die Bleche, die als "Heatspreader" wirken. Auch die 
Wärmeverteilung über die Bleche will ich messen. Da kommen noch mehr 
Sensoren hin. Die Bleche sind  für 125mm Abstand. Ich hab also 5cm 
Abstand zwischen den Blechen. Es kann Sinn machen die Bleche mit Folie 
abzudecken.

von grundschüler (Gast)


Angehängte Dateien:

Lesenswert?

die Lösung:

alle Sensoren werden mit aktueller Temperatur und id erfasst. Auf dem 
Display werden seitenweise jeweils drei Sensoren angezeigt. Das Programm 
sucht jeweils den wärmsten Sensor heraus und zeigt die entsprechende 
Seite mit diesem Sensor an. Gespeichert wird mit ir-Tastenbefehl.

Man selektiert den gewünschten sensor durch Wärmezufuhr - dieser wird 
dann durch ir-Befehl an der ersten nicht belegten Stelle im eep 
gespeichert.

von Peter R. (Gast)


Lesenswert?

grundschüler schrieb:

> Die Fragestellung lautet, wie dick muss Alufolie sein, damit
> die Wirkung mit 0,5mm Stahlblech vergleichbar ist.

Ein  Tabellenbuch mit den Wärmeleitfähigkeiten von Al und Fe beantwortet 
diese Frage sofort.

Interessant wäre eher das Langzeitverhalten  von Al oder Fe im Kontakt 
mit Beton oder Styropor. Oder das Verhalten bei Wärmedehnung des Betons.

An Deiner Preisangabe für Styro habe ich Zweifel. Schlließlich muss 
Styro für diesen Zweck eine zuverlässige Druckfestigkeit haben, höher 
als die für Verpackungsmaterial.

von chris (Gast)


Lesenswert?

grundschüler schrieb:
> Meine Anforderung ist, dass die ds1820-adressen automatisch vom Programm
> verwaltet werden ohne dass man den Programmcode ändern muss. Etwa so:

Hab sowas in ASM gemacht und es ist ziemlich einfach wenn man das LCD 
nur zum anzeigen nutzt. Wenn man es aber evtl wie folgt erweitert sind 
den Möglichkeiten keine Grenzen gesetzt.
- einzelnen Sensor anschließen
- Controller per serieller Schnittstelle ansprechen sodass
  - SrNr auslesen/abspeichern
  - diese per ser. Schnittstelle zum PC Schicken (8Byte)
  - 2 bis 3 Byte als Platzhalter vor oder nach der jeweiligen DS-Adresse 
für
    für die Beschreibung nutzen
  - Den FamalyCode könnte man auch bei allen weg rationalisieren und 
fest in
    die Adressierungsroutine einbetten
  - dies alles über ein TerminalProgramm

einfach ausgedrückt ein Frage/Antwortspiel.

DS schickt Adresse zum µC und speichert ->
µC schickt Adresse zum PC ->
Nutzer ergänzt zb WZ für Wohnzimmer = 2 Byte ->
WZ wird zum vor/nach der SerienNummer eingefügt im EEPROM µC

von Wolle G. (wolleg)


Lesenswert?

chris schrieb:
> - einzelnen Sensor anschließen
> - Controller per serieller Schnittstelle ansprechen sodass
>   - SrNr auslesen/abspeichern

So ähnlich habe ich es auch gemacht. Jedem DS18B20 wurde eine 
fortlaufende Nr. "eingraviert" und dann die SN ausgelesen.
Dies geschieht über einen DS2482 (I2C).
Der jeweilige DS18B20 wird zur Temp.-messung mit seiner Adresse 
angesprochen und der Messwert ausgelesen. Im Laufe der Zeit haben sich 
30 DS18B20-fühler angesammelt, die sich nach dieser Methode sicher 
auslesen lassen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.