Timo_AVR
15.07.2007, 18:09
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
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