Temperaturmessung mit DS18B20 und Dimmung der LCD Hintergrund-LED

robin

Mitglied
20. Apr. 2009
66
0
6
Sprachen
Hallo,

ich möchte mit der nachfolgend eingestellten Schaltung und mit Hilfe des Programms die Außentemperatur (Garageninnentemperatur, dort überwintern Kübelpflanzen) als auch die Innentemperatur (Kaminheizkessel) überwachen.

Das Programm zur Messung der Temperaturen funktioniert recht zufriedenstellend. Es stammt nicht von mir, ich habe es aus anderen Programmteilen, die ich im Netz gefunden hatte, zusammengestellt. Selbst bin ich leider noch nicht in der Lage, diese Programme zu schreiben, aber ich bemühe mich, daraus zu lernen.:wink:

Wie aus dem Schaltplan zu ersehen ist, möchte ich noch Folgendes signalisieren:
1. Temperaturvergleich zwischen Ist- und Solltemperaturen in kritischen Bereichen. Da interessieren die Temperaturen: < 1°C, 60°C, 70°C. Außerdem hatte ich vorgesehen, mittels eines Fototransistors die Hintergrundbeleuchtung des Displays bei abgedunkeltem Raum auf ~ 20-30 % abzuschwächen. Den BPW 40 hatte ich daher auf PD.3 (Interrupt 1) gelegt, um mit Hilfe des Int1 bei wechselnder Flanke, den Interrupt auslösen zu können.
2. Dimmung der LCD Hintergrundbeleuchtung mit dem im Listing unten angehängten Teil. Dieses Programm habe ich 1:1 von der “Elektronikerseite.de“ entliehen, weil es vorzüglich arbeitet und ich es auf gar keinen Fall besser schreiben könnte. Es sind halt die unangenehmen Probleme des Anfängers.

Zu 1. Ich gehe davon aus, dass die aus den scratchpads des DS18B20 ausgelesenen Temperaturen jeweils im Ausdruck “Celsius“ enthalten sind. Bisher hatte ich versucht, einen Temp.-Vergleich über: If >= der Schwellentemperatur in hex als auch binär vornehmen zu können. Schlug alles fehl. Im Netz hatte ich auch keine Anhaltspunkte gefunden, wie ich da vorgehen könnte und das Datenblatt des Sensors liefert mir da auch keine Informationen.

Zu 2. Ich finde keinen Weg, das PWM-Programm der Dimmung mit dem eigentlichen Hauptprogramm der Temperaturmessung zu verbinden oder auch umgekehrt. Angedacht hatte ich, mit dem Taster Ta1 jederzeit in den Ablauf der Temp.-Messung eingreifen zu können, um das Gerät ein/ausschalten und/oder die Hintergrund-LED dimmen zu können. M. E. kann dies nur unter Einbeziehung des Int0 aus dem Dimmerprogramm ins Hauotprogramm funktionieren. Unzählige Versuche waren bislang aber erfolglos. Ich hatte schon mit dem “worst case“ geplant und wollte einen zweiten mega8 für die Dimmung nutzen. Dann laufen tatsächlich beide Programme ungestört nebeneinander ab, doch das Gerät als solches, der zweite µC, lässt sich dann softwaremäßig nicht mittels Ta1 in die Sleep-Funktion versetzen.

Ich denke, ich stelle zuerst einmal beide Programme hintereinander ein und belasse die Ergänzung um Int1.

Natürlich stelle ich das spätere Layout, falls keine Änderungen mehr nötig sind, hier ebenfalls ein.

Tja, mit meinem Latein bin ich am Ende und würde mich über jeden Tipp, der mir weiter hilft, riesig freuen! Besten Dank schon mal im Voraus!:meeting:


Schöne Grüße
Robin


Code:
$regfile "m8def.dat"
$crystal = 1000000
$hwstack = 82
$framesize = 68
$swstack = 68
        '


Initlcd
Cursor Off



Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32

Cls

Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4
Config Portb.2 = Input
Config 1wire = Portb.2


Dim X As Byte


Dim Celsius As Integer

Dim T(8) As Single
Dim Ar1(8) As Byte                                          '1. 1wire
Dim Ar2(8) As Byte                                          '2. 1wire
Dim Ar3(8) As Byte                                          '3. 1wire
Dim Ar4(8) As Byte                                          '4. 1wire
Dim Ar5(8) As Byte                                          '5. 1wire
Dim Ar6(8) As Byte                                          '6. 1wire
Dim Ar7(8) As Byte                                          '7. 1wire
Dim Ar8(8) As Byte                                          '8. 1wire
Dim Mini(8) As Single                                       'minimaler Temperaturwert
Dim Maxi(8) As Single                                       'maximaler Temperaturwert

Dim I As Byte
Dim W As Word
Dim Sp(12) As Byte                                          '12 bit Genauigkeit

Declare Sub Temperatur


Wait 1


If Err = 0 Then
Ar1(1) = 1wsearchfirst()                                    'Sensorabfrage
For I = 1 To 8
Next

End If


If Err = 0 Then                                             'Sensorabfrage
Ar2(1) = 1wsearchnext()
End If
For I = 1 To 8
                                                              '  beliebig erweiterbar


W = 1wirecount()
Locate 1 , 1
Lcd "Anzahl nutzbarer"
Locate 2 , 1
Lcd "Sensoren: " ; W                                        'Anzahl der Themperatursensoren werden angezeigt
Wait 3
Cls


Call Temperatur

Mini(1) = 999
Mini(2) = 999


Maxi(1) = 000
Maxi(2) = 000                                               'beliebig erweiterbar



Do

Call Temperatur

Loop


Sub Temperatur

    1wreset
    1wwrite &HCC
    1wwrite &H44

Waitms 300

Do
Sp(1) = 1wread(12)                                          '12-bit Genauigkeit

Waitus 200


