-
        

Ergebnis 1 bis 10 von 10

Thema: 143 grad im büro...ja super!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30

    143 grad im büro...ja super!

    Anzeige

    hallo
    und erstmal kompliment für das board.
    weil ich absoluter anfänger bin, habe ich mich tage durch die beiträge hier gelesen und schon gelernt

    ich habe den mega2560 und möchte den temperatur sensor ds1621 über ic2 ansprechen bzw. dessen daten auswerten.
    es gibt ja einige codebeispiele, wie man das in Bascom macht.
    bei mir kommt leider immer nur der wert null an, bzw andere, unsinnige werte
    leider zeigt er bei der zuletzt am besten funktionierenden codevariante sagenhafte 143 grad an.


    hier mein zusammengeschraubter code.

    was mir eigenlich fehlt, ist eine gut zu verstehende erklärung des befehlaufbaus in Bascom für i2c.
    muss der ic2master eingesetzt werden?

    Code:
    
    'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
    $prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    
    $crystal = 16000000                                         'Quarzfrequenz
    
    
    Config Pine.5 = Input
    USB Alias Pine.5                                            'Ist 1 wenn USB angeschlossen
    
    Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Open "com4:" For Binary As #4                               'USB Buchse
    
    '-------------------------------------------------------------------------------
    
    '$lib "I2C_TWI.LBX"                                          'Bibliothek einbinden
    '---------- I²C Einsatellungen ----------
    $lib "i2c_twi.lbx"                                          'Einbindung der I2C-Bibliothek (Hardware)
    'Config Twi = 100000                                         'i2c Frequenz einstellen
    
    '*** I2C Config ***
    Config Scl = Portd.0                                        'Ports an eigene Hardware anpassen!
    Config Sda = Portd.1
    'Config I2cdelay = 0
    I2cinit                                                     'entbehrlich
    '-------------------------------------------------------------------------------
    Declare Sub Readtemp(byval Device As Byte)
    Declare Sub Convertvalue_komma1()
    
    Dim Value As Word
    Dim Ton As Integer
    Dim Convert_strg As String * 10
    
    Const Ds1 = 142                                             'ggf. anpassen
    '----------------------------- Hauptprogramm -----------------------------------
    
    Do
    Call Readtemp(ds1)
    Call Convertvalue_komma1()
    Print #4 , Convert_strg
    Waitms 500
    Loop
    
    End
    
    '----------------------------- Subroutinen -------------------------------------
    
    'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
    'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
    
    Sub Readtemp(byval Device As Byte)
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    
    Deviceread = Device + 1
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE                                               'Temperaturmessung anstoßen
    I2cstop
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA                                               'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack                                      'LSByte holen (Ganze Grad)
    I2crbyte Hightemp , Nack                                    'MSByte holen (0,5 Grad Indikator)
    I2cstop
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    
    
    
    
    End Sub
    
    '-------------------------------------------------------------------------------
    'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
    'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
    'formatiert werden kann.
    'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
    
    Sub Convertvalue_komma1()
    
    Convert_strg = Str(value)
    Convert_strg = Format(convert_strg , " 0.0")
    
    End Sub
    '---------------------------------
    und diesen schaltplan habe ich für den ds1621 benutzt.
    http://www.avrprojects.net/img/DS162...ometer_sch.jpg

    habe alles gewissenhaft angeschlossen und weiss jetzt nicht mehr weiter.

    vielen dank im voraus für hinweise...)
    gruss, edgar

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    wie man mit einem AVR einen I2C-Master bekommt dazu hab ich (für Bascom) im Wiki ein paar Beispiele angelegt. Für eine entscheiden und alle nötigen Befehl ins Programm übernehmen, nicht alles mischen!

    Zum DS1621, der braucht zum messen einige Zeit, man darf(sollte) nicht gleich nach dem Messanstoss den Wert auslesen, da kommt max. der Wert von der letzten Messung zurück, oder -96° am Anfang !
    Temp. >125 gibts sowieso nicht, evtl. nochmal ins DB schauen wie der Wert zu wandlen ist.


    Hier hatte ich mal ein Beispiel dazu, musst nur das notwendige rausholen:
    http://www.roboternetz.de/phpBB2/zei...ag.php?t=26774

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30
    hi und danke für die erste hilfe...)

    so! ich glaube, der sensor ist am a....
    egal, welche der möglichkeiten ich wähle, den sensor zu starten, beim ersten byte, dass gesendet wird, kommt err=1.

    kann ich den ds1621 irgendwie testen ob der noch funktioniert?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    ich teste den mit genau diesem Programm,
    wenn alles richtig verkabelt ist, sollte es auch so tun wie es gewollt ist.
    Bei der ersten Messung kommt immer -96° raus, ausser man wartet noch etwas länger.

    Man könnte zB. messen ob im Ruhezustand die beiden I2C-Leitungen High sind, oder ob sich darauf was tut, wenn das Programm läuft,
    oder ob die Adressjumper und die Adresse im Prog zusammenpassen...

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30
    jumper habe ich keine eingesetzt.
    die drei a liegen auf gnd. käme also nur &h90/91 in frage.

    liege ich mit der schaltung eigentlich richtig?
    http://www.avrprojects.net/img/DS162...ometer_sch.jpg

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Mit dem Beispiel aus dem anderen Thread sollte es gehen,
    nur die Zeile mit der Lib entfernen, und die richtigen Pins beim I2C angeben, dann geht der Teil für den DS1621 schonmal.
    Die ganzen Prints aktivieren, dann kommt es an UART0 raus.

    Der Schaltplan stimmt schon so.

    Sonst kann man aus der Ferne erstmal nix genaueres sagen.

    Was hast Du für ein Board, wie lange sind die I2C-Leitungen ?
    Hast Du irgendein Messgerät, um am Bus zu messen ob sich da was tut ?

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30
    Zitat Zitat von linux_80
    Was hast Du für ein Board, wie lange sind die I2C-Leitungen ?
    Hast Du irgendein Messgerät, um am Bus zu messen ob sich da was tut ?
    board ist ein mega2560 und die leitungen von den ports zum ds1621 sind geschätzte 7cm kurz/lang.
    multimeter ist vorhanden

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    19.07.2004
    Ort
    Rickelrath
    Beiträge
    127
    Ich denke mit Board dürfte das Board im Sinne der Platine gemeint sein.
    Sprich ob du zB eine RN Controll verwendest STK oder eine selbst auf Lochraster oder Steckbrett aufgebaute Schaltung hast

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30
    achsooo...
    ist ein rn-mega.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    17.02.2008
    Beiträge
    30
    hallo,

    so, den sensor habe ich zum reden gebracht... =D>

    hier der funktionierende code
    Code:
    'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
    $prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    
    $crystal = 16000000                                         'Quarzfrequenz
    
    
    Config Pine.5 = Input
    USB Alias Pine.5                                            'Ist 1 wenn USB angeschlossen
    
    Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Open "com4:" For Binary As #4                               'USB Buchse
    
    '-------------------------------------------------------------------------------
    
    $lib "i2c_twi.lbx"                                          ' Für Hardware TWI
    
    Config Twi = 400000                                         ' Init TWBR und TWSR
    
    ' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
    Twcr = Twen
    
    Waitms 500
    
    Config Scl = Portd.0                                        ' Ports fuer IIC-Bus
    Config Sda = Portd.1
    
    'Config I2cdelay = 100                                       ' je höher der Wert umso langsamer der Bus
    ' 10 ergibt ca. 100kHz (sollte zumindest)
    
    I2cinit
    
    Const Ds1621w = &H90
    Const Ds1621r = &H91
    
    Dim Lowtemp As Byte
    Dim Hightemp As Byte
    
    
        ' Messen anstossen
        I2csend Ds1621w , &HEE
        I2cstart
        I2cwbyte Ds1621w
        I2cwbyte &HEE
        I2cstop
    
        If Err = 1 Then Print #4 , "I2C-Err11111 "
    
    Do
        ' der DS1621 braucht mind. 400ms zum Temperatur umwandeln !
        Waitms 500
        ' Wert auslesen
        I2cstart
        I2cwbyte Ds1621w
        I2cwbyte &HAA
        I2cstart
        I2cwbyte Ds1621r
        I2crbyte Lowtemp , Ack
        I2crbyte Hightemp , Nack
        I2cstop
    
        'Print #4 , "low1: " ; Lowtemp
        'Print #4 , "high1 :" ; Hightemp
    
        If Err = 0 Then
            ' Negativer Wert ?
            If Lowtemp.7 = 1 Then
                Lowtemp = Not Lowtemp
                If &H80 > Hightemp Then
                    Incr Lowtemp
                End If
               ' Print #4 , "-" ; Lowtemp.7
            Else
                'Print #4 , "+" ; Lowtemp.7
            End If
    
            Print #4 , "temp:" ; Lowtemp ; "," ;
    
            If Hightemp = &H80 Then
                Print #4 , "5"
            Else
                Print #4 , "0"
            End If
        Else
            Print #4 , "I2C-Err ! "
        End If
    
        Wait 60
    
    Loop
    
    
    End
    die temperaturmessungen werden im bascom-terminalfenster mit 0.5 grad genauigkeit angezeigt. da gibt es ja noch eine möglichkeit, die auflösung des temperaturwertes noch auf stellen hinter dem komma zu erhöhen.
    das habe ich bis jetzt aber leider noch nicht verstanden.
    ist aber nicht so schlimm, erstmal reichen die 0.5 grad.

    ich möchte nun gerne die temperaturwerte zur späteren auswertung speichern. in einer logdatei oder anders. wie muss ich da ansetzen?
    welche möglichkeiten gibt es, die vom chip erhaltenen daten zu speichern?

    vielen dank für eure hilfe.
    ciao, edgar

Berechtigungen

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