-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: DS 1820 Bascom spricht nicht mit mir

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138

    DS 1820 Bascom spricht nicht mit mir

    Anzeige

    Hi,

    ich habe heute mal den 1 wire baustein ds 1820 testen wollen doch irgendwie will er nich mit mir reden aber ich bin mir ziemlich sicher das ich nichts falsch mache. der sensor steck auf einem steckbrett, bekommt 5V und hat den benötigten widerstand. jedoch macht er keinen mucks kann mir jemand helfen.
    hier mal den zusammen geschnipselten code:

    Code:
    $regfile = "m8def.dat"
    $crystal = 4000000
    $baud = 19200
    
      Config 1wire = Portb.0                                    'daten port
    
    Const Ds1820 = &H10                                         'daten des 1w devices
    Const Skiprom = &HCC
    Const Read_rom = &H33
    Const Convertt = &H44
    Const Read_ram = &HBE
    Const Write_ram = &H4E
    Const Copy_ram = &H48
    Const Recall_ee = &HB8
    Const Read_power = &HB4
    
             Dim Family_code As Byte                            'daten variabeln die gelesen werden
             Dim Serial_number(6) As Byte
             Dim Crc As Byte
             Dim Scratch(9) As Byte
    
    Dim I As Byte                                               'temperatur variabeln
    Dim Temp As Word
    Dim Temp1 As Integer
    Dim Stemp As Single
    
    
    
    
    
    
    
    Do
    
       1wreset
       If Err = 1 Then
       Print "DS 1820 Error"                                    ' prüfe ob ds1820 angeschlossen
    
       1wwrite Read_rom                                         'nur wenn 1 ds am bus man braucht kein 1wsearch wenn 1 am bus
    
       Family_code = 1wread()                                   'lese familie aus
       For I = 1 To 6
           Serial_number(i) = 1wread()                          'lese name aus
       Next
       Crc = 1wread()                                           ' lese check summe aus
       If Family_code <> Ds1820 Then                            'vergleiche familie mit daten über ds1820
       Exit Do
    
       1wwrite Convertt                                         'initialiesiere temperaturmessung
        Do
        Temp = 1wread()                                         ' lese Temperatur in temp
        Loop Until Temp = &HFF                                  'verlase wenn temp = FF
    
         1wreset                                                'reset 1w device
         If Err = 1 Then
    
                                                                 ' prüfe ob ds1820 angeschlossen
         Print " DS 1820 Error"
    
          1wwrite Skiprom                                       ' starte: alle ds am bus senden Temperatur
          1wwrite Read_ram                                      ' starte: lese scart pad
    
          For I = 1 To 9
              Scratch(i) = 1wread()                             'speichere daten in scratch * 9
              Next
    
              Temp = Scratch(2)                                 ' temp ist 1+2 byte von scratch
              Shift Temp , Left , 8                             ' lese linke 8 von temp
    
               Temp = Temp + Scratch(1)                         'rechne temperatur aus counts
               Temp1 = Temp
    
               Print "Der Temperaturwert ist: " ; Temp ; "Counts."       'sende temp als wert
               Temp1 = Temp1 / 2
    
               Print "Die gemessen Temp.ist" ; Temp1 ; "Grad"   'sende temp als grad
                Stemp = Scratch(8) - Scratch(7)
                Stemp = Stemp / Scratch(8)                      'bestimme endgültige temperatur
                Stemp = Stemp + Temp1
                Stemp = Stemp - 0.25
    
    
                 Print Fusing(stemp , "#.##");                  'sende temperatur mit komma
    
                 Wait 2
               Loop
    
               Print "Kein Sensor aktiv"                        ' kein sensor momentan aktiv
               End If
               End If
               End If
               End
    man muss nicht so auf die kommerntare sehen die habe ich mir bei meiner verzweifelten fehlersuche rein gebaut. ausserdem mag das prog vieleicht für den anfang etwas komisch sein.
    nun woran liegt es vileicht an der verbindung was ich nicht glaube oder am prog.

    mfg m.r.

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Bleibst du schon beim "ERR=1" nach dem 1wreset hängen ? Oder wo steigst du aus ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    Genau da. er gibt mi r über RS232 denn error und dan am ende des codes noch das er nichts gefunden hat woran liegt das was ist da falsch.

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Um was Gescheites zu sagen, muß ich mir erst rausklamüsern, welche bedingung beim "RESET" eigentlich einen ERR setzen kann. Das kann ich aber erst morgen, wie ich hoffe.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    So. Beim reset wird in einem bestimmten Timing überprüft, ob sich auf dem 1Wire-Bus ein Gerät befindet.
    Master: Bus Low
    Warten 1
    Master: Bus High -> auf Input
    Warten 2
    Master: Bus LOw ? -> OK1
    Warten 2
    Master: Bus High ? -> OK2
    in anderen Fällen--> ERR=1

    d.h. entweder is was mit der Hardware (Pullup ?)
    oder das Timing stimmt nicht ---> $Crystal= ? / Fuses
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    also wenn der 1w restet wird fragt der controller in einer bestimmten zeit ob sich jemand meldet oder.
    mein pullup geht vom daten pin auf +5V und meine fuses sind auf high frequenze eingestellt.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    die fuses sind auf : cksel=1111 sut =10 für 4 mhz stimmt doch oder.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    45
    Beiträge
    97
    Hi,
    hier mal mein Code. Ist ein 1920 im Dreileiter-Mode (kein parasite power) und funktioniert prima. Vielleicht hilft's ja .

    Code:
    'ds_1920_2_16X4.bas
    'DS1920 Temperaturmessung
    
    $regfile = "m16def.dat"
    $hwstack = 32
    $swstack = 8
    $framesize = 24
    $crystal = 8000000
    $baud = 9600
    
    Config 1wire = Portb.0
    Config Lcd = 27 * 4
    Config Lcdpin = Pin , Db4 = Porta.2 , Db5 = Porta.3 , Db6 = Porta.4 , Db7 = Porta.5 , E = Porta.1 , Rs = Porta.0
    Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            'Grad Zeichen Chr(0)
    Config Portd.2 = Input                'Taster für Hintergrundbeleuchtung
    Config Porta.6 = Output              'LED-Hintergrundbeleuchtung
    
    'Const Parasitpower = 1
    
    Const Ds1920 = &H10
    
    Const Skiprom = &HCC
    Const Read_rom = &H33
    Const Convertt = &H44
    Const Read_ram = &HBE
    Const Write_ram = &H4E
    Const Copy_ram = &H48
    Const Recall_ee = &HB8
    Const Read_power = &HB4
    
    Dim Family_code As Byte
    Dim Serial_number(6) As Byte
    Dim Crc As Byte
    Dim Scratch(9) As Byte
    
    Dim I As Byte
    Dim Temp As Word
    Dim Temp1 As Integer
    Dim Stemp As Single
    Dim Mint As Single
    Dim Maxt As Single
    
    Mint = 200
    Do
       1wreset
       If Err = 1 Then Print "iButton Error"
       1wwrite Read_rom
       Family_code = 1wread()
       For I = 1 To 6
          Serial_number(i) = 1wread()
       Next
       Crc = 1wread()
       If Family_code <> Ds1920 Then Exit Do
       1wwrite Convertt
       #if Parasitpower
          Wait 2
       #else
          Do
             Temp = 1wread()
          Loop Until Temp = &HFF
       #endif
    
       1wreset
       If Err = 1 Then Print "iButton Error"
       1wwrite Skiprom
       1wwrite Read_ram
    
       For I = 1 To 9
          Scratch(i) = 1wread()
       Next
    
       Temp = Scratch(2)
       Shift Temp , Left , 8
       Temp = Temp + Scratch(1)
       Temp1 = Temp
       Print "Der Temperaturwert ist " ; Temp ; " Counts."
       Temp1 = Temp1 / 2
       Print "Die gemessene Temperatur ist " ; Temp1 ; " Grad Celsius"
       Stemp = Scratch(8) - Scratch(7)
       Stemp = Stemp / Scratch(8)
       Stemp = Stemp + Temp1
       Stemp = Stemp - 0.25
       Print "Die exakt gemessene Temperatur ist ";
       Print Fusing(stemp , "#.##");
       Print " Grad Celsius"
       If Maxt < Stemp Then
          Maxt = Stemp
          End If
       If Mint > Stemp Then
          Mint = Stemp
          End If
       Cls
       Cursor Off
       If Pind.2 = 1 Then Toggle Porta.6
    
       Upperline
       Lcd "T-Ist: " ; Fusing(stemp , "#.#") ; Chr(0) ; "C"
       Thirdline
       Lcd "min: " ; Fusing(mint , "#.#")
       Fourthline
       Lcd "max: " ; Fusing(maxt , "#.#")
       'Wait 2
    Loop
    
    Print "kein Temperatursensor kontaktiert"
    
    End
    Die LCD-Zeilen kannst ja rausnehmen.
    Gruß, Berni.
    www.befi-tec.de

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.03.2006
    Beiträge
    138
    leider hat dein prog auch nicht gefunkt. ich habe meine ansprüche an den ds nun einmal veringert und will mich jetzt nur mal mit dem command read_rom beschäftigen. ich bertreibe den AVR ja auf dem stk500 und den ds exta auf einem steckbrett. muss ich da irgend was ausser die datenleitung verbinden. und andere frage woran erkenne ich bei avrs (und vielleicht pics) wo die datenleitung für den 1wire ist????????????

    melde mich wieder wenn ich einwenig weiter bin mit dem kommischen 1w.

    mfg

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    27.02.2006
    Ort
    Gessertshausen
    Alter
    45
    Beiträge
    97
    muss ich da irgend was ausser die datenleitung verbinden
    Also ich habe die ds1820 im Normalmode laufen, sprich 3-Leiter Kabel (+5V / Data / Gnd ). Damit die Datenübertragung aber richtig funktioniert, mußt du +5V und Data mit einem 5kOhm Widerstand verbinden. Sonst geht schon mal gar nix.

    woran erkenne ich bei avrs (und vielleicht pics) wo die datenleitung für den 1wire ist?
    Bei Pic's weiß ich's jetzt nicht, aber bei avr's kannst du jeden Port mit dem Kommando:
    Config 1wire = Portb.0
    zum 1w-Port machen . Den mußt du natürlich auf deinen Portpin korrigieren (außer, du hast den 1820 natürlich an Portb.0 angeschlossen). Jetzt sollte es klappen (zumindest funzts so bei mir).
    Gruß, Berni.
    www.befi-tec.de

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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