If Err = 0 Then
    1wverify Ar1(1)
        1wwrite &HBE
        Sp(1) = 1wread(12)
        For I = 1 To 12

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16

        T(1) = Celsius
        T(1) = T(1) / 10


        Lcd T(1)
    Locate 1 , 1
        Lcd "Aussen: " ; Fusing(t(1) , "#.#") ; Chr(0) ; "C   "

        If Mini(1) > T(1) Then Mini(1) = T(1)
        If Maxi(1) < T(1) Then Maxi(1) = T(1)


    Locate 3 , 1
        Lcd "Min:    " ; Fusing(mini(1) , "#.#") ; Chr(0) ; "C   "

    Locate 4 , 1
        Lcd "Max:    " ; Fusing(maxi(1) , "#.#") ; Chr(0) ; "C   "


1wreset

Wait 5


If W >= 2 Then
    1wverify Ar2(1)

        1wwrite &HBE

        Sp(1) = 1wread(12)



        For I = 1 To 8

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16
         Print Celsius
        T(2) = Celsius
        T(2) = T(2) / 10
        Lcd T(2)
  Locate 1 , 1
        Lcd "Kamin: " ; Fusing(t(2) , "#.#") ; Chr(0) ; "C   "

        If Mini(2) > T(2) Then Mini(2) = T(2)
         If Maxi(2) < T(2) Then Maxi(2) = T(2)
  Locate 3 , 1
        Lcd "Min:   " ; Fusing(mini(2) , "#.#") ; Chr(0) ; "C   "
  Locate 4 , 1
        Lcd "Max:   " ; Fusing(maxi(2) , "#.#") ; Chr(0) ; "C   "



End If
       1wreset

       Wait 5

Next

End If
                                                                        'beliebig erweiterbar
End Sub

Loop





'Dimmprogramm


Dim Hell As Word
Dim An As Word
Dim Aus As Word
Dim Pressed As Word
Dim Neu As Word
Dim Heller As Word
Dim Pwm As Word
Dim Dunkler As Word
Dim Standby As Word

' Festlegen der Starthelligkeit beim Antippen des Tasters
' 0=Dunkel, 255=Hell
Const Starthelligkeit = 254
Const Abdunkeln = 100                                       'ergänzt

Config Portb.1 = Output
Config Portd.1 = Output
Config Portd.0 = Input
Config Portd.2 = Input
Config Portd.3 = Output                                     'ergänzt
Portd.3 = 1

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1

Compare1a = 255 : Portd.0 = 1
An = 0 : Neu = 0 : Pwm = 255

Hell = 255 - Starthelligkeit
Dunkler = Hell
If Dunkler = 0 Then Dunkler = 255
On Int0 Int0_isr
Config Int0 = Low Level
Enable Int0

On Int1 Fototrans                                           'Um Int1 ergänzt
Config Int1 = Change
Enable Int1
Enable Interrupts

Do

Loop


Fototrans:
If Portd.3 = 0 Then                                         'Um Fototrans ergänzt
Hell = Starthelligkeit - Abdunkeln
  If Portd.3 = 1 Then
Goto Entry

End If
End If

Return




Entry:
Do
  Portd.1 = 0
  If Pind.0 = 0 Then
    Incr Pressed : Waitms 1 : Neu = Heller
  End If
  If Pwm = 0 Then Heller = 0
  If Pwm = 255 Then Heller = 1
  If Pressed > 250 Then
    If Heller = 0 Then Incr Pwm Else Decr Pwm
    Waitms 30
  End If
  If Pind.0 = 1 And Pressed > 0 And Pressed < 250 Then
    If Pressed < 50 Then
      If Pwm = 0 Then
        Do
          Incr Pwm : Compare1a = Pwm : Waitms 5
          Pressed = 0 : Neu = 1 : An = 1
        Loop Until Pwm = Dunkler Or Pind.0 = 0
      Else
        Do
          Decr Pwm : Compare1a = Pwm : Waitms 5
          Pressed = 0 : Neu = 0 : An = 1
        Loop Until Pwm = 0 Or Pind.0 = 0
      End If
    Elseif An = 1 Then
      Do
        Incr Pwm : Compare1a = Pwm : Waitms 5
        Pressed = 0 : Neu = 1 : An = 0
      Loop Until Pwm = 255 Or Pind.0 = 0
    Else
      Do
        Decr Pwm : Compare1a = Pwm : Waitms 5
        Pressed = 0 : Neu = 0 : An = 1
      Loop Until Pwm = Hell Or Pind.0 = 0
    End If
    If Pind.0 = 0 Then Pressed = 250
  Elseif Pressed > 0 And Pind.0 = 1 Then
    If Neu = 1 Then Heller = 0
    If Neu = 0 Then Heller = 1
    Pressed = 0 : Waitms 100
  End If
  If Pwm = 255 Then An = 0 Else If Aus > 5 Then An = 1
  Incr Aus : Compare1a = Pwm
  If Pwm = 255 Then Incr Standby Else Standby = 0
Loop Until Standby > 100
Standby = 0
Portd.1 = 1
Mcucr = Mcucr And &B10101111
Mcucr = Mcucr Or &B10100000
sleep
Goto Entry
End

Int0_isr:
  nop
Do
  Loop

  Return
 

Anhänge

  • File0003.PDF
    47,6 KB · Aufrufe: 81
Hallo Robin!

Ich muss zugeben, dass ich mich durch deine Beschreibung und Aufgabenstellung nun erst mal durcharbeiten muss.... inkl. deinem Schaltplan.

Teilweise verstehe ich deine Aufgabe nicht.... und das Ein oder Andere im Schaltplan auch nicht wirklich..... aber vielleicht komme ich noch dahinter. ;)

Auf alle Fälle möchtest du die Hintergrundbeleuchtung deines Displays dimmen können. Dies soll mittels PWM realisiert werden.
Habe ich das so richtig verstanden? :hmmmm:

Dann suchst du nach einer Möglichkeit deine Ist-Werte der Temperaturen mit Soll- bzw. Min- und Maxwerte zu vergleichen..... und anschließend eine Meldung (oder was auch immer) auszugeben.
Habe ich das auch richtig verstanden? :hmmmm:

Dann ist da noch etwas mit dem Fototransistor wegen der Garagenbeleuchtung und der Abhängigkeit zwischen INT0 und PWM.... oder wir war das?

Wie oben schon erwähnt, ich muss mir da noch mal in Ruhe einige Gedanken zu machen.
Momentan sehe ich noch nicht die großen Schwierigkeiten und von daher..... ;)


