1Wire Temperaturmessung für PI-Regelung

Hallo,

ist das beispiel jetzt zum auslesen de rom daten oder zum auslesen der temp?
im Moment ist die Rede mehr vom Auslesen der ROM-ID. Die braucht man
aber dann um bei mehreren Devices an einem Bus auch ein einzelnes
ansprechen zu können und die Temperaturdaten von dem dann abzufragen.

wie du schon sagst, hast du da einiges an Firlefanz nur um ein Pseudo 2-dimensionales Array zu erzeugen.
Im SRAM liegen die Zellen des Arrays eh hintereinander. Wenn du nun die Berechnung des Offsets selber machst, kannst du in einer Schleife dann doch sehr einfach darauf zugreifen.
weiß ich doch :D Da ich aber iin Bascom noch am Anfang bin eier ich da noch
ziemlich rum :rolleyes: Unter Assembler würd ich mir einfach nen Bereich im
SRAM dafür reservieren und die Adressen für die Speicherstellen aus ner
Basisadresse und nem Offset der aus der Devicenummer und der Bytenummer
in der ROM-ID besteht berechnen. Dann einfach mit Load oder Store drauf
zugreifen und die Sache ist erledigt. :eek: Naja ... Hochsprachen sind da
ziemlich kompliziert und von hinten durch die Brust ins Auge :rolleyes:
Mal sehen wann ich soweit bin das ich bei Bascom direkt im SRAM auf
die Variablen und Arrays drauf rumarbeite ;)

In Assembler laufen meine 1Wire-Routinen ja absolut problemlos. Also die
gesamte Technik und wie man was macht ist kein Thema. Nur diese
Einschränkungen von Bascom gegenüber den Möglichkeiten in Assembler
sind im Moment etwas nervig :D

@Bonze ...
also das ganze läuft folgendermaßen ab ...
1. mit 1wcount nachsehen wieviel am Bus hängt
2. mit 1wsearchfirst die erste ROM-ID lesen
3. mit 1wsearchnext alle weiteren ROM-IDs lesen
--- jetzt kenn man für die Adressierung auf dem Bus alle ROM-IDs
4. entweder ein gewünschtes Device über die ROM-ID oder alle über Skip-ROM
ansprechen und die Messung starten
5. so 0,7..1s warten. Die Messungen dauert etwas ;)
6. Über Adressierung mit den ROM-IDs bei jedem Device einzeln die Ergebnisse
auslesen.

Vor manchen Aktionen muß man über 1wreset die Devices am Bus initialisieren
damit sie in einem definierten Zustand anfangen. Mit dem Befehl dreht man
denen eigentlich nur für 0,5ms den Strom ab (Bus auf GND)


CodeBox 1Wtiming

; __ ___________ _________
; Init/Reset |________________/ |____________/ :
; : : : : :
; | |- 15-60us -|- 60-240us -| |
; |- >=480us ------|--------- >=480us ------------|
; |- Master Tx ----|----------- Master Rx --------|
;
;
; ___ _______ <1us _______________________
; Master Tx |___________________________/ |_____/ : : :
; : : : : : : : :
; |- 15us -|- 15us -|- 30us -| |- 15us -|- 15us -|- 30us -|
; |----- 60-120us -----------|- >1us -|----- 60-120us -----------|
; | Slave-Sample^ | | Slave-Sample^ |
; |- Master Write 0-Slot ----| |- Master Write 1-Slot ----|
;
;
; ___ >1us _______ >1us ______________________
; Master Rx |____ ________/////////////// |____ // : : :
; : : : : : : : : : :
; |- 15us ---|--- 45us ------|- >1us -|- 15us ---|--- 45us ------|
; | : ^Master-Sample | | : ^Master-Sample |
; ##### vom Master generiert ##### vom Master generiert
;

; ========== DS18S20 - Commands ==========
; 0xF0 - Search ROM 0x44 - Convert T 0x48 - Copy Scratchpad
; 0x33 - Read ROM 0x4E - Write Scratchpad 0xB8 - Recall EEPROM
; 0x55 - Match ROM 0xBE - Read Scratchpad 0xB4 - Read Power Supply
; 0xCC - Skip ROM 0xEC - Alarm Search

das ist ein Stück aus meinem Assembler-Code

noch was eingefallen ;) ...
wenn man die ROM-IDs die man auf dem Bus gefunden hat im EEPROM
speichert und festlegt welche ROM-ID zB im Wohnzimmer, Flur, ... sitzt
dann muß man nicht bei jedem Reboot den Bus neu durchsuchen und hat
eine feste Zuordung der gelesenen Meßwerte zum Ort der Messung.

Gruß
Dino
 
Leuchten tuts schon ... :stupido2: ich ärger mich im Moment nur über Bascom
weil es keine 2D-Arrays kann (anscheinend). Ich will die rot markierten Zahlen
als 2te Dimension angeben können. Also zB ...
1wwrite Rom_data( 1 , i )
damit man auch mal sowas machen kann ...
1wwrite Rom_data( device , i )
aber es geht nicht ... :hmmmm:

Hi Dino!

Was möchtest du? Ein 2D-Array?
Wozu soll das denn gut sein? :hmmmm:

Ich meine....
Ob du nun Rom_data1(1) und Rom_data2(1) nimmst, oder du machst Rom_data (n, 1)?
Letztlich kommst doch das Selbe raus!

Du hast zwei Arrays und füllst diese mit Daten. Fertig! ;)



Dann war da noch:
Unter Assembler würd ich mir einfach nen Bereich im
SRAM dafür reservieren und die Adressen für die Speicherstellen aus ner
Basisadresse und nem Offset der aus der Devicenummer und der Bytenummer
in der ROM-ID besteht berechnen. Dann einfach mit Load oder Store drauf
zugreifen und die Sache ist erledigt.

Ich denke, ich weiß was du meinst.
Hast du dir unter BASCOM schon mal den Zusatz "Overlay" angesehen?
Vielleicht kommt der dem Ganzen näher, was du machen möchtest. :)

OVERLAY

The OVERLAY option will not use any variable space. It will create a sort of phantom variable:



Dim x as Long at $60 'long uses 60,61,62 and 63 hex of SRAM



Dim b1 as Byte at $60 OVERLAY

Dim b2 as Byte at $61 OVERLAY



B1 and B2 are no real variables! They refer to a place in memory. In this case to &H60 and &H61. By assigning the phantom variable B1, you will write to memory location &H60 that is used by variable X.

So to define it better, OVERLAY does create a normal usable variable, but it will be stored at the specified memory location which could be already be occupied by another OVERLAY variable, or by a normal variable.



noticeTake care with the OVERLAY option. Use it only when you understand it.



You can also read the content of B1: Print B1

This will print the content of memory location &H60.



By using a phantom variable you can manipulate the individual bytes of real variables.





Another example

Dim L as Long at &H60

Dim W as Word at &H62 OVERLAY

W will now point to the upper two bytes of the long.


Using variable name instead of address

As variables can be moved though the program during development it is not always convenient to specify an address. You can also use the name of the variable :



DIM W as WORD

Dim B as BYTE AT W OVERLAY



Now B is located at the same address as variable W.



For XRAM variables, you need additional hardware : an external RAM and address decoder chip.



For ERAM variables, it is important to understand that these are not normal variables. ERAM variables serve as a way to simple read and write the EEPROM memory. You can use READEEPROM and WRITEEEPROM for that purpose too.



ERAM variables only can be assigned to SRAM variables, and ERAM variables can be assigned to SRAM variables. You can not use an ERAM variable as you would use a normal variable.



Dim b as byte, bx as ERAM byte

B= 1

Bx=b ' write to EEPROM

B=bx ' read from EEPROM

Gruß,
Cassio
 
Hi Cassio

Was möchtest du? Ein 2D-Array?
Wozu soll das denn gut sein? :hmmmm:

Ich meine....
Ob du nun Rom_data1(1) und Rom_data2(1) nimmst, oder du machst Rom_data (n, 1)?
Letztlich kommst doch das Selbe raus!

