- Labornetzteil AliExpress         
Ergebnis 1 bis 2 von 2

Thema: DS1302 RealTimeClock - 1 Bit fehlt

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201

    DS1302 RealTimeClock - 1 Bit fehlt

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,

    ich versuche gerade den DS1302 ein paar Sekunden zu entlocken.DS1302.pdf


    Befehle schreibe ich so (funktioniert):
    Code:
    Settime:
    
     Config Rtc_in = Output
     Set Rtc_rst
     Waitms 1
    
     Rtc_cmd = &H8E
     Rtc_data = &B00000000
    
     Shiftout Rtc_out , Rtc_clk , Rtc_cmd , 3 , 8 , 200
     Shiftout Rtc_out , Rtc_clk , Rtc_data , 3 , 8 , 200
    
     Waitms 1
     Reset Rtc_rst
    
    .
    .
    .
    
    Return
    Auslesen so (funktioniert nicht ganz):

    Code:
    Gettime:
    Rtc_cmd = &H81       ' read seconds
    
       Config Rtc_in = Output
       Set Rtc_rst
       Waitms 1
    
       Shiftout Rtc_out , Rtc_clk , Rtc_cmd , 3 , 8 , 500
    
       Config Rtc_in = Input
       Shiftin Rtc_in , Rtc_clk , Rtc_bytes , 2 , 8 , 500
       Config Rtc_in = Output
    
       Waitms 1
       Reset Rtc_rst
    
    Return
    Settime funktioniert.
    Das Problem ist nun das beim schreiben des Befehls mittels Shiftout das erste BIT für den folgenden Shiftin schon mit ausgegeben wird der mir dann in meinen rtc_bytes fehlt. Klicke auf die Grafik für eine größere Ansicht

Name:	DS1312_BITS.jpg
Hits:	16
Größe:	65,2 KB
ID:	27497

    Folge ist, das nur alle 2 Sekunden gezählt wird und bei 5 schon eine 10er Stelle gezählt wird.

    Wie könnte ich mit Bascom die letzte fallende Flanke vom Shiftout im Shiftin mit berücksichtigen?

    Diese Lösung hat bei mir nicht funktioniert. (Habs aber auch nicht verstanden, warum es so funktionieren sollte)
    http://www.mikrocontroller.net/topic/249885

    Vielen Dank für Eure Hilfe.

    mfG
    Mario
    Geändert von dj_cyborg (14.02.2014 um 09:36 Uhr)
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    04.07.2012
    Beiträge
    201
    Hallo,

    ok ich habe es jetzt wie folgt gemacht.

    Code:
    '*******************************************************************************
    '*******************************************************************************
    '************************ DS1302 RealTimeClock V1.0 ****************************
    '*******************************************************************************
    '************************** 14.02.2014 by CYBORG *******************************
    '*******************************************************************************
    '*******************************************************************************
    
    '****************************** Allgemein **************************************
    
    $regfile = "m88def.dat"
    $crystal = 8000000
    $hwstack = 48
    $swstack = 48
    $framesize = 48
    $baud = 19200
    
    '************************* I2C - DISPLAY 1602 **********************************
    
    $lib "YwRobot_Lcd_i2c.lib"       'I2C LCD
    
    Const Pcf8574_lcd = &H4E       'LCD Adresse
    Dim Lcd_backlight As Byte
    Lcd_backlight = 1       'Hintergrundbeleuchtung einschalten (1/0)
    
    Config Scl = Portc.5       'i2c SCL
    Config Sda = Portc.4       'i2c SDA
    Config Lcd = 16 * 2       'nicht unbedingt nötig
    Config I2cdelay = 1
    
    Waitms 300       'warte bis Kondensator bei Ta0 geladen, auch für LCD-Init!
    Cls
    Waitms 300
    
    '************************ DS1302 RealTimeClock *********************************
    
    Declare Function Rtc_get(byval Rtc_cmd As Byte ) As String * 2
    Declare Sub Rtc_set(byval Rtc_cmd As Byte , Byval Rtc_data As Byte)
    
    
    Rtc_rst Alias Portd.6
    Config Pind.6 = Output
    
    Rtc_clk Alias Portb.0
    Config Pinb.0 = Output
    
    Rtc_in Alias Pind.7
    Rtc_out Alias Portd.7
    Config Rtc_in = Output
    
    
    Const Rtc_sec = &H80
    Const Rtc_min = &H82
    Const Rtc_hour = &H84
    Const Rtc_day = &H86
    Const Rtc_month = &H88
    Const Rtc_wday = &H8A
    Const Rtc_year = &H8C
    Const Rtc_wp = &H8E
    Const Rtc_tcs = &H90
    
    
    'Uhr konfigurieren
    Rtc_set Rtc_wp , &B00000000       'Schreibschutz / WP=BIT7 / &B00000000=aus / &B10000000=an
    Rtc_set Rtc_tcs , &B10100101       'Batterieladung einstellen / 1 Diode, 2kOhm ~ 2,2mA
    
    Rtc_set Rtc_sec , &B00000000       'Sekunden einstellen / CH=BIT7 / 0,1=an,aus
    Rtc_set Rtc_min , &B01011001       'Minuten einstellen
    Rtc_set Rtc_hour , &B00100011       'Stunden einstellen
    
    Rtc_set Rtc_day , &B00010100       'Tag einstellen
    Rtc_set Rtc_month , &B00000010       'Monat einstellen
    Rtc_set Rtc_year , &B00010100       'Jahr einstellen
    
    Rtc_set Rtc_wday , &B00000101       'Wochentag einstellen
    
    Wait 1
    '***************************** HAUPTSCHLEIFE ***********************************
    
    Do
    
       'Zeit
       Locate 1 , 1
       Lcd Rtc_get(rtc_hour) ; ":" ; Rtc_get(rtc_min) ; ":" ; Rtc_get(rtc_sec)
    
       'Datum
       Locate 2 , 1
       Lcd Rtc_get(rtc_day) ; "/" ; Rtc_get(rtc_month) ; "/" ; Rtc_get(rtc_year)
    
       'Wochentag
       Locate 2 , 12
       Lcd "WT:" ; Rtc_get(rtc_wday)
    
       Waitms 300
    Loop
    
    End
    
    
    '***************************** RTC-FUNCTIONS ***********************************
    '******************************** RTC-SET **************************************
    Sub Rtc_set(byval Rtc_cmd As Byte , Rtc_data As Byte)
    
        Config Rtc_in = Output
        Set Rtc_rst
        Waitms 1
    
        Shiftout Rtc_out , Rtc_clk , Rtc_cmd , 3 , 8 , 200
        Shiftout Rtc_out , Rtc_clk , Rtc_data , 3 , 8 , 200
    
        Waitms 1
        Reset Rtc_rst
    
    End Sub
    
    '******************************** RTC-GET **************************************
    Function Rtc_get(byval Rtc_cmd As Byte ) As Byte
    
       Rtc_cmd = Rtc_cmd + 1
    
       Config Rtc_in = Output
       Set Rtc_rst
       Waitms 1
    
       Shiftout Rtc_out , Rtc_clk , Rtc_cmd , 3 , 7 , 500
    
       Config Rtc_in = Input
       Shiftin Rtc_in , Rtc_clk , Rtc_cmd , 2 , 8 , 500
       Config Rtc_in = Output
    
       Waitms 1
       Reset Rtc_rst
    
       Rtc_get = Bcd(rtc_cmd)
    
    End Function
    mfG
    Mario
    Geändert von dj_cyborg (14.02.2014 um 18:47 Uhr)
    Wenn das die Lösung sein soll...
    ...will ich mein Problem zurück !!!

Ähnliche Themen

  1. RealTimeClock?
    Von X-917 im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 13.02.2009, 23:36
  2. 8 BIT Struktur, aber SPI Befehle 16 BIT lang
    Von The Man im Forum PIC Controller
    Antworten: 5
    Letzter Beitrag: 23.04.2008, 22:38
  3. Antworten: 11
    Letzter Beitrag: 28.08.2006, 16:23
  4. 16-bit Sensor mit 10-bit A/D Wandler von AVR MC auslesen
    Von sg10241024 im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 28.06.2005, 08:32
  5. DS1302 RTC mit PIC 18F45
    Von Fabian85 im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 16.05.2004, 13:59

Stichworte

Berechtigungen

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

LiFePO4 Speicher Test