Klingt jedenfalls nach einer interessanten und spannenden Aufgabe. :)
Ich bin dabei! ;)

Gruß,
Cassio
 
Hallo Casio,

vielen Dank, dass Du Dir die "Sache" mal angesehen hast. Es tut mir leid, dass ich wohl mein Anliegen etwas missverständlich beschrieben hatte und stelle es nochmals anders dar::)



Code:
$regfile "m8def.dat"
$crystal = 1000000
$hwstack = 82
$framesize = 68
$swstack = 68
        '
Config Portd.3 = Input
Portd.3 = 1


Initlcd
Cursor Off



Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32

Cls

Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4
Config Portb.2 = Input
Config 1wire = Portb.2
Config PortD.7= Output
Config PortD.6= Output
Config PortD.5= Output
Config PortB.0= Output

Dim X As Byte


Dim Celsius As Integer

Dim T(8) As Single
Dim Ar1(8) As Byte                                          '1. 1wire
Dim Ar2(8) As Byte                                          '2. 1wire
Dim Ar3(8) As Byte                                          '3. 1wire
Dim Ar4(8) As Byte                                          '4. 1wire
Dim Ar5(8) As Byte                                          '5. 1wire
Dim Ar6(8) As Byte                                          '6. 1wire
Dim Ar7(8) As Byte                                          '7. 1wire
Dim Ar8(8) As Byte                                          '8. 1wire
Dim Mini(8) As Single                                       'minimaler Temperaturwert
Dim Maxi(8) As Single                                       'maximaler Temperaturwert

Dim I As Byte
Dim W As Word
Dim Sp(12) As Byte                                          '12 bit Genauigkeit

Declare Sub Temperatur


Wait 1


If Err = 0 Then
Ar1(1) = 1wsearchfirst()                                    'Sensorabfrage
For I = 1 To 8
Next

End If


If Err = 0 Then                                             'Sensorabfrage
Ar2(1) = 1wsearchnext()
End If
For I = 1 To 8
                                                              '  beliebig erweiterbar


W = 1wirecount()
Locate 1 , 1
Lcd "Anzahl nutzbarer"
Locate 2 , 1
Lcd "Sensoren: " ; W                                        'Anzahl der Themperatursensoren werden angezeigt
Wait 3
Cls


Call Temperatur

Mini(1) = 999
Mini(2) = 999


Maxi(1) = 000
Maxi(2) = 000



Do

Call Temperatur

Loop


Sub Temperatur

    1wreset
    1wwrite &HCC
    1wwrite &H44

Waitms 300

Do
Sp(1) = 1wread(12)                                          '12-bit Genauigkeit

Waitus 200


If Err = 0 Then
    1wverify Ar1(1)
        1wwrite &HBE
        Sp(1) = 1wread(12)
        For I = 1 To 12

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16

        T(1) = Celsius
        T(1) = T(1) / 10


[B][COLOR="Red"]If T(1)<= 0010h Then PortD.7=1
Else PortD.7=0
End If[/COLOR][/B]
       

Lcd T(1)
    Locate 1 , 1
        Lcd "Aussen: " ; Fusing(t(1) , "#.#") ; Chr(0) ; "C   "

        If Mini(1) > T(1) Then Mini(1) = T(1)
        If Maxi(1) < T(1) Then Maxi(1) = T(1)


    Locate 3 , 1
        Lcd "Min:    " ; Fusing(mini(1) , "#.#") ; Chr(0) ; "C   "

    Locate 4 , 1
        Lcd "Max:    " ; Fusing(maxi(1) , "#.#") ; Chr(0) ; "C   "


1wreset

Wait 5


If W >= 2 Then
    1wverify Ar2(1)

        1wwrite &HBE

        Sp(1) = 1wread(12)



        For I = 1 To 8

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16
         Print Celsius
        T(2) = Celsius
        T(2) = T(2) / 10
      
[B][COLOR="Red"]If T(2)>= 003Ch Then PortD.6=1
Else PortD.6=0
End If
If T(2)>= 0046h Then PortD.5=1 And PortB.0=1
Else PortD.5=0 And PortB.0=0
End If[/COLOR][/B]

  Lcd T(2)
  Locate 1 , 1
        Lcd "Innen: " ; Fusing(t(2) , "#.#") ; Chr(0) ; "C   "

        If Mini(2) > T(2) Then Mini(2) = T(2)
         If Maxi(2) < T(2) Then Maxi(2) = T(2)
  Locate 3 , 1
        Lcd "Min:   " ; Fusing(mini(2) , "#.#") ; Chr(0) ; "C   "
  Locate 4 , 1
        Lcd "Max:   " ; Fusing(maxi(2) , "#.#") ; Chr(0) ; "C   "



End If
       1wreset

       Wait 5

Next

End If

End Sub

Loop


Das ist das Programm zur Temperaturmessung. Es funktioniert zufriedenstellend. Die Innen- als auch die Außentemperatur wird gemessen und soll mit fest vorgegebenen Temperaturwerten verglichen werden, von:
<= 1 °C (PortD.7 geht bei Unterschreitung auf 1),
>=60 °C (PortD.6 geht bei Überschreitung auf 1),
>=70 °C (PortD.5 geht bei Überschreitung auf 1). Zusätzlich soll noch PortB.0 =1 werden, um die hohe Temperatur akustisch zu signalisieren.

Mein Problem: Wie kann ich den Soll - Ist - Vergleich programmtechnisch realisieren? Lt. Datenblatt Ds18B20 entsprechen folgende hex bzw. bin-Werte meinen gewählten Solltemperaturwerten:
1°C= 0001 0000 bin; 0010h;
60°C= 0011 1100 bin; 003Ch;
70°C= 0100 0110 bin; 0046h;

Im oberen Listing habe ich einen meiner Versuche, den Soll-Ist- Vergleich durchzuführen, mal rot dargestellt, doch der Erfolg blieb leider aus. Hast Du dazu einen Tipp?

Ich denke, wenn dieses funktioniert, können wir uns den nächsten Klops anschauen?:D Dann wird's übersichtlicher.

Schöne Grüße

