Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[atmega8[bascom] DCF77 + Timer + DS18B20

Elektronik_Kraków 22 May 2012 11:47 3020 3
  • #1
    Elektronik_Kraków
    Level 13  
    Witam
    Napisałem program, który dekoduje sygnał DCF77 ( ustawia flagę ), następnie zapisuje ( przy pierwszym uruchomieniu ) wartości zmiennych do PCF8563 i cztery razy na dobę wysyła przez RS485. do tego dwa razy na dobę koryguje czas w PCF8563. I to działa bez problemu. Do celów testowych mam podłączony LCD.

    Chciałem dołączyć możliwość pomiaru i wysyłania temperatury. Pomiar i wyświetlanie ( do testów ) temperatury ma być co 8 sekund, wysyłanie co 5 minut. Obydwie funkcje wyzwalane Timer2.
    W obsłudze Timer2 ma dwie flagi - do pomiaru i wysyłania.
    I wszystko jest działa OK do momentu, jak podepnę flagę pomiaru do podprogramu Pomiar. Owszem wyświetla temperaturę, ale w momencie dokonywania pomiaru zatrzymuje się wyświetlanie sekund, po odczycie przeskakując najczęściej o dwa do przodu.
    Wyłączam przerwania na czas odczytu i konwersji DS18B20 oraz w momencie odczytu czasu podprogramem Gettime.
    Dodam jeszcze, że DCF77 w ogóle się nie synchronizuje.


    Code: vbnet
    Log in, to see the code
  • #2
    Elektronik_Kraków
    Level 13  
    Czy to może być wina częstotliwości kwarcu ?
    Mam inny bardziej bardziej rozbudowany układ ( PCF8563, PCF8574, karta SD, pomiar z PF8591, pomiar 3 x DS18B20 ) tylko na Atmega328 i kwarcu powyżej 10 MHz i tam działa wyświetlanie OK, bez żadnych przeskoków.
  • #3
    mirekk36
    Level 42  
    Elektronik_Kraków wrote:
    Czy to może być wina częstotliwości kwarcu ?.


    A gdzież tam kwarcu? :( ... tylko i wyłącznie programu. To może działać zupełnie swobodnie nawet bez kwarcu tylko na wewn. oscylatorze np 8MHz. Zobacz tutaj:

    http://mirekk36.blogspot.com/2011/09/fakty-i-mity-nt-rzekomych-problemow-z.html

    wprawdzie w nieco innym języku ale widać, że odczyt temperatury 1wire można bardzo dobrze pogodzić i to bez żadnego migotania nie tylko z multipleksowaniem LED.

    To co powoduje u ciebie ten główny problem to niestety wszechobecne w takich kodach:

    Waitms 750

    :(

    jak się tego nie pozbędziesz - to ciągle będzie kiepsko :(

    Musisz zrobić to oczekiwanie na timerach.
  • #4
    Elektronik_Kraków
    Level 13  
    Jak zwykle Kolega ma rację, wyrzucenie Waitms 750 załatwiło sprawę. Oczywiście wstawienie timera jest chyba najlepszym rozwiązaniem. Tylko coś nie tak mi wychodzi.

    Dołożyłem Timer co 800 milisekund
    Code: vbnet
    Log in, to see the code


    przy takim kodzie dokonuje tylko jednego pomiaru z pierwszego czujnika.

    Po dłuższych obserwacjach - dołożenie drugiego DS-a spowodowało, że przestał wysyłać czas cztery razy na dobę. Jedynie co robi to pobiera i wyświetla czas z PCF8563 oraz odbiera czas z DCF77 i aktualizuje w PCF8563