USB DS18B20 Temperatur-Sensor – Programmierung

Nun folgt die Programmierung des ATTINY damit der Sensor endlich in Betrieb gehen kann…

Ich habe schon vor vielen Jahren angefangen Programme für den PC in Basic (genauer Visual Basic) zu schreiben, damals war das noch nicht so verpöhnt wie heute. Also habe ich mich auch bei der Mikrocontroller-Programmierung dieser Programmiersprache in Form von Bascom bedient und bin bis heute sehr zufrieden damit.

Hier nun das Bascom Programm um den Sensor in Betrieb zu nehmen:

' USB-Temperatur Sensor C 2014 by Thomas Heldt
' Clckdiv/8 Fuse darf nicht gesetzt sein (off)
' Version 2015 für das Tutorial auf www.thomasheldt.de

' Der ATTINY25 wird genutzt
$regfile = "ATtiny25.dat"

' Interner 8 MHz Takt wird genutzt
$crystal = 8000000

$hwstack = 32
$swstack = 10
$framesize = 40

' Pins für Software UART Schnittstelle festlegen,
' Schnittstelle wird von BASCOM per Software realisiert

Open "comb.1:9600,8,n,1" For Output As #1
Open "comb.0:9600,8,n,1" For Input As #2

' Pin für 1 Wire Schnittstelle festlegen,
' Schnittstelle wird von BASCOM durch Software realisiert

Config 1wire = Portb.3

' Benötigte Variablen dimensionieren
Dim Ar(9) As Byte
Dim Temperatur As Integer
Dim Celsius as Single

' Wir warten kurz bis alles bereit ist
Waitms 500

' Startmeldung ausgeben, dient gleichzeitig zur
' Kontrolle ob die serielle Übertragung funktioniert

Print #1 , ""
Print #1 , "USB Temperatur-Sensor Version 2014"
Print #1 , " Tutorial auf www.heldt.eu"
Print #1 , ""
Print #1 , " Mikrocontroller: ATTINY25"
Print #1 , " Schnittstelle: FT232RL"
Print #1 , " Sensor: DS18B20+"
Print #1 , ""
Print #1 , "Starte Messung................"
print #1, ""

' Die Hauptschleife wird nie beendet
Do
  ' 1 Wire Bus reseten
  1wreset

  ' ROM übergehen, wir haben nur einen Sensor
  1wwrite &HCC

  ' Messung veranlassen
  1wwrite &H44

  ' Wir warten bis die Messung beendet wurde
  Waitms 1000

  ' 1 Wire Bus reseten
  1wreset

  ' ROM übergehen, wir haben nur einen Sensor
  1wwrite &HCC

  ' Daten einlesen Scratchpad (9 Byte)
  1wwrite &HBE

  ' und in ein Array schreiben
  Ar(1) = 1wread(9)

  ' Warten bis alle Daten übertragen wurden
  Waitms 1000

  ' Wenn Checksumme korrekt Daten verarbeiten
  If Ar(9) = Crc8(Ar(1) , 8) Then

    ' In Integer wandeln
    Temperatur = Makeint(Ar(1) , Ar(2))

    ' Jetzt bei 12 Bit Auflösung durch 16 teilen
    ' oder mit 0,0625 multiplizieren
    Celsius = Temperatur / 16

    ' Wert per Software UART versenden
    ' Wir nutzen * als Start- und # als Ende-Token
    Print #1 , "*" ; Celsius; "#"

    ' Wir warten eine Sekunde bis zur nächsten Messung,
    ' dies verhindert die Eigenerwärmung des Sensors
    Waitms 1000

  End If
Loop

End

 

Zum Download des Programmes hier klicken–> USB-TEMPERATUR-SENSOR-2015

Im folgenden gehe ich davon aus das man einen Programmer,
z.B. AVR ISP MK2 besitzt der unter Bascom bereits funktioniert.

Um den ATTINY auf der Platine zu programmieren müssen wir noch ein Adapterkabel bauen, dies geht sehr einfach mit einer 6 poligen Stiftleiste (Rastermaß 2,54mm) und einer Wannenbuchse die zum Stecker des Programmers passt.