Robin
 
Ich denke, wenn dieses funktioniert, können wir uns den nächsten Klops anschauen?

Hi Robin!

Stimmt! Wir sollten da schrittweise vorgehen, denn ich sehe da so einige "Klöppse" im Programmcode...... die ich nicht ganz verstehe. ;)
Aber dafür sind wir ja alle hier! :)


Ich habe persönlich den Temperatursensor DS 18B20 nocht nicht eingesetzt, sondern immer nur den "normalen" DS1820 bzw. DS18S20.

Der Unterschied liegt in der Auflösung (9bit - 12bit) des Sensors und der entsprechenden Berechnung der Temperatur im Programm.
Ich gehe einfach mal davon aus, dass du damit aber kein Problem mehr hast und du die richtige Temperatur angezeigt bekommst.

Nun verstehe ich dein Problem mit dem "Vergleichen" der Ist- und Sollwerte nicht ganz? :hmmmm:

Was hat der DS18B20 damit zu tun?
Ich habe das Gefühl, du denkst da im Moment einfach nur zu kompliziert! ;)

Wenn ich dein Programm richtig verstanden habe, dann kannst du deine Temperatur über die Variable T(1) anzeigen lassen.

Kurze Frage nebenbei..... Warum benutzt du so viele Arrays in deinem Programm? :hmmmm:
Dir ist schon klar, dass eine Variable mit einem nachfolgenden Klammerwert ein Array darstellt?

Nun aber erst mal weiter....
Mit T(1) hast du also nun deinen Istwert.
Jetzt musst du nur noch im Programm ein paar Variablen definieren, in denen dann deine Solltemperaturen stehen.
Zum Beispiel:
Frost (für < 1), DIM Frost As Single
Kalt (für < 60), DIM Kalt As Single
Warm (für > 70), DIM Warm As Single

Frost = 1
Kalt = 60
Warm = 70

(Von den Werten her kannst du die Variablen auch als Byte dimensionieren.....
Ich weiß nun aber nicht, ob es beim Vergleich der Werte: "Byte zu Single" ggf. Probleme gibt. Zumindest, solange du keine Kommazahlen vergleichen möchtest sollte es auch funktionieren.)


Im Programm vergleichst du dann ständig die Sollwerte mit den Istwerten deiner Sensoren.
Zum Beispiel:
If T(1) < Frost Then.....
bzw.
If T(1) < Kalt Then....
bzw.
If T(1) > Warm Then....

Du musst also nichts mit Hex oder Binär beachten und der DS18B20 hat damit auch nichts zu tun. ;)
Es werden lediglich die Variablen miteinander verglichen und dann etwas erledigt.... oder eben nicht. ;)


Das Problem mit deinem Programm ist nur, dass es keine Struktur hat und dir deswegen bestimmt nicht aufgefallen ist, dass es gar keine "Hauptarbeitsschleife" gibt. :confused:

Dein Programm landet nach relativ kurzer Zeit in diesen Bereich:
Code:
Do 
Call Temperatur 
Loop
und müsste dann dort permanent verweilen.

Wenn dies aber später mal die Hauptarbeitsschleife werden sollte, dann kannst du hier natürlich auch deine Soll-Ist-Vergleiche durchführen. ;)


War das jetzt erst einmal verständlich für dich?
Sonst einfach noch mal nachfragen.....
Ich habe auch noch zig Fragen zu deinem Programm, aber immer eins nach dem Anderen. :)

Gruß,
Cassio
 
Hallo Cassio und robin,
ich denke das robin schalttemperaturen über ein Menü einstellen mäschte, über das Display, wen ich das so richtig raus gehört habe, kann auch falsch sein ;)
Aber was mir komich vor kommt, das LCD ligt auf alle C. ADC ports, müssen die nicht für 1wire digitalmesungen auf ein ADC liegen ? zumindestens kenn ich das so.

Gruß micha
 
Hallo Micha!

Na, nun bring den Robin mal nicht durcheinander! ;)

Der 1Wire-Bus ist ein digitaler Bus und benötigt absolut keinen ADC!
Man kann jeden freien Port dafür benutzen!

Tja, ob Robin später auch einmal die Werte manuell ändern möchte weiß ich nicht, jedenfalls schrieb er jetzt etwas von fest vorgegebenen Werten.
Damit sollten die festen Variablen auch erst einmal ausreichen.

Gruß,
Cassio
 
Hallo Micha,

erst einmal vielen Dank für Deine Hilfsbereitschaft!:) Es gibt sehr viele Möglichkeiten zur Nutzung der mega8 µPs und Bascom eröffnet uns Anwendern wiederum unglaublich viele Möglichkeiten, diese programmtechnisch, auf vielfältiger Art und Weise zu erschließen. Viele Wege führen bekanntlich nach Rom, doch kann man nicht alle zur selben Zeit gehen; nacheinander, das macht Sinn. Dann findet man für sich sicherlich auch den besten heraus.:) Daher habe ich mir nun erst einmal einen Weg ausgewählt und versuche, in kleinen Schritten dieses "Neuland" zu betreten. Es ist ungeheuer wichtig, den Sinn der gewöhnungsbedürftigen Befehle, aber auch deren Zusammenhänge, unmissverständlich zu verstehen, damit Du sie später selbst auch sinnvoll einsetzen kannst. Sonst läuft man stets hinter Programmen her, die man nicht versteht und selbst nicht einmal zu ändern vermag.

Der Weg ist das Ziel und LCD auslesen zu können ist eine tolle Sache und interessiert mich auch wahnsinnig, doch das kommt, wenn die Zeit reif ist, also erst viel, viel später.

Vielleicht, wenn Du Interesse hast, begleitest Du diese Thematik; ich würde mich jedenfalls freuen!:cheers:

Schöne Grüße
Robin
 
Hallo Cassio,

vorab bitte ich erst einmal um Nachsicht, denn ich hatte in Deinem Nick versehentlich ein "s" eingespart, ?:adore: Kommt bestimmt nicht mehr vor!:)

