- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: 4 Stück DS1820 auslesen und anzeigen mit BASCOM

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo seid ihr noch da?
    Ich fummle nun schon einige Stunden rum aber es funktioniert einfach nicht.
    DS1 und DS2 zeigen irgendwas an (85C+67C) DS3 und 4 sind 0.


    Code:
    $regfile = "m8def.dat"
    $crystal = 14745600           'Externes Quarz   14,7456 Mhz
    'Achtung: damit der ext. Quarz aktiv wird => die Fusebits entsprechend einstellen.
    'Extern Cristal , bei mir alle Bits = 111 111
    $baud = 9600
    
    '/// LCD- DISPLAY 4x20
    'LCD im 4Bit I/O Mode
    Config Lcd = 20 * 4
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4
    Config Lcdpin = Pin , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
    Cursor Off Noblink
    Cls
    
    ' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.5
    Config 1wire = Portc.5
    Dim Ds1820id(32) As Byte
    
    'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
    Ds1820id(1) = &H10            'Seriennummer 1. DS1820
    Ds1820id(2) = &H6A
    Ds1820id(3) = &HE8
    Ds1820id(4) = &H5F
    Ds1820id(5) = &H01
    Ds1820id(6) = &H08
    Ds1820id(7) = &H00
    Ds1820id(8) = &H8C
    
    Ds1820id(9) = &H10            'Seriennummer 2. DS1820
    Ds1820id(10) = &H8B
    Ds1820id(11) = &H23
    Ds1820id(12) = &H25
    Ds1820id(13) = &H01
    Ds1820id(14) = &H08
    Ds1820id(15) = &H00
    Ds1820id(16) = &H73
    
    Ds1820id(17) = &H10           'Seriennummer 3. DS1820
    Ds1820id(18) = &H7B
    Ds1820id(19) = &HD6
    Ds1820id(20) = &H60
    Ds1820id(21) = &H01
    Ds1820id(22) = &H08
    Ds1820id(23) = &H00
    Ds1820id(24) = &H14
    
    Ds1820id(25) = &H10           'Seriennummer 4. DS1820
    Ds1820id(26) = &H13
    Ds1820id(27) = &HFD
    Ds1820id(28) = &H5F
    Ds1820id(29) = &H01
    Ds1820id(30) = &H08
    Ds1820id(31) = &H00
    Ds1820id(32) = &H2C
    
    Dim Sc(32) As Byte            '????
    Dim T1 As Integer
    Dim T2 As Integer
    Dim T3 As Integer
    Dim T4 As Integer
    
    Dim I As Byte
    Dim Id As Byte
    Cls                           ' Clear LCD
    
    Do
    'Alle angeschlossenen DS1820 zum Messen veranlassen
     1wreset                      '1Wire Reseten
     1wwrite &H55                 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
     1wwrite Ds1820id(i) , 8      '8 Byte ID wird uebertragen
    Waitus 200
    
    For Id = 1 To 25 Step 8       'ID für alle 4 DS1820 1,9,17,25
    1wreset                       '1Wire Reseten
    1wwrite &H55                  'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
    1wwrite Ds1820id(id) , 8      '8 Byte ID wird uebertragen
    1wwrite &HBE                  'READ SCATCHPAD => Liest alle Bytes des SP Memorys
    Sc(1) = 1wread(9)
    Next Id
    
    T1 = Makeint(sc(1) , Sc(2))   'komprimiert zwei Bytes in die Integervariable T
    T2 = Makeint(sc(9) , Sc(2))
    T3 = Makeint(sc(17) , Sc(2))
    T4 = Makeint(sc(25) , Sc(2))
    
    'Die Nachkommastelle entfernen
    T1 = T1 / 2
    T2 = T2 / 2
    T3 = T3 / 2
    T4 = T4 / 2
    
    'Temperatur in ganzen Grad ausgeben
      Locate 1 , 11
      Lcd "T1=" ; T1 ; " C"       ' Anzeige erfolgt so: T1=23 C
    
      Locate 2 , 11
      Lcd "T2=" ; T2 ; " C"       ' Anzeige erfolgt so: T1=23 C
    
      Locate 3 , 11
      Lcd "T3=" ; T3 ; " C"       ' Anzeige erfolgt so: T1=23 C
    
      Locate 4 , 11
      Lcd "T4=" ; T4 ; " C"       ' Anzeige erfolgt so: T1=23 C
    
    'Ausgabe alle 0,5 Sekunden
     Waitms 500
    Loop
    
    End



    Gruß
    Hans

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    45
    Beiträge
    689
    Du läufst beim einlesen der Daten zwar 4 mal duch die Schleife aber mit
    Code:
    Sc(1) = 1wread(9)
    schreibst Du die Daten immer auf die selbe stelle ( und überschreibst damit die ersten 3.)

    Code:
    Sc(id) = 1wread(9)
    So sollte es beser funzen.

    http://www.mcselec.com/index.php?opt...d=75&Itemid=57

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo,
    du startest ja gar keine Konvertierung der Temperatur.
    Die große Anzahl an Zuweisungen kannst du auch durch eine kleine Schleife ersetzen.
    Deine Sensor_Ids stehen jetzt am Ende, kannst du auch ins EEProm schreiben.

    Probier mal so:

    Code:
    $regfile = "m8def.dat"
    $crystal = 14745600           'Externes Quarz   14,7456 Mhz
    'Achtung: damit der ext. Quarz aktiv wird => die Fusebits entsprechend    einstellen.
    'Extern Cristal , bei mir alle Bits = 111 111
    $baud = 9600
    
    Match_rom Alias &H55
    Skip_rom Alias &HCC
    Read_scratchpad Alias &HBE
    Write_scratchpad Alias &H4E
    Copy_scratchpad Alias &H48
    Start_conversion Alias &H44
    
    ' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.5
    Config 1wire = Portc.5
    Dim Ds1820id(32) As Byte
    Dim Sc(9) As Byte                                           '????
    Dim T As Integer
    Dim I As Byte
    Dim Id As Byte
    
    '/// LCD- DISPLAY 4x20
    'LCD im 4Bit I/O Mode
    Config Lcd = 20 * 4
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4
    Config Lcdpin = Pin , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
    Cursor Off Noblink
    Cls
    
    
    'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
    Restore Sensor_ids
    For I = 1 To 32
       Read Ds1820id(i)
    Next I
    1wreset
    1wwrite Skip_rom
    1wwrite Start_conversion                                    'Alle angeschlossenen DS1820 zum Messen veranlassen
    Waitms 500                                               'Ausgabe alle 0,5 Sekunden
    Do
       For Id = 1 To 25 Step 8                                  'ID für alle 4 DS1820 1,9,17,25
          Incr I
          1wreset                       '1Wire Reseten
          1wwrite &H55                  'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
          1wwrite Ds1820id(id) , 8                              '8 Byte ID wird uebertragen
          1wwrite &HBE                  'READ SCATCHPAD => Liest alle Bytes des SP Memorys
          Sc(1) = 1wread(9)
          T = Makeint(sc(1) , Sc(2))                            'komprimiert zwei Bytes in die Integervariable T
          Shift T , Right                                       'Die Nachkommastelle entfernen
          Locate I , 11                                         'Temperatur in ganzen Grad ausgeben
          Lcd "T" ; I ; "=" ; T ; " C"                          ' Anzeige erfolgt so: T1=23 C
       Next Id
       I = 0
       1wreset
       1wwrite Skip_rom
       1wwrite Start_conversion                                    'Alle angeschlossenen DS1820 zum Messen veranlassen
       Waitms 500                                               'Ausgabe alle 0,5 Sekunden
    Loop
    
    End
    
    Sensor_ids:
    Data &H10 , &H6A , &HE8 , &H5F , &H01 , &H08 , &H00 , &H8C
    Data &H10 , &H8B , &H23 , &H25 , &H01 , &H08 , &H00 , &H73
    Data &H10 , &H7B , &HD6 , &H60 , &H01 , &H08 , &H00 , &H14
    Data &H10 , &H13 , &HFD , &H5F , &H01 , &H08 , &H00 , &H2C
    Kompiliert ok, ist aber nicht getestet, da ich deine Hardware nicht habe.
    Schau mal, ob du die Änderungen nachvollziehen kannst.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Mensch da tut sich ja endlich was. Ich krieg eine Anzeige von allen 4 DS1820.
    Danke erst mal!!
    Ich muss das erst mal blicken was du da gemacht hast. Das kann aber einige Zeit dauern.
    Ich melde mich wieder.
    Gruß
    Hans

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.08.2004
    Beiträge
    101
    Hallo,

    kann mir mal einer erklären, wie ich die Sensoren bei mir auslesen kann.
    Damit ich meine ID raufinden kann.

    Ich habe auch schon mehrere DS18S20 am laufen gehabt, bekomme jetzt immer nur 0Grad angezeigt.
    Orgendwie klappt das bei mir nicht mehr...
    Harman Kardon HTPC
    Bild hier  

  6. #16
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Hallo Papsi!
    Lade mal dieses Programm und pass es an.
    Das liest dir alle ID aus und zeigt sie am LCD an.

    Code:
    '///////////////////////////////////////////////////////////////////////////////
    ' Funktion:
    ' Liest die Adressen von angeschlossenen DS1820 aus und zeigt sie am LCD an.
    ' Mit jeweils 20s Pause dazwischen.
    '///////////////////////////////////////////////////////////////////////////////
    $regfile = "m8def.dat"
    $crystal = 14745600           'Externes Quarz   14,7456 Mhz
    'Achtung: damit der ext. Quarz aktiv wird => die Fusebits entsprechend einstellen.
    'Extern Cristal , Alle Bits = 111 111
    $baud = 9600
    
    '-------------------------------------------------------------------------------
    '/// Definitionen //////////////////////////////////////////////////////////////
    
    '/// LCD- DISPLAY 4x20
    'LCD im 4Bit I/O Mode
    Config Lcd = 20 * 4
    Config Lcdbus = 4
    Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4
    Config Lcdpin = Pin , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
    Cursor Off Noblink
    Cls
    
    'Pin für 1wire Schnittstelle festlegen
    Config 1wire = Portc.5
    
    Dim Dsid(8) As Byte           'Es werden mindestens 8Bytes für die ID benötigt
    Dim I As Byte                 'Für die Anzahl der Senseoren
    Dim Nr As Byte
    
    Nr = 1
    Cls
    
    Dsid(1) = 1wsearchfirst()
    
    Locate 1 , 1 : Lcd "DS1820 Nr " ; Nr : Nr = Nr + 1
    Locate 2 , 1
    For I = 1 To 8
     Lcd Hex(dsid(i))
    Next
    
    Wait 20  ' Das reicht zum abschreiben
    
    'Dsid(1) = 1wsearchnext()
    Do
     Dsid(1) = 1wsearchnext()
     'Wenn kein Fehler, dann ausgeben
    
     If Err = 0 Then
      Locate 1 , 1 : Lcd "DS1820 Nr " ; Nr : Nr = Nr + 1
      Locate 2 , 1
      For I = 1 To 8
       Lcd Hex(dsid(i))
      Next
      Wait 15
     End If
    Loop Until Err = 1
    
    
    Do
     Waitms 100
    Loop
    
    End

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.08.2004
    Beiträge
    101
    Hallo,

    habe ich probiert:

    kommt aber bei allen Sensoren 000000000000usw. raus.

    Angeklemmt habe ich die so:
    Bild hier  

    Der Mega32 ist in Grundbeschaltung mit 8Mhz ext. Quarz


    :EDIT
    Widerstand hinzugefügt...
    Harman Kardon HTPC
    Bild hier  

  8. #18
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.10.2004
    Ort
    Baoding
    Alter
    45
    Beiträge
    689
    Hast Du auch nen Pullup von 4,7k an DO? Ist zumindest in deiner Zeichnung nicht drinn.

  9. #19
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Mach einfach einen 4,7k Widerstand zwischen Pin2 und 3 rein, dann gehts!

  10. #20
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.08.2004
    Beiträge
    101
    Jetzt geht´s...
    Hat also nur der Widerstand gefehlt.
    Komisch, als ich das früher mal getestet habe, da lief es und ich habe den R nicht drin gehabt.


    Jetzt zeigt er mir:
    105D677101080025

    Habe nur ein 16-stelliges Display dran.
    Kann das alles sein?

    Und wie lasse ich mir jetzt die Temp. anzeigen?
    Harman Kardon HTPC
    Bild hier  

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests