Problem z kolejnoscią programu


Witam.
Mam kilka pytań. Programuje w Bascomie już dosyć długo i coraz bardziej rozbudowane projekty tworzą coraz to nowsze problemy. A mianowicie chodzi mi głównie o wykorzystywanie przerwań i timer'ów. Napisanie programu z obsługą przerwań czy timerów nie jest dla mnie problemem. Problemem jest łączenie tych funkcji w jeden program. Przykład:
Powiedzmy że chce sterować fazowo jakimś urządzeniem co już zmusza mnie do użycia INTx i Timerx, do tego np. chciałbym obsługiwać enkoder/impulsator - kolejne przerwanie a na to wszystko wyświetlanie multiplexowe.
Pytania:
1. Czy jest w ogóle możliwość wykorzystania tych dwóch przerwań w taki sposób aby nie zakłócać pracy urządzenia 230V i w tym samym czasie obsługiwać impulsator i wyświetlać dane na wyświetlaczu?
2. Czy może lepiej było by użyć (jeżeli w ogóle jest taka możliwość) kolejnego kontrolera np. do sterowania fazowego a reszta w uC głównym?
3. Kolejne pytanie tyczy się obsługi urządzeń 1wire. Jak napisać program aby odczytywać temperaturę z DS'a i nie zakłócać pracy 230V i analogicznie timerem nie zakłócać odczytu temp?

Następny problem jaki mnie męczy to "kolejność programu".
1. W jakiej kolejności powinno się pisać program: w pętli głównej obsługa LCD a np. w przerwaniach obsługa klawiatury? Czy może odwrotnie ?

Bardzo proszę o jakieś porady. Pozdrawiam :)




Portret użytkownika mirley

Re: Program BASCOM

Będzie ci bardzo trudno zrobić w programie cokolwiek żeby nie zakłócało regulacji fazowej. Najlepszym rozwiązaniem jest zastosowanie U2008 to regulacji fazowej, na jego wejście można tak podać sygnał z PWM poprzez filtr żeby zasymulować regulację potencjometrem.

Program musiałbyś chyba napisać w asemblerze żeby dokładnie ogarnąć wszystkie te problemy

Ja wszystko pisze w pętli głównej na flagach, a na pewno coś tak mało ważnego jak wyświetlanie LCD czy obsługa klawiatury wieloprzyciskowej. W przerwaniu piszę coś takiego jak obsługa PWM programowego jeśli taki stosuje, dzielniki do flag, ewentualnie odczyt z ADC jeśli muszę czytać w konkretnych chwilach.

Z ds jest zawsze problem bo sterowanie odbywa się na ścisłych zależnościach czasowych. Nie dasz rady w środku wysyłania jednego rozkazu gdzieś skoczyć do przerwania bo prawdopodobnie transmisja się pogubi

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika tms

Dzięki za zainteresowanie

Dzięki za zainteresowanie tematem. Znalazłem na kilku forach projekty termostatu na DS'ach i triakach, niestety wsady tylko HEX :( ale świadczy to o tym że można coś takiego zrobić :) Pomijając te impulsatory i multiplex czy dało by radę tak? :
W pewnym momencie programu wysyłać komendę konwersji temperatury do czujnika, a opóźnienie 750ms zrealizować na pomocą przerwania od "przejścia przez zero" np. jakimś licznikiem ? I po odliczeniu tych 750ms odczytać temp. <- To w przypadku gdy była by obsługiwana regulacja fazowa. A w trybie pełnej pracy urządzenia 230V i trybie całkowitego wyłączenia triaka odczyt realizować w normalnym przerwaniu timera ?

Wiem że jestem natrętny ale ten problem nie da mi teraz spokoju :(

A odnośnie kolejności programu...
Czyli jak mam napisać kilka menu to robię w pętli głównej skok do podprogramu wyporu menu np. za pomocą case czy wybór menu robić w pętli głównej a samo wyświetlanie w podprogramie?

I to samo pytanie tyczy się klawiatury:
w pętli głównej robić skok do podprogramu obsł. klaw. czy w każdym podprogramie wyświetlania robić skok do obsł. klaw.?

Jeżeli denerwuję kolegę tymi pytaniami to ok, wystarczy powiedzieć, może sam jakoś do tego dojdę, ale bardzo zależało by mi na jakiejś podpowiedzi:)
Pozdrawiam:)

Portret użytkownika mirley

Re: Sterowanie fazowe + DS

Tu nie chodzi o to kiedy wywoływać odczyt DS ale problem jest jak w trakcie wysyłania jednego bajtu do DS wystąpi przerwanie. Już tak robiłem że dzieliłem obsługę ds'a na pojedyncze rozkazy i wysyłałem pojedyncze bajty lub czytałem pojedyncze bajty. Jeden bit jak dobrze pamiętam trwa około 64us jeśli jest to 0 czyli w ekstremalnym przypadku 8x64us trwa jeden bajt + jakiś reset itp.

Ja piszę skoki do wszystkiego z pętli głownej, unikam robienia skoku w procedurze do której skoczyłem wcześniej.

jeśli chodzi o menu to ostatnio doszedłem do wniosku że zrobię je wogóle w osobnym do loop do któ?ego program będzie wskakiwał tylko jak zostanie właczone menu. Reszta działania programu się wtedy wyłączy. A podczas normalnej pracy nie będzie sprawdzał ifów od klawiatury i wyświetlania menu. Ale czy to będzie działać dobrze to sam nie wiem

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika tms

Rozjaśnił mi kolega umysł z

Rozjaśnił mi kolega umysł z tą obsługą DS'a :D

A z tym menu to ciekawy pomysł tylko że co wtedy jak będzie trzeba z pętli Do..LOOP podprogramu menu wyskoczyć do pętli głównej? Return przecież nie zadziała. Trzeba by było zrobić jakąś etykietę lub podprogram w pętli głównej ale to przecież odpada. Albo zrobić jakiś licznik w menu i na DO...LOOP UNTIL ? Ja przepraszam że tak podkradam ten pomysł :D ale właśnie pisze spory programik i zatrzymałem się na konstrukcji wizualnej części programu. Więc jak by kolega znalazł jakieś rozwiązanie to proszę o jakieś podpowiedzi:) a ja zaraz siadam przed Bascom'em i zaczynam pisać.
Dzięki za dotychczasowe rady. Pozdrawiam :)