Meist hat der Programmer einen 6 oder 10 poligen Stecker der wie folgt belegt ist:

6 Polig:

1 = MISO
2 = 5V
3 = SCK
4 = MOSI
5 = RESET
6 = GND

10 Polig:

1 = MOSI
2 = 5V
3 = FREI
4 = GND
5 = RESET
6 = GND
7 = SCK
8 = GND
9 = MISO
10= GND

Die Belegung der 6 poligen Buchse auf der USB Temperatur-Sensor Platine ist diese….

1 = 5V
2 = MOSI
3 = MISO
4 = SCK
5 = RESET
6 = GND

Jetzt lötet man sich einfach einen Adapter der die jeweiligen Signale des Programmiersteckers auf den passenden PIN der Steckerleiste legt und schon ist man fertig. Am besten eignet sich einfaches Flachbandkabel dafür. Für PIN 1 sollte man die farbige Ader nehmen damit man die Steckerleiste immer richtig aufsteckt.

Hat man den Adapter fertig kann man diesen mit der Platine verbinden, das Ganze sieht bei mir so aus:

USB-TEMP-SENSOR-PRG-KABEL USB DS18B20 Temperatur-Sensor - Programmierung

Damit unser ATTINY korrekt funktioniert müssen wir zuerst eine FUSE Einstellung ändern, im Auslieferungszustand ist die CLK/8 Fuse gesetzt, dies bedeutet der ATTINY läuft mit 8 MHz / 8 = 1 MHz.

Wir möchten aber das der ATTINY mit den vollen 8 MHz läuft.

Die Einstellung sieht in Bascom wie folgt aus:

USB-TEMP-SENSOR-FUSES-300x197 USB DS18B20 Temperatur-Sensor - Programmierung

Haben wir die Fuse korrekt gesetzt, übertragen wir das Programm in den ATTINY und können dann testen ob der Sensor Daten ausgibt. Ich nutze unter Windos 7 PUTTY als Terminalprogramm um mir die Seriellen Daten anzeigen zu lassen, folgendes erscheint dann bei einem Test wenn der Sensor korrekt funktioniert….

USB-TEMP-SENSOR-PUTTY-300x283 USB DS18B20 Temperatur-Sensor - Programmierung

Das sieht jetzt schon fast nach der Anzeige einer Temperatur aus. Wir werden im Client, den wir uns für Windows mit Hilfe der kostenlosen Visual Studio Express 2013 Version schreiben werden, den Wert korrekt formatieren und mit einer Nachkommastelle ausgeben.

Hier wird sich dann auch zeigen warum ich ein Start- und ein Ende-Token mit übertrage, dies wird die Erkennung des Anfangs und des Endes der Temperaturwerte erleichtern.

Als Vorgeschmack ein Bild des Clients….

USB-TEMP-SENSOR-WINDOWS-GUI-300x173 USB DS18B20 Temperatur-Sensor - Programmierung

Weiter geht es mit der Programmierung des Windows Clients…

Verlinke diesen Beitrag:

<a href="http://blog.thomasheldt.de/usb-temperatur-sensor-programmierung/">USB DS18B20 Temperatur-Sensor – Programmierung</a>

The following two tabs change content below.
c7282393508c6050f22643a7feb8fec6?s=80&r=g USB DS18B20 Temperatur-Sensor - Programmierung

Thomas H.

Als Betreiber dieses Blog versuche ich hier interessante Projekte und Tipps rund um die Elektronik zu bieten.
c7282393508c6050f22643a7feb8fec6?s=80&r=g USB DS18B20 Temperatur-Sensor - Programmierung

Neueste Artikel von Thomas H. (alle ansehen)

2 Gedanken zu „USB DS18B20 Temperatur-Sensor – Programmierung

    1. Thomas H. Beitragsautor

      Halo zzz,

      im Prinzip geht das schon man müsste nur den Code etwas abändern.
      Einfach mal nach Bascom und DS18(S)20 suchen und den Code den man findet mit meinem
      vergleichen 😉

      Viel Erfolg!

      Gruß
      Thomas

      Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.