Forum: Mikrocontroller und Digitale Elektronik Temperatursteurung


von jäger123 (Gast)


Angehängte Dateien:

Lesenswert?

hallo
ich habe ein Projekt in der Schule wo ich bei erreichen einer bestimmten 
Temperatur ein Relais schalte, was auch gut funktioniert
allerdings habe ich nun eine Uhr über einen RTC.
Nun weiß ich nicht wie ich es programieren soll die UHR zu verstellen
hier der code:


$regfile = "m88def.dat"                                     ' 
Controllerauswahl
$crystal = 8000000 
'Quarzfrequenz
$baud = 9600                                                'Baudrate 
für RS232-Schnitstelle                                          '

'Pins (Port C und B) für LCD-Modul definieren
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , 
Db7 = Portc.0 , E = Portb.2 , Rs = Portb.1
Config Lcd = 16 * 1a                                        'LCD-Modul 
1x16
Deflcdchar 0 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32            'replace ? 
with number (0-7)

Cursor Off Noblink

Config Portd = Input

'Pins von Port D definieren
Config Portd.4 = Output 
'PinD.4=LED4, PinD.5=LED3, PinD.6=LED2, PinD.7=LED1

Const Adr_chip_w = &H90                                     'write 
Adresse Tempsensor
Const Adr_chip_r = &H91                                     'read 
Adresse Tempsensor
Const Uhr_schreiben = &HA0                                  'adresse uhr 
schreiben
Const Uhr_lesen = &HA1                                      'adresse uhr 
lesen

Dim Temp_low As Byte , Temp_high As Byte , Adr_chip As Byte
Dim Temp_dez As String * 2
Dim Temp_soll As Byte
Dim Sekunde As Byte , Minute As Byte , Stunde As Byte , Jahrtag As Byte 
, Wochentagmonat As Byte

Config Scl = Portc.5                                        'Pins für 
den I2C Bus festlegen
Config Sda = Portc.4

Relais Alias Portd.4

Cursor Off Noblink

Temp_soll = 25

Anfang:
   I2cstart                                                 'startet den 
I2C-Prozess
   I2cwbyte Adr_chip_w                                      'sendet die 
Adresse des MCP9801 und setzt das Schreibbit
   I2cwbyte 1                                               'sendet die 
Registeradresse des Controll-Byts zum MCP9801
   I2cwbyte 96                                              'sendet das 
Controll-Byte 0=9 Bit; 32=10 Bit; 64=11 Bit; 96=12 Bit
   I2cstop                                                  'stopt den 
I2C-Prozess

   I2cstart                                                 'startet den 
I2C-Prozess
   I2cwbyte Adr_chip_w                                      'sendet die 
Adresse des MCP9801 und setzt das Schreibbit
   I2cwbyte 0                                               'sendet die 
Registeradresse des Temperaturwertes zum MCP9801
   I2cstop                                                  'stopt den 
I2C-Prozess



   Do

   I2cstart                                                 'startet den 
I2C-Prozess
   I2cwbyte Adr_chip_r                                      'sendet die 
Adresse des MCP9801 und setzt das Lesebit
   I2crbyte Temp_high , Ack                                 'liest das 
High-Byte aus, Temperatur in Grad ohne Nachkommastellen
   I2crbyte Temp_low , Nack                                 'liest das 
Low-Byte aus
   I2cstop



   I2cstart
   I2cwbyte Uhr_schreiben
   I2cwbyte 2
   I2cstart
   I2cwbyte Uhr_lesen
   I2crbyte Sekunde , Ack                                   'eine stufe 
weiter = ack
   I2crbyte Minute , Ack
   I2crbyte Stunde , Ack
   I2crbyte Jahrtag , Ack
   I2crbyte Wochentagmonat , Nack
   I2cstop









   Rotate Temp_low , Right , 4                              'verschiebt 
um 4 stellen die adresse nach rechts




   Select Case Temp_low

   Case 0 : Temp_dez = "00"
   Case 1 : Temp_dez = "06"
   Case 2 : Temp_dez = "13"
   Case 3 : Temp_dez = "19"
   Case 4 : Temp_dez = "25"
   Case 5 : Temp_dez = "31"
   Case 6 : Temp_dez = "38"
   Case 7 : Temp_dez = "44"
   Case 8 : Temp_dez = "50"
   Case 9 : Temp_dez = "56"
   Case 10 : Temp_dez = "63"
   Case 11 : Temp_dez = "69"
   Case 12 : Temp_dez = "75"
   Case 13 : Temp_dez = "81"
   Case 14 : Temp_dez = "88"
   Case 15 : Temp_dez = "94"

End Select







Cursor Off Noblink
Cls

If Pind.0 = 0 Then
Cls
Lcd "Soll: " ; Temp_soll 'ausgabe Aufs Lcd -display "
Wait 2


Elseif Pind.1 = 0 Then
Incr Temp_soll
Cls
Lcd "+1    "
Wait 2


Elseif Pind.2 = 0 Then
Decr Temp_soll
Cls

Lcd "-1"
Wait 2

Elseif Pind.3 = 0 Then                                      'Uhrzeit'
Cls
Lcd " Time : " ; Bcd(stunde) ; ":" ; Bcd(minute) ; ":" ; Bcd(sekunde)
Wait 1
Cls
Else

Locate 1 , 1

Cls

Lcd "Temp.:" ; Temp_high ; "," ; Temp_dez ; Chr(0) ; "C "
Wait 1


End If


'Cls                                                         'löscht das 
LCD-Display
'Lcd "Temp.:" ; Temp_high ; "," ; Temp_dez ; Chr(0) ; "C "   'ausgabe 
aufs LCD-Display
'Wait 1                                                      'warte 1 
Sekunde




If Temp_high >= Temp_soll Then


Set Relais

Else

Reset Relais

End If

Loop



End

von Silvan K. (silvan) Benutzerseite


Lesenswert?

jäger123 schrieb:
> Nun weiß ich nicht wie ich es programieren soll die UHR zu verstellen

Aber auslesen kannst du sie, oder was?
Wenn du hier Hilfe erwartest solltest du vielleicht darüber nachdenken 
uns den Typ deiner RTC zu verraten (Vermutlich DS1307).

jäger123 schrieb:

jäger123 schrieb:
> I2cstart
>    I2cwbyte Uhr_schreiben
>    I2cwbyte 2
>    I2cstart
>    I2cwbyte Uhr_lesen
>    I2crbyte Sekunde , Ack                                   'eine stufe
> weiter = ack
>    I2crbyte Minute , Ack
>    I2crbyte Stunde , Ack
>    I2crbyte Jahrtag , Ack
>    I2crbyte Wochentagmonat , Nack
>    I2cstop

Statt "Uhr_lesen" vielleicht "Uhr_schreiben"??

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.