Projekt Erfassen von Sensordaten

Lutze53

Neues Mitglied
26. Sep. 2011
83
0
0
Sprachen
Projekt: Erfassen 4 Temperaturen mit DS18S20

Hallöchen,

nachdem ich nun alles soweit zum Programmieren zum laufen gebracht habe, kann ich mich nun endlich mein kleines Projekt beginnen :)
Bin aber noch ein kleiner Anfänger was Programmieren angeht, aber denke mal das werde ich schon hinbekommen.

Hier ist auch gerade mein erste Problem.
Und zwar wollte ich ja 4 DS1820 ansprechen, die ich auf ein LCS anzeigen lassen möchte mit etwas zeitlich versatz.
Wenn man die jetzt alle der Reihe nach suchen lässt kann man sich ja die ID ausgeben lassen, was ich jetzt machen wollte ist jeden der ID einen Namen wie SenID1 zuzuweisen
und diesen in einen Array abspeichern lassen. Die Frage ist jetzt wie ich das anstellen soll da die ID ja schon in einem Array ist "Dim Dsid(8) As Byte" kann man das iwie machen das die gefundenen iwo in einem Array sind?

PS: Habe doch was gefunden :) Moment
 
Hallo Lutze!

Nun ja, es gibt mehrere Möglichkeiten ein Array "umzuspeichern".
Der einfachste Weg ist eine kleine For-Next Schleife.

Beispiel:
Code:
For I = 1 to 8
SenID1(I) = Dsid(I)
Next I

Dann könnest du dir noch die Speicherbereiche ausgeben lassen und diese in Neue kopieren (per ASM), aber das ist dann wohl doch eher etwas für Fortgeschrittene. :cool:

Was ich mich allerdings frage.....
Warum speicherst du die Sensor-ID`s beim Auslesen nicht gleich passend ab? :hmmmm:
Suchen und lesen musst du die verschiedenen ID`s doch sowieso, dann kannst du die doch auch gleich der Reihe nach in eigene Array`s abspeichern. ;)


Grüße,
Cassio
 
ja habe nach Suchen auch was gefunden und bissel probiert, aber ist noch nicht so das richtige :)
ist noch bissel konfus drin nicht wundern :)

Code:
'-------------------------------------------'
'     Mikrocontroller/Chip                  '
'-------------------------------------------'
$regfile = "m32def.dat"                                     'ATMEGA32 Registerdatei
$crystal = 8000000                                          'Externer Quarz 8Mhz
$hwstack = 40                                               'HardwareStack
$swstack = 16                                               'SoftwareStack
$framesize = 32                                             'Framesize
$baud = 9600                                                'Baudrate

'-------------------------------------------'
'     LCD Konfiguration                     '
'-------------------------------------------'
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
                 Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
Config Lcd = 16 * 2


'-------------------------------------------'
'     1Wire Konfiguration                   '
'-------------------------------------------'
Config 1wire = Porta.1


'-------------------------------------------'
'     Deklarationen                         '
'-------------------------------------------'
Declare Sub Initialisierung
Declare Sub Sensorsuche


'-------------------------------------------'
'     Variablen                             '
'-------------------------------------------'
Dim Id(8) As Byte                                           'Arrsy für die ID der DS18S20
Dim I As Byte

Dim Anzahl As Word

Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer



'-------------------------------------------'
'     Const                                 '
'-------------------------------------------'
Const Vers_1 = "Ver. HE.1.0.0"
Const Vers_2 = "28.12.2011"

Cls
Cursor Off
Locate 1 , 2
   Lcd Vers_1 : Print Vers_1
Locate 2 , 4
   Lcd Vers_2 : Print Vers_2
Wait 2




' Die Adresse meines DS1820 die ich vorher ermittelt habe
'Dsid(1) = &H10 : Dsid(2) = &H45 : Dsid(3) = &HA7 : Dsid(4) = &H4D : _
'Dsid(5) = &H02 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H43


'-------------------------------------------'
'     Main                                  '
'-------------------------------------------'
Cls
Cursor Off

Call Sensorsuche



Locate 1 , 1 : Lcd "Aktuelle Temp:" : Print "Aktuelle Temp:"

Do

 ' Alle angeschlossenen DS1820 zum Messen veranlassen
Call Initialisierung
' Den gewünschten Sensor auswählen
 1wverify Id(1)
 ' Kommando READ SCRATCHPAD
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
 T = Makeint(sc(1) , Sc(2))
 T = T * 50
 T = T - 25
 T1 = Sc(8) - Sc(7)
 T1 = T1 * 100
 T1 = T1 / Sc(8)
 T = T + T1
 T = T / 10

 Locate 2 , 1
 Lcd T + Chr(223) : Print T
 Else
 ' Wenn Fehler Scratchpad zur Kontrolle Hexadezimal ausgeben
 Locate 2 , 1
 ' Es passen nur 8 Byte auf das Display
 For I = 1 To 8
 Lcd Hex(sc(i)) : Print Hex(sc(i))
 Next
 End If
 ' Ausgabe alle 0,5 Sekunden
 Waitms 1000
Loop

End


'******************************************************************************'

'-------------------------------------------'
'     Subroutinen                   '
'-------------------------------------------'

' vorhandene DS1820 initialisieren
Sub Initialisierung
   1wreset                                                  ' Initialisierung
   1wwrite &HCC                                             ' Read ROM-Befehl
   1wwrite &H44                                             ' Temperaturmessung anstoßen
   Waitms 800                                               ' warten bis Messung fertig ca 750-800ms
End Sub


' Suche nach angeschlossenen Sensoren - DS18S20
Sub Sensorsuche


   Id(1) = 1wsearchfirst()

   ' Überprüfen ob überhaut ein Gerät vorhanden ist
   If Err = 0 Then
      Do
        ' Ausgabe der ID.
        Cls
        Locate 1 , 1
        For I = 1 To 8
            Lcd Hex(id(i)) ; : Print Hex(id(i));
        Next

        ' Nach weiteren Sensoren suchen
        Id(1) = 1wsearchnext()

      ' suchen, bis kein weiteres Gerät sich mehr meldet
      Loop Until Err = 1
   End If
   Wait 1

   ' Geräteanzahl zählen
   Anzahl = 1wirecount()

   Cls
   Locate 2 , 1
   Lcd "Gefunden: " + Anzahl : Print "Gefunden: " + Anzahl

End Sub
 
so nach bissel recherche zwecks Variablen und Arrays habe ich nochmal neu angefangen :)
es ist zwar noch nicht ganz so wie ich es haben möchte mit Raum-/Ortzuteilung, aber so geht es schon mal :)

Code:
'-------------------------------------------'
'     Mikrocontroller/Chip                  '
'-------------------------------------------'
$regfile = "m32def.dat"                                     'ATMEGA32 Registerdatei
$crystal = 8000000                                          'Externer Quarz 8Mhz
$hwstack = 40                                               'HardwareStack
$swstack = 16                                               'SoftwareStack
$framesize = 32                                             'Framesize
$baud = 9600                                                'Baudrate

'-------------------------------------------'
'     LCD Konfiguration                     '
'-------------------------------------------'
'Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , _
'                 Db7 = Portb.7 , E = Portb.0 , Rs = Portb.1
'Config Lcd = 16 * 2


'-------------------------------------------'
'     1Wire Konfiguration                   '
'-------------------------------------------'
Config 1wire = Porta.1


'-------------------------------------------'
'     Deklarationen                         '
'-------------------------------------------'
Declare Sub Sensorsuche()
Declare Sub Sensorinfo()

'-------------------------------------------'
'     Variablen                             '
'-------------------------------------------'
Dim I As Byte
Dim Ds_id(8) As Byte                                        'Array für die ID der DS18S20
Dim Id(16) As String * 16
Dim Anzahl As Word
Dim Sensor As Byte


'-------------------------------------------'
'     Main                                  '
'-------------------------------------------'
Call Sensorinfo()
Wait 1
Call Sensorsuche()
Wait 1
Call Sensorinfo()

Main:
Do
    nop
Loop

End


'******************************************************************************'

'-------------------------------------------'
'     Subroutinen                   '
'-------------------------------------------'

Sub Sensorsuche()
   1wreset
   Anzahl = 1wirecount()
   Ds_id(1) = 1wsearchfirst()
   For I = 1 To 8
      Id(1) = Id(1) + Hex(ds_id(i))
   Next I

   For Sensor = 2 To Anzahl
      Ds_id(1) = 1wsearchnext()
   For I = 1 To 8
      Id(sensor) = Id(sensor) + Hex(ds_id(i))
   Next
   Next Sensor
End Sub

Sub Sensorinfo()
   If Anzahl = 0 Then
   Print "Keine Sensoren gefunden, suche..."
   Exit Sub
   End If

   Print "Sensoren: " ; Anzahl
   For I = 1 To Anzahl
   Print "Sensor " ; I ; ": " ; Id(i)
   Next I
End Sub
 

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