Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

PCF8583 - Bascom dni tygodni

MAREK MRK 12 Paź 2017 11:43 168 2
  • #1 12 Paź 2017 11:43
    MAREK MRK
    Poziom 18  

    Witam, przejrzałem nie jeden temat i próbowałem na wiele sposobów, ale nie mogę sobie poradzić z odczytaniem dnia tygodnia.
    Potrzebuję tylko czas oraz dzień tygodnia (poniedziałek-niedziela).
    Wszystko czego próbowałem to zwracało mi jako dzień tygodnia 0 lub 1. Niestety nie zwracało od 0 do 6.
    Już nawet gotowiec będzie pomocny bo będę mógł spokojnie przeanalizować wszystko. Może jakiś mały błąd robię.
    Zamieszczam fragmenty kodu odpowiedzialne za RTC.
    Zapis:

    Code:

    $regfile = "m328pdef.dat"
    $crystal = 16000000
    Config Lcd = 16 * 1
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.1 , Rs = Portd.2

    Config Scl = Portc.5
    Config Sda = Portc.4
    Dim Sekundy As Byte : Dim Minuty As Byte : Dim Godziny As Byte
    Dim Dzien As Byte : Dim Miesiac As Byte
    Dim Rok As Byte : Dim Dzien_tygodnia As Byte
    Cursor Off
    Cls
    'Przykładowe wartości do zapisu...............
    Godziny = 10
    Minuty = 15
    Sekundy = 0
    Rok = 17
    Miesiac = 10
    Dzien = 12
    '................................................................................
    Godziny = Makebcd(godziny)
    Minuty = Makebcd(minuty)
    Sekundy = Makebcd(sekundy)
    Rok = Rok Mod 4
    Rok = Makebcd(rok)
    Shift Rok , Left , 6
    Dzien = Makebcd(dzien)
    Dzien = Rok Or Dzien
    Miesiac = Makebcd(miesiac)
    Dzien_tygodnia = Miesiac
    Shift Dzien_tygodnia , Left , 5
    Miesiac = Dzien_tygodnia Or Miesiac
    I2cstart
       I2cwbyte &HA0
       I2cwbyte 2
       I2cwbyte Sekundy
       I2cwbyte Minuty
       I2cwbyte Godziny
       I2cwbyte Dzien
       I2cwbyte Miesiac
       I2cstop

    Odczyt:
    Code:

    $regfile = "m328pdef.dat"
    $crystal = 16000000
    Config Lcd = 16 * 1
    Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6 , E = Portd.1 , Rs = Portd.2

    Config Scl = Portc.5
    Config Sda = Portc.4

    I2cstart
      I2cwbyte &HA0
      I2cwbyte 2
      I2cstart
      I2cwbyte &HA1
      I2crbyte Sekundy , Ack
      I2crbyte Minuty , Ack
      I2crbyte Godziny , Ack
      I2crbyte Dzien , Ack
      I2crbyte Miesiac , Nack
      I2cstop
    Sekundy = Makedec(sekundy)
    Minuty = Makedec(minuty)
    Godziny = Makedec(godziny)
    Rok = Dzien
    Shift Rok , Right , 6
    Rok = Makedec(rok)
    Dzien.7 = 0 : Dzien.6 = 0
    Dzien = Makedec(dzien)
    Dzien_tygodnia = Miesiac
    Shift Dzien_tygodnia , Right , 5
    Dzien_tygodnia = Makedec(dzien_tygodnia)
    Miesiac.7 = 0 : Miesiac.6 = 0 : Miesiac.5 = 0
    Miesiac = Makedec(miesiac)


    Dodam że najpierw wgrywam program z nastawami RTC, a później już prawidłowy soft który pełni tylko rolę odczytu.

  • #2 12 Paź 2017 12:39
    niveasoft
    Poziom 34  

    Dzień tygodnia, tydzień roku i tym podobne załatwia wbudowana biblioteka DateTime. Pod tym linkiem znajdziesz dwa pliki które się dołącza do swojego kodu i potem już korzystasz z wszystkich dobrodziejstw biblioteki DateTime. Te dwa pliki łączą SoftClock=User z PCF8583.
    Oczywiście jest tam też przykład/gotowiec. Numer dnia zwraca funkcja Dayofweek()

  • #3 12 Paź 2017 13:56
    MAREK MRK
    Poziom 18  

    No i kurczę działa. A wcześniej się męczyłem i lipa. Dzięki wielkie za pomoc. Musiałem zmienić nieco docelowy soft. Zastosowałem

    Code:
    Gosub Getdatetime
    
    Day_nr = Dayofweek()

    I mam teraz zarówno odczyt godzin, minut i dnia tygodnia.
    Super dzięki.
    Później przetestuję w gotowym urządzeniu, bo na biurku działa dobrze.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME