Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[ATmega644PA][Atmel Studio 6] - Regulator czasowy do lampy sodowej.

02 Gru 2012 00:22 1653 9
  • Poziom 19  
    Witam, kolejną częścią mojej pracy inżynierskiej jest sterowanie czasowe lampy sodowej. Chciałbym Was prosić o jakieś bardziej sensowne sugestie i propozycje wykonania takiego sterowania.

    Ma wyglądać to tak:
    - aplikacja C# posiada funkcję gdzie ustawiam sobie czas włączenia i wyłączenia lampy, następnie po ustawieniu wysyłamy przez UART te dane do procka
    - procek po otrzymaniu danych powinien ustawić czas ON/OFF (jednak od startu będzie mieć on wartości początkowe, np ON/OFF - 12/12h)
    - teraz jest problem, czym odmierzać tyle godzin ? np 18h lampa włączona i 6h lampa wyłączona.

    Moim pierwszym pomysłem jest niestety timer...oraz funkcja przeliczająca godziny odebrane z UARTA na sekundy. Jak to miałoby działać... powiedzmy, odbieram moje 18/6h, funkcja przelicza mi h na sekundy i ową ilość sekund będę wpisywać do timera o maksymalnym preskalerze. Wyglądałoby to mniej więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Oczywiście jakieś flagi kiedy ma być włączona a kiedy wyłączona, ale to już w samym kodzie przerwania. Czy takie rozwiązanie ma sens ? Z góry dzięki za pomoc :)
  • Moderator Mikrokontrolery Projektowanie
  • Moderator na urlopie...
    Z tym, że musisz wprowadzić korekcję, gdyż czas mierzony za pomocą timera nie będzie zbyt dokładny w dłuższym przedziale czasu - kwarce do "taktowania" zwykle nie są zbyt dokładne.
    Zastanów się nad użyciem (o ile możesz) zewnętrznego zegara RTC - będziesz wtedy mógł ustawić sobie czas i definiować godzinę załączenia/wyłączenia.
    Chyba, ze dokładność na timerze (po odpowiedniej korekcji) jest wystarczająca to nie ma sensu komplikować projektu.
  • Poziom 19  
    Zastanawiałem się też nad zegarem RTC, mam scalaka PCF8583, którego można by zatrudnić. Tylko zastanawiam się w jakim trybie musiał by on pracować ? Timer ? Alarm ? Dajmy na to wybiorę PCF'a nie wiem za bardzo jak on miałby odmierzać mi zadane godziny - musiałbym za każdym razem gdy włączam sterownik ustawiać od nowa czas i dopiero względem niego odmierzać ileś godzin. Tylko zastanawia mnie czy będę musiał za każdym razem definiować nową godzinę włączenia / załączenia. Dajmy na to, ustawię włączenie (alarm) na godzinę 15, potem przez 6h lampa będzie świecić a następnie przez ileś godzin znów ma być wyłączona. Chodzi o to, że zapisywanie nowego alarmu ma być wykonywane automatycznie, bez ręcznego podawania - bo tak to mija się z celem - wtedy mógłbym sobie sam z przycisku lub z C# włączać tę lampę i z zegarkiem w ręku odmierzać czas...Można by zrobić takie małe sprzężenie zwrotne: podpięty do atmegi pin przerwania z pcf - atmega w zależności o przerwania wystawia na jakimś pinie portu 0 lub 1. I teraz gdy o np 15 włączy się alarm, przerwanie da sygnał prockowi, ten wystawi na jakimś pinie 0 lub 1 (wyłącz / włącz) oraz wygenerowanie przerwania wykryte przez ATmegę wywoła pobranie aktualnego czasu z pcf, aktualizacja godziny i ponowny zapis do pcf aby mógłdalej odliczać do następnego alarmu. Ma to sens ?
  • Moderator Mikrokontrolery Projektowanie
    Ale po co ci zewnętrzny scalak? Jeśli z jakiegoś powodu bardzo byś chciał to możesz wykorzystać RTC w procesorze. Z drugiej strony niedokadności o których pisze kolega powyżej to może sekunda na parę dni, do sterowania lampy sodowej to chyba nie ma znaczenia :) A jeśli ma to kup lepszej jakości kwarc, albo kwarc termostatowany :)
  • Poziom 19  
    Kolego tmf w sumie masz rację ;) Nawet jak opóźnienie będzie trwało kilka minut no to nie robi to żadnej różnicy... ma być po prostu mniej więcej ileś tam godzin włączenia i wyłączenia lampy. OK - spróbuję na dniach zrobić tego timera, pobawię się nieco. Trochę mam innej roboty także dam znać na forum jak coś naskrobię.
  • Poziom 19  
    Mam dobry pomysł na owy problem :) A więc zatrudnię timera2 i tryb asynchroniczny. Na nóżki PC7 (TOSC2) PC6 (TOSC1) podłączę kwarc zegarkowy. Przy odpowiednim preskalerze będzie mi on generować przerwanie co 1s. Aplikacja C# wyśle mi ustawione przeze mnie dane czasowe na atmegę - np 18/6h. Atmega przeliczy sobie ile sekund to te dane godziny i podstawi pod warunki i flagi w przerwaniu. Tak np. przy przerwaniu co 1s wartość zliczania to 64800.

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Użytkownik usunął konto  
  • Poziom 19  
    Hmm, czyli sugerujesz że ten pomysł mija się z celem ? Sterownik, czyli ATmega i pod układy wykonawcze będą w osobnej obudowie poza boxem w którym umieszczone są czujniki, lampa i wentylatory, także temperatura lampdy sodowej nie będzie miała wpływu. Box (namiot) do roślin podłączany jest za pomocą przewodów do sterownika a ten do 230V i do PC przez usb (rs232).
  • Użytkownik usunął konto