-         

Ergebnis 1 bis 3 von 3

Thema: Temperaturwert vom DS1821 in ein eeprom 24C64A

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    5

    Temperaturwert vom DS1821 in ein eeprom 24C64A

    Anzeige

    Einen schönen guten Tag,

    ich beschäftige mich seit 2 Wochen mit Bascom, der Demoversion, also ich kenne mich so gut wie gar nicht aus. Ich benutze zur Zeit Programmschnipsel und füge Sie zu einem Progamm zusammen. Was bis jetzt auch gut funktioniert.
    Das auslesen des DS1821 Temperatursensor funktioniert auf dem Display und ich kann die Werte auch auf ein Terminal Programm ausgeben.
    Nun würde ich gerne den Temperaturwert in einem 24C64A Seriell EEPROM alle halbe Stunde speichern und nach einer gewiesen Zeit per Knopfdruck auf den PC spielen.
    Mein Problem ist nun, vermutlich ganz einfach, ich möchte 12 Stunden lang alle 30 Minuten einen Wert speichern.

    ************************************************** ************
    $regfile = "m32def.dat" 'definieren des verwendeten Chips
    $crystal = 8000000 'Quarz 8MHz
    $baud = 9600

    Config 1wire = Portd.7 'DS1821 DQ an PD6


    Dim Ar As Byte 'Variablenname und Typ festlegen
    Dim Temperatur As Byte
    Dim Temperatur_lesen As Byte
    Dim A As Byte
    Dim B As Byte


    Do 'Beginn der Schleife
    1wreset 'Reset DS1821
    1wwrite &HEE 'starte Temperaturkonvertierung
    Waitms 100 'warte 100 Millisekunden
    1wreset 'Reset DS1821
    1wwrite &HAA 'DS1821 sende Daten an Atmel
    Ar = 1wread() 'lesen die empfangenen Daten
    1wwrite &H22 'stop Temperaturkonvertierung
    Temperatur = Ar 'Temperatur übergeben

    '---- schreibe in EEprom ----
    For A = 1 To 24 '12 Stunden alle 30 minuten
    'Adresse hochzählen
    I2cstart 'Start I2C
    I2cwbyte &HA0 'Sende Slave Adresse
    I2cwbyte 1 'Sende Speicheradresse High
    I2cwbyte A 'Sende Speicheradresse LOw
    I2cwbyte Temperatur 'Sende Wert
    I2cstop 'Stop I2C
    ' Waitms 500
    Next A

    '--- lesen vom EEprom ----
    For B = 1 To 24

    I2cstart 'Start I2C
    I2cwbyte &HA0 'sende Slave Adresse
    I2cwbyte 1 'sende Speicheradresse High
    I2cwbyte B 'sende Speicheradresse Low

    I2cstart 'Start I2C
    I2cwbyte &HA1 ' sende Slave Adresse +1 für schreiben
    I2crbyte Temperatur_lesen , Nack 'lese Adresse vom EEprom
    I2cstop 'Stop I2C
    Print "Temperatur: " ; Temperatur_lesen ; Chr(13)
    ' Waitms 500
    Next B

    Loop
    End

    ************************************************** *****
    Die For Schleife für die 30 minuten und den Taster zur übertragung habe ich noch nicht implementiert.

    Bei der Simulation bekomme ich immer den Wert 0 auch wenn ich z.B. der Temperatur einen Wert vorgebe z.B 30.
    Was mache ich falsch?


    Ich würde mich freuen wenn mir jemand weiter helfen könnte...
    Im voraus besten dank

    Timo

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    5
    Hallo,
    könnte mir vielleicht jemand helfen?!
    Wenn ich auslesen möchte, also Datenübertragen bekomme ich immer den wert 255 würde mich sehr freuen wenn mir jemand helfen würde.
    Mit freundlichen Grüßen




    $regfile = "m32def.dat" 'definieren des verwendeten Chips
    $crystal = 8000000 'Quarz 8MHz
    $baud = 9600


    '--------- Eeprom Anschlüße ------
    Config Sda = Portc.1 'SDA und SCL definieren
    Config Scl = Portc.0

    '--------- Temperatursensor DS1821 --------------

    Config 1wire = Porta.0 'DS1821 DQ an PD6


    '================================================= =============================


    Dim Ar As Byte 'Variablenname und Typ festlegen
    Dim Temperatur As Integer , Temperatur_lesen As Integer
    Dim I As Integer , Z As Integer
    Dim Adrcount As Word , H As Byte , L As Byte , Wert As Byte
    Dim Adrcount_lesen As Word , H_lesen As Byte , L_lesen As Byte


    Do

    '---- Temperatur Routine ----

    1wreset 'Reset DS1821
    1wwrite &HEE 'starte Temperaturkonvertierung
    Waitms 100 'warte 100 Millisekunden
    1wreset 'Reset DS1821
    1wwrite &HAA 'DS1821 sende Daten an Atmel
    Ar = 1wread() 'lesen die empfangenen Daten
    1wwrite &H22 'stop Temperaturkonvertierung
    Temperatur = Ar 'Temperatur übergeben



    '---- schreibe in EEprom ----
    H = High(adrcount)
    L = Adrcount
    I2cstart 'Start I2C
    I2cwbyte Adr
    I2cwbyte H 'Speicherstelle im Eeprom
    I2cwbyte L
    I2cwbyte Temperatur 'Sende Wert
    Print "Schreibe " ; Temperatur ; " Grad ins Eeprom"
    I2cstop 'Stop I2C

    If Adrcount < &H7FEB Then Adrcount = Adrcount + 1 Else Adrcount = 0 'Prüfen ob Speicher voll ist? Wenn nicht 1 hochzählen oder bei 0 wieder anfangen
    Gosub Zeitschleife


    Loop



    '---- Zeitschleife 30Min ----

    Zeitschleife:
    'ungefähr 1Min Zeitschleife
    For I = 0 To 59
    If Pina.1 = 1 Then
    Adrcount_lesen = &H0000
    Gosub Datenuebertragung 'Über RS232 Daten vom Eeprom ans Terminalprogramm senden
    End If
    Print "Warte 1 sec."
    Wait 1
    Next I
    Return



    '--- lesen vom EEprom bzw. Auslesen über RS232 aufs Teminal Programm ----

    Datenuebertragung:
    Schleife:
    If Adrcount > Adrcount_lesen Then

    H_lesen = High(adrcount_lesen)
    L_lesen = Adrcount_lesen
    I2cstart 'Start I2C
    I2cwbyte &HA0 'sende Slave Adresse
    I2cwbyte H_lesen 'sende Speicheradresse High
    I2cwbyte L_lesen 'sende Speicheradresse Low

    I2cstart 'Start I2C
    I2cwbyte &HA1 'sende Slave Adresse +1 für schreiben
    I2crbyte Temperatur_lesen , Nack 'lese Adresse vom EEprom
    I2cstop 'Stop I2C
    Waitms 10 'warte 10ms
    Print Temperatur_lesen ; " C"
    Print Chr(13)

    Adrcount_lesen = Adrcount_lesen + 1
    Gosub Schleife
    Else
    Print "Übertragung beendet"
    End If

    Return
    End

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.07.2007
    Beiträge
    5
    Nochmal ich.

    Fehler gefunden!



    Bei dem Bausatz war der 24C64A Pin 7 WP (Write Protect) auf 5 V fest verdrahtet. Deshalb konnte ich nichts reinschreiben bzw. ich bekam immer 255 heraus

    Schönes Wochenende

Berechtigungen

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