$regfile = "attiny4313.dat" ' Attiny4313 hat 4 Kb speicher
$baud = 9600
$crystal = 8000000 ' Quarz
$hwstack = 40
$swstack = 50
$framesize = 40
'$lib "mcsbyte.lbx" ----HIER NICHT MOEGLICH---- 'ergtibt einen schnelleren code aber NUR wenn Byte ausgeben werden sollen
Config 1wire = Portd.2 ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von BASCOM durch Software realisiert
Config Portb.5 = Output ' setze LED output --- Kontrolle das Main laeuft
Config Portb.6 = Output ' setze LED output --- Sende LED
Config Portb.7 = Output ' setze LED output --- Error LED
Config Input1 = Crlf , Echo = Lf ' cr noch nicht nehmen hängt sofort
echo off
Dim Ar(8) As Byte ' Array für SerienNr.
Dim Scp(9) As Byte ' Array für Scratchpack
Dim Step_one As Byte
Dim Eingabe As String * 11
Dim Temp As Integer ' besteht aus 16 Bit und kann Ganzzahlen von -32768 bis +32767 enthalten
Dim T1 As Integer
Dim Celsius As Single ' fuer die Kommastelle (braucht viel Speicher)
Dim I As Byte ' besteht aus 8 Bit und kann Ganzzahlen von 0 bis 255 enthalten
Dim W As Word ' besteht aus 16 Bit und kann Ganzzahlen von 0 bis 65535 enthlten
On Urxc Onrxd ' Unterprogramm für RS232 Empfang angeben mit dem name Onrxd
Enable Urxc ' Interrupt URXC einschalten
Enable Interrupts ' Interrupts global zulassen (allgemein)
Main:
Do
Print Len(eingabe)
If Len(eingabe) > 0 Then
Print "im if"
Select Case Eingabe
Case "Test":
Print "vor Gosub Test1"
Gosub Test1
Case "Test2":
Gosub Test2
Case "Temperatur"
Print "vor gosub Temp"
Gosub Read_sensor
Case Else
Print "Eingabe nicht erkannt"
Eingabe = ""
End Select
Eingabe = ""
End If
Print "testzeile"
Toggle Portb.5 ' LED wechseln um verlauf programm zu sehen
Waitms 1000
Loop
Test1:
Print "geschaft_test1"
Eingabe = ""
Return
Test2:
Print "geschaft_Test2"
Eingabe = ""
Return
Onrxd:
Input Eingabe
Return
Read_sensor: ' Unteroutine Read_sensor
Set Portb.6
1wreset ' Resete den !-wirebus
Waitms 1000
W = 1wirecount() ' Anzahl der gefundener Sensoren
Waitms 500
Ar(1) = 1wsearchfirst()
Print "1-Wirebus" ' suche den ersten Sensor und speicher in Ar(1)
If Err = 0 Then ' Sensor vorhanden ? wenn ja dann ausfuehren
Do
Print Hex(ar(1)) ; "_"; ' setzte erstes Feld ab...daran erkennt man welcher Fuehler 10=temperatur
For I = 2 To 8
Print Hex(ar(i)); ' Ausgabe der SerienNr.
Next
Gosub Messen
Ar(1) = 1wsearchnext() ' Nach weiterem Gerät suchen
Loop Until Err = 1 ' solange bis sich kein weiterer Sensor mehr meldet.
Print "Anzahl=" ; W ; ";" ' Ender der Uebertragung mit Angabe der Stückzahl
Print "beendet;"
End If
Reset Portb.6
Eingabe = ""
Return
Messen:
1wverify Ar(1) ' Gerät mit der SerienNr. aus Ar() auswählen
If Err = 0 Then ' Gerät vorhanden
1wwrite &H44 ' Temperaturmessung anstoßen
Waitms 1000 ' warten bis Messung fertig
1wverify Ar(1) ' Gerät mit der SerienNr. aus Ar() auswählen
1wwrite &HBE ' Temperatur auslesen
Scp(1) = 1wread(9) ' Daten in ein Array lesen (sp1 Temperatur / sp2 ob plus oder minus)
Temp = Makeint(scp(1) , Scp(2)) ' Berechung auf eine Kommastelle in 0.1 schritten
Temp = Temp * 50 ' " "
Temp = Temp - 25 ' " "
T1 = Scp(8) - Scp(7) ' " "
T1 = T1 * 100 ' " "
T1 = T1 / Scp(8) ' " "
Temp = Temp + T1 ' " "
Temp = Temp / 10 ' Kuerze um eine Stelle
Celsius = Temp / 10 ' Setze Kommastelle
Print "=" ; Fusing(celsius , "##.#") ; ";" ' Druck temperatur
Else
Gosub Error ' Error wenn Geraet nicht gelesen werden kann
End If
Wait 1
Return
Error:
Set Portb.7
Print "error"
Wait 1
Reset Portb.7
Return