Vielen Dank für Deine Tipps, sie waren hervorragend von Dir beschrieben worden, so dass ich sie sofort umsetzen konnte.:D Ich hatte mir das Leben mit dem Soll-Ist-Vergleich der Temperaturen aber wirklich sowas von schwer gemacht:stupid: Deine Änderungen hatte ich sofort eingebaut und es funktioniert alles tadellos; super!

Ja, ich hatte mich für den DS18 B 20 entschieden, weil ich anhand der Datenblätter festgestellt hatte, dass der B-Typ halt die Möglichkeit besitzt, die Temp. mit bis zu 12 bit auflösen zu können und für 0,97 € war es mir die Sache wert, bedenkt man, was ein LM335 kostet und welche analoge Mimick erforerlich ist, um das Dingen abgleichen zu können.

Hier nochmal das geänderte Programm:

Code:
$regfile "m8def.dat"
$crystal = 1000000
$hwstack = 82
$framesize = 68
$swstack = 68
        '


Initlcd
Cursor Off



Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32

Cls

Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4

[COLOR="Red"]Config Portd.7 = Output
Config Portd.6 = Output
Config Portd.5 = Output
Config Portb.0 = Output[/COLOR]


Config Portb.2 = Input
Config 1wire = Portb.2


Dim X As Byte


Dim Celsius As Integer

Dim T(8) As Single
[COLOR="Red"]Dim Ar1(8) As Byte                                          '1. 1wire
Dim Ar2(8) As Byte                                          '2. 1wire[/COLOR]

Dim Mini(8) As Single                                       'minimaler Temperaturwert
Dim Maxi(8) As Single                                       'maximaler Temperaturwert

Dim I As Byte
Dim W As Word

[COLOR="Red"]Dim Frost As Single                                         'Variable für den Soll-Abgleich <=1°C
Dim Kalt As Single                                          'Variable für den Soll-Abgleich >=60°C
Dim Warm As Single                                          'Variable für den Soll-Abgleich >=70°C

Frost = 22                                         [COLOR="Red"]auf leicht     kontrollierbare Temperaturen umgestellt[/COLOR]
Kalt = 24
Warm = 27
[/COLOR]
Dim Sp(12) As Byte                                          '12 bit Genauigkeit

Declare Sub Temperatur


Wait 1


If Err = 0 Then
Ar1(1) = 1wsearchfirst()                                    'Sensorabfrage
For I = 1 To 8
Next

End If


If Err = 0 Then                                             'Sensorabfrage
Ar2(1) = 1wsearchnext()
End If
For I = 1 To 8
                                                              '  beliebig erweiterbar


W = 1wirecount()
Locate 1 , 1
Lcd "Anzahl nutzbarer"
Locate 2 , 1
Lcd "Sensoren: " ; W                                        'Anzahl der Themperatursensoren werden angezeigt
Wait 3
Cls


Call Temperatur

Mini(1) = 999
Mini(2) = 999


Maxi(1) = 000
Maxi(2) = 000



[COLOR="RoyalBlue"]Do

Call Temperatur

Loop[/COLOR]




Sub Temperatur

    1wreset
    1wwrite &HCC
    1wwrite &H44

Waitms 300

Do
Sp(1) = 1wread(12)                                          '12-bit Genauigkeit

Waitus 200


If Err = 0 Then
    1wverify Ar1(1)
        1wwrite &HBE
        Sp(1) = 1wread(12)
        For I = 1 To 12

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16

        T(1) = Celsius
        T(1) = T(1) / 10


[COLOR="Red"]If T(1) < Frost Then
Portd.7 = 1
Else
Portd.7 = 0
End If[/COLOR]


        Lcd T(1)
    Locate 1 , 1
        Lcd "Aussen: " ; Fusing(t(1) , "#.#") ; Chr(0) ; "C   "

        If Mini(1) > T(1) Then Mini(1) = T(1)
        If Maxi(1) < T(1) Then Maxi(1) = T(1)


    Locate 3 , 1
        Lcd "Min:    " ; Fusing(mini(1) , "#.#") ; Chr(0) ; "C   "

    Locate 4 , 1
        Lcd "Max:    " ; Fusing(maxi(1) , "#.#") ; Chr(0) ; "C   "


1wreset

Wait 5


If W >= 2 Then
    1wverify Ar2(1)

        1wwrite &HBE

        Sp(1) = 1wread(12)



        For I = 1 To 8

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16
         Print Celsius
        T(2) = Celsius
        T(2) = T(2) / 10

[COLOR="Red"] If T(2) > Kalt Then
Portd.6 = 1
Else
Portd.6 = 0
End If

If T(2) > Warm Then
Portd.5 = 1
Else
Portd.5 = 0
End If[/COLOR]



        Lcd T(2)
  Locate 1 , 1
        Lcd "Innen: " ; Fusing(t(2) , "#.#") ; Chr(0) ; "C   "

        If Mini(2) > T(2) Then Mini(2) = T(2)
         If Maxi(2) < T(2) Then Maxi(2) = T(2)
  Locate 3 , 1
        Lcd "Min:   " ; Fusing(mini(2) , "#.#") ; Chr(0) ; "C   "
  Locate 4 , 1
        Lcd "Max:   " ; Fusing(maxi(2) , "#.#") ; Chr(0) ; "C   "



End If
       1wreset

       Wait 5

Next

End If

End Sub

Loop


Die Änderungen gegenüber des ersten Programms habe ich zur leichteren Erkennung rot gekennzeichnet. Die "If-Abfragen" hatte ich zuerst im "Hauptteil" - blaue Kennzeichnung - untergebracht, dort war aber die Signalisierung der Temp.-Änderung deutlich verzögert gegenüber der Temp.-Anzeige auf dem LCD. Danach habe ich die If-Abfragen verlagert und nun erfolgt die Signalisierung mittels LEDs synchron zum angezeigten Display-Wert.

Und da ich eh vorhabe, erst einmal großvolumige Massen zu messen ( Volumina einer Garage und eines Kaminheizkessels mit 150 Litern Wasserinhalt), ändern sich dort die Messwerte auch nicht abrupt.

Dann sprichst Du die fehlende Struktur des Programms an. Als Struktur würde ich nun die Bereiche bezeichnen, in denen die Ports, die Variablen und die Konstanten definiert werden. Dem schließt sich das Hauptprogrammteil an und den Schluss bilden dann die Subroutinen.