Du hast zwei Arrays und füllst diese mit Daten. Fertig! ;)
das ist nicht das selbe. weil es anders "schöner" und kürzer ist ...
Man kann 2 ineinanderliegende Schleifen Schleifen benutzen. Die äußere
für die Devices und die innere für die Bytes der Seriennummer. Weil man
sonst für eventuelle (sagen wir mal) 8 Devices 8 mal diesen Kram im Code
hat den man sonst mit einer Schleife schön dynamisch und kurz erledigen
kann. Stell dir das mal auseinandergezogen für 15 Devices und 15 Arrays
im Code vor. Da hat man das halbe Flash nur mit der ROM-ID-Suche voll.

Ich denke, ich weiß was du meinst.
Hast du dir unter BASCOM schon mal den Befehl "Overlay" angesehen?
Vielleicht kommt der dem Ganzen näher, was du machen möchtest. :)
Das sieht seeehhhhrrrr interessant aus :D Das werd ich mir mal etwas
genauer ansehen :D ;) Hab ich wohl vorhin glatt übersehen :rolleyes:

Gruß
Dino
 
Ob du nun Rom_data1(1) und Rom_data2(1) nimmst, oder du machst Rom_data (n, 1)?

Hallo Cassio,
der Unterschied kommt doch, wenn du beliebige Zellen ansprechen willst.
Hiermit

Code:
For I=1 to 5
   For J=1 to 5
      Rom_data(i,j)=1
   Next j
Next I

könntest du z.B. in jede Zelle eine 1 schreiben. Versuche das mal mit Rom_data1(1) bis Rom_data5(1).
Bei Rom_data(i,j) macht der Compiler die Umrechnung auf die entsprechende Speicherzelle.
Wenn du es selber machen willst, wird es schon etwas aufwändiger

Code:
For I=0 to 4
   offset=I*5
   for J=1 To 5
      offset=Offset+J
      Rom_data(offset)=1
   Next J
Next I

HBA
 
Stell dir das mal auseinandergezogen für 15 Devices und 15 Arrays
im Code vor. Da hat man das halbe Flash nur mit der ROM-ID-Suche voll.


Hi Dino!

Also ehrlich gesagt.... so ganz verstehe ich das nicht! :hmmmm:

Wo sparst du denn mit deiner Variante Platz im Speicher?
Ich bin da eher der Meinung.... 15 Arrays sind 15 Arrays... egal wie ich sie nun in und wieder aus dem Speicher transportiere bzw. aufrufe, oder anspreche.

Es ändert doch nichts an der Menge benötigter Bits und Bytes selbst.... nur an den "Bearbeitungsweise".

Aber OK....
Alles wird hübsch! ;)

Gruß,
Cassio :ciao:
 
Hallo Cassio,
der Unterschied kommt doch, wenn du beliebige Zellen ansprechen willst.
Hiermit

Code:
For I=1 to 5
   For J=1 to 5
      Rom_data(i,j)=1
   Next j
Next I


Hallo HBA !

Nun hat sich bei mir auch der Aha-Effekt eingestellt. ;)

Jetzt weiß ich, wie Dino das gemeint hat!

OK, da habt ihr Zwei natürlich recht!

Bin mir nun nicht sicher, ob BASCOM soetwas bietet...... habe es aber auch noch nicht vermisst. ;)


Danke, HBA, für deine Erklärung!

Cassio :hmmmm:
 
Hi HBA,

Wenn du es selber machen willst, wird es schon etwas aufwändiger

Code:
For I=0 to 4
   offset=I*5
   for J=1 To 5
      offset=Offset+J
      Rom_data(offset)=1
   Next J
Next I
stimmt ... die Lösung wär auch möglich gewesen ...
Code:
' 2 Dimensionen 8 x 8 = 64
DIM Rom_data (64) as Byte
For D=0 to 7
   Offset=D*8
   for B=1 To 8
      Offset=Offset+B
      Rom_data(Offset)=1wread()
   Next B
Next D
in die Richtung hab ich dabei nicht gedacht ;)

Gruß
Dino
 
OVERLAY und AT

