Witam! If Godziny = Godz_glowne(1) And Minuty = Min_glowne(1) Then Reset Out2 ' 'zapalanie swiatla glownego If Godziny = Godz_glowne(2) And Minuty = Min_glowne(2) Then Set Out2 'gaszenie swiatla głównego o ile to poprawnie działa gdy jest cały czas zasilanie.Jednak po zaniku zasilania procesor nie wie czy ma się świecić czy zgasić.Kombinowałem z dodatkowymi flagami ale to na nic.Jest jakiś sposób na zapisanie tego,czy pozostaje ,tylko zasilanie awaryjne.Pisze program do sterownika akwarium i wolałbym ,aby to działało poprawnie
|
|||
chymmmm
zauważ co napisałeś:
a później piszesz:
a teraz mi powiedz co sobie ma pomyśleć czytelnik? Jakiej porady się podziewasz, kiedy nie zreferowałeś co robisz i z czym masz problem.
Generalnie zwróć uwagę że minuta trwa minutę i TYLKO wtedy przerz ten okres będzie spełniony Twój warunek. Nie wiem na jakim działaniu programu Ci zależy bo nie napisałeś ...
A jak myślisz co ma robić ?C, skoro on też w myślach nie czyta ...
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Sorry :) No w sumie napisalem
Sorry :) No w sumie napisalem ,widocznie nie całkiem zrozumiale
włączenie nastawione na 22:20
aktualny czas 22:20 i urządzenie sie włącza
teraz brak zasilania i pojawia sie o godzinie 22:22 i już sie nie włączy
jak to rozwiązać?
Braki w zasilaniu są sporadyczne ,ale jeżeli ma to być automat to powinien być przygotowany na wszystkie ewentualności
Dwa sposoby
Taki problem możesz rozwiązać na conajmniej dwa sposoby:
1. podtrzymanie zasilania co najmniej jednostki głównej (?C),
2. konstruując odpowiedni algorytm.
np przekroczenie stosownego czasu nastawia flagę, jej stan zapisujesz w nieulotnej pamięci
wyjście terujące synchronizowane jest z tą flagą,
flaga jest zerowana po skończonym limicie czasu.
Oczywiście, każde z zaproponowanych rozwiązań, ma wady i zalety. Istotną dysfunkcją rozwiązania 2 może być duża ilość przełączeń flagi, w krótkim czasie z wiadomego powodu - ograniczona ilość cykli zapisu pamięci nieulotnej.
;-)
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Dzieki za
Dzieki za zainteresowanie.Pierwszy sposób znam,co do drugiego nie wiem ,czy dobrze zrozumiałem.Robiłem sposób z flaga w ten sposób: gdy czas ustawiony i aktualny się zrównał to flaga =1.Napiecie znika ,później sie pojawia i dzięki fladze dalej działa do momentu zmienienia jej gdy w programie zrównają sie czas ustalony do wyłączenia i aktualny.Niestety gdy zasilanie wróci jak już czas aktualny jest późniejszy od nastawionego to dzięki fladze dalej działa.Wydaje sie banalny problem ,ale nic mi do głowy nie przychodzi więcej.Chyba najłatwiej będzie zasilanie awaryjne zrobić.
przypadek braku zasilania
czyli zakładasz tutaj, że czas awarii zasilania będzie dłuuuugi i może przekroczyć moment gdy minie czas wyłączenia tak?
W takim wypadku, przy starcie sterownika przed pętlą główną programu dodaj test flagi, na wypadek przekroczenia tego zdarzenia i po sprawie.
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
Nie musi być długi.Wystarczy
Nie musi być długi.Wystarczy ze się wyłączy 5 minut przed ustawiona godzina.Testowanie flagi tez nic nie da,bo on odczyta z eeprom stan poprzedni,a powinien być już zmieniony .Tez mi się wydawało ,ze to będzie proste:)No chyba ze nie rozumię.
no więc tak
rozważmy kilka zdarzeń
1. powrót zasilania po zaniku
krok pierwszy program ma odczytać z EEPROM stan znacznika
krok kolejny program ma sprawdzić czy znacznik ma prawidłową wartość (czy już przypadkiem nie upłynął czas zadziałania czegoś tam)
w kolejnym kroku zaczyna się pętla główna programu ...
2. koniec zdarzeń szczególnych
ciągłe działanie programu
Grzeniu73 jak te cyferki przy nick'u to twój rocznik, to jesteśmy takie same "stare pierdoły" i powinno nam się łatwo dogadać ... (-;
Tak że powinieneś wszystko rozumieć bo staram się gadać jasno i opisowo. ;-p
pozdrawiam kaktus
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
ano rocznik:)Programować
ano rocznik:)Programować zacząłem nie tak dawno i robię to tylko z nudów i dla satysfakcji.
Właśnie cały problem jak sprawdzić ,ze już upłynął czas.Powiedzmy,ze mam 8.00 włączenie i wyłączenie 20.00.światło sie włącza o 8.00 i sobie świeci flaga_światło zmienia stan na 1 i się zapisuje.Teraz zasilanie znika o 19.00 i pojawia o 20.05 i z eeprom odczytuje ze flaga_światło jest dalej 1 i zapala światło.Tu moge zastosować if godzina ustawiona >aktualnej to flaga_światło =0,tylko ze jak braknie przed godzina 8.00 to jak zapisze if godzina ustawiona < aktualnej to flaga_swiatlo =1 to działa ,tylko ze po północy jest godzina 0.00 i wszystko sie sypie. Dalem sobie z tym spokój ,bo chyba nic nie wymyśle już.Zorbie awaryjne zasilanie dla procka.Ale ,az dziwne,ze nie znalazłem żadnego przykładu w necie. Masz może jakieś doświadczenie ze sterowaniem PID? Teraz mam zrobione sterowanie grupowe ale znalazłem przykład w Samplach Bascoma,ale nic nie mogę z tego skumać.P.s jakie stare pierdoły?!:)
Wszystko to obliczenia
Można np tak godzina przełączenia 8:00 niech jest reprezentowana przez 8*60+0,
godzina wyłączenia jako 20*60+0,
po starcie programu odczytujesz znacznik przeliczasz godzinę (np 15:23) 15*60+23, porównujesz z "miejscem" załączenia i wyłączenia, korygujesz lub nie znacznik. KONIEC Program sobie pomyka dalej.
Przejście przez 24:00 a 00:00 nic tu nie powinno komplikować, jedynie kod trochu spuchnie bo "duże" zmienne trzeba zadeklarować i będą też operacje na tych "rozlazłych" typach danych.
Ja też późno zacząłem bo kupe czasu podchodziłem do ?C jak do byka z wielgaśnymi rogami, a szkoda ...
Z PID nie miałem nic wspólnego ale to też pewno tylko obliczenia ...
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
I to chyba jest właśnie to!
I to chyba jest właśnie to! Pomysł z dodawaniem tez sprawdzałem ,ale nawet nie przyszło mi do głowy żeby to najpierw mnożyć. Sprawdzę ten pomysł w praktyce. Na wielkości kodu mi nie zależy bo nie przekroczę pojemności mega32.Wielkie dzięki!
proszę bardzo
(((-;
Przeanalizuj jeszcze dokładnie zapis do eeprom, tak aby odbywał się tylko jeśli to będzie niezbędne, znaczy po zmianie, a nie za każdym przebiegiem pętli głównej programu ...
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
zauważ jedno
i tu jesteś w błędzie ..
ten warunek będzie spełniony przez całą minutę i w ciągu tej minuty program za każdym przebiegiem będzie wykonywał czynności po spełnionym warunku a nie tylko jednorazowo!
"Cierpliwym być musisz, by wiedzę zgłębiać tajemną, gdyż ciemna strona mocy niszczącą i silną jest.".
ale jakoś działa:)to znaczy
ale jakoś działa:)to znaczy dobrze działa. Zapis mam wywoływany w przerwaniu i nie zdąży się drugi raz zapisać.Jak na razie wszystko działa tak jak chciałem. Teraz jeszcze muszę dodać PH meter, ale na razie nie mam jak testować ,bo nie mam sondy.Jak cos to wrócę z tematem:)