logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

BASCOM-Atmega8+PCF8583 [Odczyt dnia TYGODNIA]

adi84_84 12 Wrz 2010 14:40 2067 3
REKLAMA
  • #1 8502810
    adi84_84
    Poziom 14  
    Witam wszystkich :)
    Napisałem program zegarka na PCF8583 ale chciał bym jeszcze odczytać sam dzień tygodnia (bez daty) w formacie: poniedziałek,wtorek,środa itd.Jakoś nie mogę sobie z tym poradzić...Pozdrawiam...

    $regfile = "m8def.DAT"
    $crystal = 8000000
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portd.6 , Rs = Portd.5
    Config Scl = Portc.5
    Config Sda = Portc.4
    
    Dim Godziny_bcd As Byte , Minuty_bcd As Byte , Sekundy_bcd As Byte
    Dim Godziny As Byte , Minuty As Byte , Sekundy As Byte
    
    Declare Sub Odczyt_rtc
    Cursor Off
    
    Do
    Cls
    Call Odczyt_rtc
    Lcd "    "
    If Godziny < 10 Then Lcd "0"
    Lcd Godziny ; ":"
    If Minuty < 10 Then Lcd "0"
    Lcd Minuty ; ":"
    If Sekundy < 10 Then Lcd "0"
    Lcd Sekundy
    Lowerline
                                                  'Tutaj dzień tygodnia
    Waitms 100
    Loop
    End
    
    
    Sub Odczyt_rtc
    I2cstart
    I2cwbyte 162
    I2cwbyte 2
    I2cstart
    I2cwbyte 163
    I2crbyte Sekundy_bcd , Ack
    I2crbyte Minuty_bcd , Ack
    I2crbyte Godziny_bcd , Nack
    I2cstop
    Sekundy = Makedec(sekundy_bcd)
    Minuty = Makedec(minuty_bcd)
    Godziny = Makedec(godziny_bcd)
    End Sub
  • REKLAMA
  • #2 8502917
    kiziu13
    Poziom 17  
    Wystarczy zajrzeć do datasheeta PCFa. Musisz odczytać jeszcze rejestr 6. W nim 3 najstarsze bity to binarna cyfra w zakresie 0 - 6 (teoretycznie to BCD, ale na jednym półbajcie nie ma to znaczenia), oczywiście przesunięciem bitowym wyciągniesz te bity. Musisz założyć, który dzień jest początkiem tygodnia, np. 0 - poniedziałek, następnie switchem wyciągać nazwę dnia tygodnia, zakładając, że przy ustawianiu właściwego czasu dzień tygodnia też był poprawnie ustawiony.
  • REKLAMA
  • #3 8502933
    adi84_84
    Poziom 14  
    A mógł bym prosić o jakiś przykład :)
  • #4 8502960
    kiziu13
    Poziom 17  
    Przykład masz we własnym kodzie. Z tą różnicą, że czytasz nie z rejestru 2 tylko 6 i czytasz 1 bajt, a nie 3. Do przesunięcia używasz SHIFT.
REKLAMA