Ich denke, das wäre der nächste sinnvolle Schritt, der zu gehen wäre, natürlich nur, wenn es Deine Zeit erlaubt. Wie schon erwähnt, ist der Weg mein Ziel und ich freue mich riesig darüber, dass Du mir Stunden des Weitergrübelns mit Deinen absolut hilfreichen Tipps erspart hast! Nochmals vielen Dank dafür!

Schöne Grüße

Robin
 
Hallo Robin!

Auf Grund der fortgeschrittenen Stunde werde ich mir dein Programm später noch mal genau ansehen.

Freut mich aber, dass du schon einen Erfolg gehabt hast! :)

Grüße,
Cassio
 
Hallo Robin!

So, nur mal zwischendurch und auf die Schnelle, etwas zu deinem letzten Beitrag. ;)

Ja, ich hatte mich für den DS18 B 20 entschieden, weil ich anhand der Datenblätter festgestellt hatte, dass der B-Typ halt die Möglichkeit besitzt, die Temp. mit bis zu 12 bit auflösen zu können und für 0,97 € war es mir die Sache wert

OK, die Auflösung ist beim DS18 B 20 natürlich "höher", weil er die 12bit auch heraus geben kann.
Der DS18 S 20 hat aber auch eine 12bit Auflösung, was die Temperaturwandlung betrifft. Allerdings rundet er es auf 9bit "runter", damit er als Ersatz für den ganz alten DS1820 genommen werden kann.
Trotzdem ist mit dem DS18 S 20 auch eine Berechnung der Temperatur auf 0,1 (und weniger) möglich.

Wenn ich nun bedenke, dass der DS18 B 20 mit seinen 12bit eine Differenz von 0,0625 Grad C leisten kann und du damit nur die Garagentemperatur messen möchtest, dann ist er vielleicht ein wenig überdimensioniert. ;)
Ist aber letztlich egal.... bei dem günstigen Preis hätte ich wohl auch zugeschlagen. Für 97 Cent das Stück ist mir leider noch kein DS18S20 oder DS18B20 untergekommen.



Noch kurz zurück auf deinen Programmaufbau und der "Struktur".
Ich habe übrigens falsch geguckt... denn dein Programm bleibt NICHT hier stehen:
Code:
Do 
Call Temperatur 
Loop

Sondern durch "Call Temperatur" landet es natürlich in der Subroutine und bleibt dort in einer Do-Loop Schleife "hängen".
Code:
Do 
Sp(1) = 1wread(12) '12-bit Genauigkeit 
Waitus 200 
......
Next 
End If 
End Sub 
Loop
Darum hat es auch nicht funktioniert, wenn du den Soll-Ist-Vergleich oben in der ersten Do-Loop Schleife einsetzt. Dorthin kommt dein Programm nie mehr!

Darum musst du dein Programm auch noch mal konzeptionell ändern.

Vom Grundsatz her solltest du deine Programme immer so aufbauen:
-Rumpf mit Einstellungen und Initialisierungen
-Hauptarbeitesschleife (Do-Loop)
-Subroutinen (die kurz eine Arbeit verrichten und dann wieder verlassen werden)

Ich weiß wie schwer es ist, wenn man ein z. Zt. lauffähiges Programm hat und dies "zerlegen" muss.
Meist klappt dann nach dem Umbau gar nichts mehr und man ist gewillt, an der alten Struktur weiter zu arbeiten.
Allerdings gibt es mit der Zeit dann Probleme....

Versuch also mal dein Programm nach dem obigen Beispiel zu verändern.
Der Soll-Ist-Vergleich gehört also NICHT in die Sub für die Temperaturmessung. Dafür ist die Hauptarbeitsschleife da!
Die Temperaturermittlung und Berechnung kommt in eine Separate Sub, die dann nur intervallartig aufgerufen wird.

Du musst dir dann auch die zeitlichen "Prioritäten" überlegen....
Dein Display muss zum Beispiel nur aktualisiert werden, wenn sich etwas geändert hat (oder haben könnte). Sprich, nach jeder Ist-Temperaturermittlung muss die Anzeige auch aktualisiert werden. Sonst nicht.
Wenn du allerdings eine Uhr laufen lässt, dann muss das Display natürlich mindestens jede Sekunde aktualisiert werden. ;)

Du verstehst was ich meine?
Es ist also nicht zwingend notwenig z.B. immer das Display zu aktualisieren.... ob nun komplett, oder nur Teile davon.
Gleiches gilt für deine Temperaturmessung. Der DS18B20 braucht ja auch eine gewisse Zeit, um die Messung und Wandlung durchzuführen (bis 750ms).
Du kannst also nicht alle 500ms einen neuen Wert erwarten. ;)
Frag sich sowieso, ob das für eine Garagentemperatur sinnvoll ist.
Vielleicht reicht ja auch alle 2Sekunden, oder alle 5Sekunden aus. Das musst du entscheiden!


So, dass soll es nun erst mal gewesen sein.
Danach geht es weiter.... ;)

Grüße,
Cassio
 
Hallo Cassio,

ui, ui, das ist hart, aber ich weiß nun, wo es klemmt! I'll do my best und melde mich danach wieder. Besten Dank!:)


Schöne Grüße

Robin
 
Hallo Cassio,

so, ich habe das Programm mal ausgemistet, umgestellt und - nahezu unglaublich: Es läuft noch und besser als zuvor. :dance3:

Die Vergleichsabfrage hatte ich zuerst in die Hauptschleife gelegt, doch dann signalisierten die LEDs bereits Temp.-Änderungen, obwohl die Anzeigewerte diese Werte noch gar nicht auswiesen. Nun habe ich diese Programmteile wieder an alter Stelle plaziert und die LEDs reagieren mit der Anzeigenänderung.

Hier wieder eine neue Variante des Programms:

Code:
'V1.3


$regfile "m8def.dat"
$crystal = 1000000
$hwstack = 82
$framesize = 68
$swstack = 68
        


Initlcd
Cursor Off



Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32

Cls

