USB Temperatur-Sensor - Test und ATTINY Programmierung
Wenn wir ALLE Lötstellen, vor allem die am FT232RL, genauestens auf Lötbrücken und kalte Lötstellen hin kontrolliert haben können wir die Platine testen. Ich habe die Tests an einem PC mit Windows 7 durchgeführt, es sollte aber im Allgemeinen immer so einfach laufen ;)


Verbindet man den USB Temperatur-Sensor mit einem USB Kabel mit dem PC wird ein neues Gerät erkannt.....
... dann werden die Treiber gesucht und automatisch installiert....



... nachdem der Treiber installiert wurde sieht man im Gerätemanager einen neuen COM-Port...
(Hier COM4, dieser kann aber abweichen)
... der erste Test ist damit erfolgreich abgeschlossen.


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 6 Pro.) 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 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 2014 für das Tutorial auf www.heldt.eu
' 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
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:

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:

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....

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....
