Hallo Forum,
ich bastel gerade an dem Quellcode für meine Röhrenuhr.
Dieser sieht vor, dass der Prozessor sich nach dem abarbeiten des Hauptprogrammes schlafen legt.
Ich nutze bisher diesen Code:
Wenn ich diese Zeile hier verwende:Code:'Mikrocontroller $regfile = "m32def.dat" $crystal = 16000000 'Stackgröße festlegen $hwstack = 200 $swstack = 200 'UART konfigurieren $baud = 19200 'TWI konfigurieren Config Sda = Portc.1 Config Scl = Portc.0 Config Twi = 100000 'TWI Frequenz 'Interrups konfigurieren Config Int0 = Falling 'DCF Modul konfigurieren Config Dcf77 = Pind.2 , Timer = 1 , Timer1sec = 1 , Debug = 1 'Unterprogramme Declare Sub Uhrzeit Declare Sub Read_dcf 'Ports konfigurieren Config Portb = Output Portb = 0 'Variablen 'RTC Dim Sekunde As Byte Dim Minute As Byte Dim Stunde As Byte Dim Wochentag As Byte Dim Tag As Byte Dim Monat As Byte Dim Jahr As Integer Dim Ds1307w As Byte Dim Ds1307r As Byte 'Interrupt Dim Interruptflag As Byte 'Adresse der DS1307 Ds1307w = &HD0 'Schreibadresse der RTC Ds1307r = &HD1 'Leseadresse der RTC 'Interrups aktivieren Enable Interrupts Enable Int0 On Int0 Read_rtc Do If Interruptflag = 1 Then Uhrzeit Portb = Sekunde Interruptflag = 0 End If Config Powermode = Powerdown Loop End '------------------------------------------------------------------------------ Sub Uhrzeit I2cstart 'TWI Start I2cwbyte Ds1307w 'Übergabe der Slaveadresse I2cwbyte 0 'Registerzähler wird auf null gesetzt I2cstart 'Zweite Startkondition I2cwbyte Ds1307r 'Übergabe der Leseadresse I2crbyte Sekunde , Ack 'Auslesen des Sekundenregisters I2crbyte Minute , Ack 'Auslesen des Minutenregisters I2crbyte Stunde , Ack 'Auslesen des Stundenregisters I2crbyte Wochentag , Ack I2crbyte Tag , Ack 'Auslesen des Tagesregisters I2crbyte Monat , Ack 'Auslesen des Monatsregisters I2crbyte Jahr , Nack 'Auslesen des Jahresregisters I2cstop 'TWI Stoppkondition End Sub '------------------------------------------------------------------------------ Sub Read_dcf End Sub '------------------------------------------------------------------------------ Read_rtc: Interruptflag = 1 Return '------------------------------------------------------------------------------
Config Powermode = Idle
dann funktioniert das Programm einwandfrei. Der Controller legt sich schlafen und bei einer fallende Flanke am INT0 wird der Controller geweckt und ließt die RTC aus und gibt die Anzahl der Sekunden auf zwei Röhren wieder.
Wenn ich nun aber die Zeile auf
Config Powermode = Powerdown
umändere passiert gar nichts mehr. Die beiden Röhren zeigen 00 an. Laut Beschreibung in der Bascomhilfe soll ein externer Interrupt an INT0 oder INT1 den Controller wieder wecken. Mit dem Oszi hab ich schon geguckt. Der SQW-Pin von der RTC ändert weiterhin seinen Pegel, aber die Röhren zeigen nichts an.
Oder löscht dieser Powerdown-Modus auch das Bitmuster an den verschiedenen Ports, sodass an den Ports immer 0x00 steht?
Als Mikrocontrollerboard nutze ich das RN-Control.







Zitieren

Lesezeichen