Config Lcdpin = Pin , Rs = Portc.5 , E = Portc.4 , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0
Config Lcd = 16 * 4
Config Lcdbus = 4
Config Portd.7 = Output
Config Portd.6 = Output
Config Portd.5 = Output
Config Portb.0 = Output
Config Portb.2 = Input
Config 1wire = Portb.2


Dim X As Byte
Dim Celsius As Integer

Dim T(8) As Single
Dim Ar1(8) As Single                                        '1. 1wire
Dim Ar2(8) As Single                                        '2. 1wire

Dim Mini(8) As Single                                       'minimaler Temperaturwert
Dim Maxi(8) As Single                                       'maximaler Temperaturwert

Dim I As Byte
Dim W As Word

Dim Frost As Single                                         'Variable für den Soll-Abgleich <=1°C
Dim Kalt As Single                                          'Variable für den Soll-Abgleich >=60°C
Dim Warm As Single                                          'Variable für den Soll-Abgleich >=70°C

Frost = 22
Kalt = 24
Warm = 27

Mini(1) = 999
Mini(2) = 999

Maxi(1) = 000
Maxi(2) = 000



Dim Sp(12) As Single                                        '12 bit Genauigkeit

Declare Sub Temperatur

[COLOR="Red"]W = 1wirecount()
Locate 1 , 1
Lcd "Anzahl nutzbarer"
Locate 2 , 1
Lcd "Sensoren: " ; W                                        'Anzahl der Themperatursensoren werden angezeigt
Wait 3
Cls[/COLOR]




[COLOR="Red"]Do[/COLOR]

If Err = 0 Then
Ar1(1) = 1wsearchfirst()                                    'Sensorabfrage
For I = 1 To 8
Next

End If


If Err = 0 Then                                             'Sensorabfrage
Ar2(1) = 1wsearchnext()
End If
For I = 1 To 8
                                                              '  beliebig erweiterbar



Call Temperatur

Loop




Sub Temperatur

    1wreset
    1wwrite &HCC
    1wwrite &H44

Waitms 300


Sp(1) = 1wread(12)                                          '12-bit Genauigkeit

Wait 1


If Err = 0 Then
    1wverify Ar1(1)
        1wwrite &HBE
        Sp(1) = 1wread(12)
        For I = 1 To 12

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16

        T(1) = Celsius
        T(1) = T(1) / 10


If T(1) < Frost Then
Portd.7 = 1
Else
Portd.7 = 0
End If


        Lcd T(1)
    Locate 1 , 1
        Lcd "Aussen: " ; Fusing(t(1) , "#.#") ; Chr(0) ; "C   "

        If Mini(1) > T(1) Then Mini(1) = T(1)
        If Maxi(1) < T(1) Then Maxi(1) = T(1)


    Locate 3 , 1
        Lcd "Min:    " ; Fusing(mini(1) , "#.#") ; Chr(0) ; "C   "

    Locate 4 , 1
        Lcd "Max:    " ; Fusing(maxi(1) , "#.#") ; Chr(0) ; "C   "


1wreset

Wait 5


If W >= 2 Then
    1wverify Ar2(1)

        1wwrite &HBE

        Sp(1) = 1wread(12)



        For I = 1 To 8

        Next


        Celsius = Makeint(sp(1) , Sp(2))
        Celsius = Celsius * 10
        Celsius = Celsius / 16
         Print Celsius
        T(2) = Celsius
        T(2) = T(2) / 10

 If T(2) > Kalt Then
Portd.6 = 1
Else
Portd.6 = 0
End If

If T(2) > Warm Then
Portd.5 = 1
Else
Portd.5 = 0
End If



        Lcd T(2)
  Locate 1 , 1
        Lcd "Innen: " ; Fusing(t(2) , "#.#") ; Chr(0) ; "C   "

        If Mini(2) > T(2) Then Mini(2) = T(2)
         If Maxi(2) < T(2) Then Maxi(2) = T(2)
  Locate 3 , 1
        Lcd "Min:   " ; Fusing(mini(2) , "#.#") ; Chr(0) ; "C   "
  Locate 4 , 1
        Lcd "Max:   " ; Fusing(maxi(2) , "#.#") ; Chr(0) ; "C   "



End If
       1wreset

       Wait 5

Next

End If

End Sub


Return


Schöne Grüße
Robin
 
Hallo zusammen,

OK, die Auflösung ist beim DS18 B 20 natürlich "höher", weil er die 12bit auch heraus geben kann.
Der DS18 S 20 hat aber auch eine 12bit Auflösung, was die Temperaturwandlung betrifft. Allerdings rundet er es auf 9bit "runter", damit er als Ersatz für den ganz alten DS1820 genommen werden kann.
Trotzdem ist mit dem DS18 S 20 auch eine Berechnung der Temperatur auf 0,1 (und weniger) möglich.

Wenn ich nun bedenke, dass der DS18 B 20 mit seinen 12bit eine Differenz von 0,0625 Grad C leisten kann und du damit nur die Garagentemperatur messen möchtest, dann ist er vielleicht ein wenig überdimensioniert. ;)
Ist aber letztlich egal.... bei dem günstigen Preis hätte ich wohl auch zugeschlagen. Für 97 Cent das Stück ist mir leider noch kein DS18S20 oder DS18B20 untergekommen.
also nach dem was mein Gedächtnis so hergibt sind die DS18x20 alle mit
0,5°C Toleranz. Darum ist es meiner Meinung nach relativ uninteressant ob
man nun 0,1 oder 0,00625°C Auflösung hat. Alles was unter 0,5°C Auflösung
ist muß man nachträglich kalibrieren damit was vernünftiges bei rauskommt.

Also warum dieses kleinkarierte ? :D

EDIT: ...
DS18B20 =>
±0.5°C Accuracy from -10°C to +85°C
Thermometer Resolution is User Selectable from 9 to 12 Bits
DS18S20 =>
±0.5°C Accuracy from -10°C to +85°C
9-Bit Thermometer Resolution
Was soll denn diese Diskussion über die Auflösung ? So ein Blödsinn :cool:

Gruß
Dino
 
Hallo dino,

