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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.