auch wenn ich etwas vom Thema abschweife ...
Overlay und At hab ich verstanden. Ist recht neckisch ;)
Man kann mit Overlay die Speicherbereiche von Variablen verschiedener Größe
aufeinanderlegen. Wenn man zB eine Variable vom Typ Byte auf eine Variable
vom Typ Word legt, dann kann man das erste Byte der Word-Variable auslesen.
Man könnte also zB eine Byte-Variable auf eine String-Variable legen und die
ASCII-Zeichen im String direkt über die Byte-Variable als ASCII-Codes
bearbeiten :D Geile Sache ;)

Das mit At ... Man kann dadurch selber bestimmen wo im Speicher die Variable
liegen soll. Damit kann man über einen Speicherzugriff die einzelnen Teile der
Variable bearbeiten. Auch nicht schlecht.

Mal sehen was man damit alles schönes anstellen kann :eek: :cool:

Gruß
Dino
 
hab mel ne kleine übersicht gemacht das ich unegfähr weiss wie ich die lochrasterplatine bestücken muss, aber weiss gerade nicht, soll ich möglichst kompakt bauen?
oder normal, viel platz hab ich nich,nur 70x100mm
 
so version 2 sieht schon besser aus :d , habs aber immernoch nich richtig angefangen aufzubauen, könnte mir jemand mal sagen ob die ausgänge so richtig benutzt sind , vorallem fürs lcd?
 