wir führen doch keine Diskussion über die Auflösung der Sensoren. Ich hatte die Möglichkeit, DS1820 oder DS18 B 20 für den selben Preis, 0,97 €, kaufen zu können. Und daraufhin hatte ich die Datenblätter verglichen und festgestellt, dass der B-Typ eine wesentlich höhere Auflösung bietet und ihn deshalb gekauft, falls man mal diese hohe Auflösung anwenden will, ist es beim B-Typen jederzeit möglich. 1%ige Tol. ist aber doch auch ok!?;)

Schöne Grüße

Robin
 
also nach dem was mein Gedächtnis so hergibt sind die DS18x20 alle mit
0,5°C Toleranz.

Hi Dino !

Manchmal sollte man sich eben nicht nur auf sein Gedächtnis verlassen. ;)

Ich würde dir daher raten, die Datenblätter noch einmal genau anzusehen....
Mal schauen, ob du dann immer noch meinst:


Tipp: Wir haben von der Auflösung geschrieben und nicht von der Toleranz! ;)

Gruß,
Cassio :D
 
Hallo Cassio,

so, ich habe das Programm mal ausgemistet, umgestellt und - nahezu unglaublich: Es läuft noch und besser als zuvor. :dance3:

Hallo Robin!

Es freut mich, dass dein Programm immer noch läuft!

Allerdings musst du da doch noch mal ran.... ;)

Schau dir Programm doch noch mal in Ruhe an.
Es gibt so einige Prunkte, die ich noch nicht ganz verstehe.
Mal abgesehen, von deinen ganzen Variablen (ob die wirklich alle gebraucht werden), ist mir dies hier aufgefallen:
Code:
Do 
If Err = 0 Then 
Ar1(1) = 1wsearchfirst() 'Sensorabfrage 
[COLOR="Red"]For I = 1 To 8 
Next [/COLOR]
End If 

If Err = 0 Then 'Sensorabfrage 
Ar2(1) = 1wsearchnext() 
End If 
[COLOR="Red"]For I = 1 To 8 ' beliebig erweiterbar 
[/COLOR]
Call Temperatur 
Loop

Was soll die obere For-Next Schleife denn bewirken?
In der unteren For-Next Schleife gibt es gar kein Next, nur ein For I =....

Ich weiß, was du damit machen möchtest bzw. musst, aber so wird das nichts.
Außerdem müsstest du ja vor jeder Temp.-Messung den 1wire-Bus gar nicht scannen, um die IDs und die Anzahl der Sensoren zu bekommen. Würde das nicht einmal reichen, oder möchtest du die Sensoren später tatsächlich mit Steckverbindern ausrüsten?

Nun hast du zwar dein Programm etwas umgestellt, aber die Hauptarbeit wird immer noch in der Subroutine für die Temperaturermittlung erledigt! ;)


Du kannst es von mir aus auch gerne so lassen, aber wenn du magst und Lust hast dann bauen wir das Programm einfach blockweise um. :)

Gruß,
Cassio
 
Hallo zusammen,

wir führen doch keine Diskussion über die Auflösung der Sensoren. Ich hatte die Möglichkeit, DS1820 oder DS18 B 20 für den selben Preis, 0,97 €, kaufen zu können. Und daraufhin hatte ich die Datenblätter verglichen und festgestellt, dass der B-Typ eine wesentlich höhere Auflösung bietet und ihn deshalb gekauft, falls man mal diese hohe Auflösung anwenden will, ist es beim B-Typen jederzeit möglich. 1%ige Tol. ist aber doch auch ok!?;)

Manchmal sollte man sich eben nicht nur auf sein Gedächtnis verlassen. ;)

Ich würde dir daher raten, die Datenblätter noch einmal genau anzusehen....

Tipp: Wir haben von der Auflösung geschrieben und nicht von der Toleranz! ;)

ich hätte hinter dem "Blödsinn" wohl noch ein paar Smileys packen sollen :D ;)

@robin : OK für den selben Preis muß man da nicht überlegen :)
@cassio : Ich hab ja auch wegen der Auflösung geschrieben.

Bei 0,5°C Toleranz ist es relativ unwichtig ob man 0,1 oder kleinere Auflösungen
hat. Die Werte verschwinden ohne Kalibrierung im statistischen Rauschen ;)
Aber für den selben Preis ... was solls ;)

Wenn ich das mit dem selben Preis gelesen hätte dann hätte ich wohl garnix
geschrieben. Aber bei der Masse an Text hab ichs nur schnell überflogen :rolleyes:

Gruß
dino
 
Wenn ich ers nicht besser wüsste, würde ich sagen: Ihr zapft nebenbei ein bis fünf gute Pilsner...:p


Grüsse,

Michael
 
ich hätte hinter dem "Blödsinn" wohl noch ein paar Smileys packen sollen :D ;)

Hi Dino !

Och, ich denke mal, dass wir es auch so alle mit Humor genommen haben! ;)

@cassio : Ich hab ja auch wegen der Auflösung geschrieben.

Bei 0,5°C Toleranz ist es relativ unwichtig ob man 0,1 oder kleinere Auflösungen
hat.

Nun ja... Sieh es doch mal so:
Wenn die Toleranz 0,5°C beträgt, dann kann die reale Temperatur bis zu 0,5°C höher oder niedriger sein, als die Angezeigte.
Allerdings kommt es darauf an, WELCHEN Wert durch eine entsprechend hohe Auflösung ermittelt und dann übergeben wird. Je grober die Auflösung, desto größer der Fehler...... incl. Toleranz!

Wie aber schon gesagt..... Letztlich ist das alles egal, wenn ich eine Raumtemperatur messen möchte!
(Und dieser Raum nicht gerade ein Reinstlabor sein soll. ;) )



Wenn ich ers nicht besser wüsste, würde ich sagen: Ihr zapft nebenbei ein bis fünf gute Pilsner...

Hi Grandpa!

Nette Idee! Können wir drei ja bald genießen....... :)
Obwohl wir dann ja fahren müssen und ich eigentlich gar kein Bier trinke. ;)


Grüße an euch,
Cassio
 
Hi Cassio,

nun, probierst Du halt mal alkoholfreies Weizen. Lässt den Führerschein in deiner Brieftasche kleben...:D


Grüsse,

Michael
 

Ü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)