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

[atmega8[bascom] Jak zsynchronizować DCF77 i pomiar temperatury DS18B20 na ATmega8?

Elektronik_Kraków 22 Maj 2012 11:47 3257 3
REKLAMA
  • #1 10922567
    Elektronik_Kraków
    Poziom 13  
    Posty: 182
    Ocena: 7
    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.


    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 10925132
    Elektronik_Kraków
    Poziom 13  
    Posty: 182
    Ocena: 7
    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.
  • REKLAMA
  • #3 10925236
    mirekk36
    Poziom 42  
    Posty: 9195
    Pomógł: 964
    Ocena: 2289
    Elektronik_Kraków napisał:
    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 10930691
    Elektronik_Kraków
    Poziom 13  
    Posty: 182
    Ocena: 7
    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
    Kod: text
    Zaloguj się, aby zobaczyć kod


    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
REKLAMA