ich kämpe immernoch mit dem code :(
hatte ne anzeige von 65528.6 oder so
Code:
'HEADER##########################################
$regfile = "m8def.dat"                                      'Chipdefinition
$baud = 9600                                                'Baudrate für RS232 verbindung
$crystal = 8000000                                          'Quarz auf 8mhz eingestellt
$hwstack = 32                                               'Standardwert 32 für hardware stack
$swstack = 10                                               'Standardwert 10 für the SW stack
$framesize = 40                                             'Standardwert 40 für the frame space

'Ein / Ausgaenge config##########################
   Config Pind.3 = Output
   Piezo Alias Portd.3                                      'Kurzbezeichnung Piezo lautsprecher wird dem ausgang zugewiesen
   Config 1wire = Portd.2                                   '1-Wire Pins Configurieren

'Declarationen###################################

'Variablen Config################################
   Dim Scratch(9) As Byte
   Dim Temp As Long


'PROGRAMM########################################'Beginn Der Hauptschleife
Do
   1wreset                                                  ' Initialisierung
   1wwrite &HCC                                             ' überspringe ROM-Befehl
   1wwrite &H44                                             ' Temperaturmessung anstoßen

   Waitms 1                                                 ' warten bis Messung fertig

   1wreset                                                  ' Initialisierung
   1wwrite &HCC                                             ' überspringe ROM-Befehl
   1wwrite &HBE                                             ' Temperatur auslesen
   Scratch(1) = 1wread(9)

   'umwandeln

   Print "TemP: " ; Temp

Loop                                                        ' Ende der Hauptschleife
End

soweit hab ichs jetzt und auch denke ich verstanden,
jedoch das umwandeln nicht so richtig, also
in Scratch(2) und scratch(1)
liegt meine temp
das sieht dann so aus scratch(1), scratch(2) °C
oder also 8Bit , 1Bit °C ?
ich lese in versch. Beispielen sowas wie makeint, Shift usw,.
wo auf das ergebnis bzw die zusammenführung angewand wird?
 
Hallo,

ich kämpe immernoch mit dem code :(
...
soweit hab ichs jetzt und auch denke ich verstanden,
jedoch das umwandeln nicht so richtig, also
in Scratch(2) und scratch(1)
liegt meine temp
das sieht dann so aus scratch(1), scratch(2) °C
oder also 8Bit , 1Bit °C ?
ich lese in versch. Beispielen sowas wie makeint, Shift usw,.
wo auf das ergebnis bzw die zusammenführung angewand wird?
Also wenn man das Scratchpad des DS18S20 ausliest dann muß man 9 Byte
lesen. Und da steht dann folgendes drin ...

scratch(1) = Temperature LSB
scratch(2) = Temperature MSB
scratch(3) = TH Register or User Byte 1
scratch(4) = TL Register or User Byte 2
scratch(5) = Reserved
scratch(6) = Reserved
scratch(7) = COUNT REMAIN
scratch(8) = COUNT PER °C
scratch(9) = CRC

Die Temperatur setzt sich folgendermaßen zusammen ...

LSB => 2^6 , 2^5 , 2^4 , 2^3 , 2^2 , 2^1 , 2^0 , 2^-1
oder nach Wertigkeit ... 64 , 32 , 16 , 8 , 4 , 2 , 1 , 0.5

MSB => S , S , S , S , S , S , S , S ( S=Vorzeichen )
"for positive numbers S = 0 and for negative numbers S = 1"
also 0x00 (0dez) = positiv und 0xFF (255dez) = negativ

Mit scratch(7) und scratch(8) kann man noch feiner als 0,5°C auflösen.
Da der Sensor aber sowieso +/-0,5°C Toleranz hat müßte man ihn dafür
extra kalibrieren damit dabei nicht nur Bitgewusel rauskommt. Kann man
sich also normalerweise auch sparen :D

Mit "shift left 8" schiebt man die Bits um 8 Positionen nach links.
Man multipliziert also auf binäre Weise mit 256 ;)
Also hat man bei negativen Werten Zahlen mit FFnn und bei positiven 00nn.
Das ist Zweierkomplement (siehe Wikipedia).

Gruß
Dino
 
mh das hab ich halb verstanden es geht jetzt nur daran müsste ich dann nich mir scratch(1) den wert also meine Temperatur haben ? und mit scratch(2) nur prüfen das wenn 1 = neg und bei 0 gleich positiv?

bekomme wenn ichs so mahe nur den wert 255 ausgegeben :(
 
mh das hab ich halb verstanden es geht jetzt nur daran müsste ich dann nich mir scratch(1) den wert also meine Temperatur haben ? und mit scratch(2) nur prüfen das wenn 1 = neg und bei 0 gleich positiv?

bekomme wenn ichs so mahe nur den wert 255 ausgegeben :(
sieh dir mal die Wertetabelle im Datenblatt des DS18S20 an. Da steht drin
was bei welcher Temperatur für ein Wert in den Registern steht.

Wie gesagt ... Zweierkomplement. Lies dazu mal bei Wikipedia.

Gruß
Dino
 
Da der Sensor aber sowieso +/-0,5°C Toleranz hat müßte man ihn dafür
extra kalibrieren damit dabei nicht nur Bitgewusel rauskommt. Kann man
sich also normalerweise auch sparen :D

Hallo Dino,
würde ich so nicht sehen.
Die absolute Genauigkeit der Sensoren ist +/- 0,5°. Da die Wiederholgenauigkeit aber wesentlich besser ist, lohnt es sich schon, die 1/16° auszulesen. Die bleiben sehr stabil stehen.

bekomme wenn ichs so mahe nur den wert 255 ausgegeben
Das könnte z.B. an deinem Waitms 1 zwischen Start der Konvertierung und dem Auslesen liegen. Dies ist auch für die 9-bit Auflösung zu wenig.
Probier mal Wait 1. Wenn es dann nicht geht, könnte es noch ein Anschluss-Problem sein.

HBA
 
Hallo,

würde ich so nicht sehen.
Die absolute Genauigkeit der Sensoren ist +/- 0,5°. Da die Wiederholgenauigkeit aber wesentlich besser ist, lohnt es sich schon, die 1/16° auszulesen. Die bleiben sehr stabil stehen.
stimmt schon. Wenn man ihn mit nem genauen Vergleichswert kalibriert
dann lohnt es sich (Fieberthermometer ?) Aber sonst kann man sich
das normalerweise sparen :) Aber wer kann schon auf 1/16°C (0,0625°C)
genau kalibrieren :D :rolleyes:

Das könnte z.B. an deinem Waitms 1 zwischen Start der Konvertierung und dem Auslesen liegen. Dies ist auch für die 9-bit Auflösung zu wenig.
Probier mal Wait 1. Wenn es dann nicht geht, könnte es noch ein Anschluss-Problem sein.
Der DS18S20 braucht glaube ich so 750ms für eine Messung. Also wenn man
die Messung startet ist man mit 1sec im grünen Bereich. 1msec ist aber
definitiv zu kurz.

Gruß
Dino
 
Hallo Bonze!

Nur mal eben zwischendurch...

Wenn ich mir dein Programm aus Beitrag #31 so ansehe, dann fragst du den DS1820 zwar ab....... berechnest aber hinterher nicht die Temperaur.
Somit kannst du hinterher auch keine Temperatur sehen.

Schau noch mal ins Datenblatt!
Dort ist bestimmt eine Formel zur Berechnung des Wertes hinterlegt

Hier mal ein Beispiel aus meinen Programmen (für ein DS18S20):
Code:
For I1w = 1 To 9
Scratch(i1w) = 1wread()
Next

Temp = Scratch(2)
Shift Temp , Left , 8

Temp = Temp + Scratch(1)
Temp1 = Temp
Temp1 = Temp1 / 2
Ist_temp = Scratch(8) - Scratch(7)
Ist_temp = Ist_temp / Scratch(8)
Ist_temp = Ist_temp + Temp1
Ist_temp = Ist_temp - 0.25


Hinterher enthält die Variable "Ist_temp" den auf 0,1°C berechneten Temperaturwert!

Du musst die Variablen für dein Programm natürlich anpassen ! ;)

Gruß,
Cassio
 
ja ich dachte bis jetzt das man nen wert erhält also ein byte vom sensor, diesen umwandelt und dann die temp hat, braucht man ne genauere temperatur, muss man sie berechnen oder so,?
Code:
'Ein / Ausgaenge config##########################
   Config Pind.3 = Output
   Piezo Alias Portd.3                                      'Kurzbezeichnung Piezo lautsprecher wird dem ausgang zugewiesen
   Config 1wire = Portd.2                                   '1-Wire Pins Configurieren

'Declarationen###################################
'Variablen Config################################
Dim Scratch(9) As Byte
Dim Temp As integer
Dim Temp1 As Integer
Dim Ist_temp As Integer
'PROGRAMM########################################'Beginn Der Hauptschleife
Do
   1wreset                                                  ' Initialisierung
   1wwrite &HCC                                             ' überspringe ROM-Befehl
   1wwrite &H44                                             ' Temperaturmessung anstoßen
   Wait 1                                                   ' warten bis Messung fertig
   1wreset                                                  ' Initialisierung
   1wwrite &HCC                                             ' überspringe ROM-Befehl
   1wwrite &HBE                                             ' Temperatur auslesen
   Scratch(1) = 1wread(9)                                   'scratchpad auslesen
   Temp = Scratch(2)
   Shift Temp , Left , 8
   Temp = Temp + Scratch(1)
   Temp1 = Temp
   Temp1 = Temp1 / 2
   Ist_temp = Scratch(8) - Scratch(7)
   Ist_temp = Ist_temp / Scratch(8)
   Ist_temp = Ist_temp + Temp1
   Ist_temp = Ist_temp - 0.25
   Print "TemP: " ; Ist_temp

Loop
End

so sieht mein code jetzt auf bekomme aber nur "Temp: 0" via rs232 angezeigt :D, und es ist der DS18S20 Temp Sensor

EDIT hab eben mal das Zahlenformat in SIngle geändert, bekomme jetzt TemP: 32767.25 als ausgabe, das könnte ja praktisch 32,7675°C heissen oder is das ein zufallswert?

edit:
hab eben ma den sensor abgezogen (bei betrieb) und dann nocma angesteckt bekomme jetzt
P: 21.75

TemP: 21.8125

TemP: 21.875

TemP: 21.875

TemP: 21.9375

TemP: 22.0

TemP: 22.0625

TemP: 22.125

TemP: 22.1875

TemP: 22.1875

TemP: 22.75

TemP: 22.8125

TemP: 22.875

ausgegebene :) scheint also so zu gehen ,.
 
Hallo Bonze!

Nun ja.... die Variaben sollten schon richtig dimensioniert werden. ;)


Hier mal die Dimensionierung meiner Variablen dazu:
Code:
'---------------------------------------------------
Config 1wire = Pina.4

Config Single = Scientific , Digits = 1
Dim Ist_temp As Single                                      ' Ist-Temperatur
Dim Temp As Word                                            '
Dim Temp1 As Integer                                        '
Dim Scratch(9) As Byte                                      '
Dim I1w As Byte


Gruß,
Cassio
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)