Witam,nie znam się na pisaniu programów,mam zamiar zacząć naukę.Potrzebuję zbudować sterownik który będzie posiadał 3 timery np.do 90s każdy z możliwością programowania czsu pracy+zapis,osobne przyciski START i wyjścia dla timera 1,2, i 3 ,dodatkowo jedno wyjście w ATMEGA załączone na stałe gdy żaden z timerów nie pracuje (po wystartowaniu timera 1,2,lub 3 wyjście przechodzi w stan WYŁ).Stany wyświetlane na LCD 2*16.Czy wogle jest możliwe zrealizowanie tego na ATMEGA 8.Proszę o jakieś sugestie i kody źródłowe.
|
|||
Re: 3*timer na ATMEGA 8
Do odliczania różnych czasów na procesorze wcale nie potrzeba tylu timerów. Wystarczy jedna podstawa czasu (jeden timer) plus kilka zmiennych i po problemie.
Moja strona w powijakach
3*timer na ATMEGA 8
dzięki za podpowiedź,niestety dla mnie to wyzwanie,tak jak elektronika nie stanowi żadnego problemu to w programowaniu leżę.
Re: 3*timer na ATMEGA 8
No to trzeba trochę poczytać.
Moja strona w powijakach
Re: Timery
Co dokładnie chcesz zrobić z tymi timerami, ma to sobie tak poprostu liczyć do 90s i nic? Do tego zastosowania wystarczy jeden timer
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.
3*timer na ATMEGA 8
Timery mają w zależności który przycisk nacisnę (1,2 lub3) włączyć odpowiednie urządzenie na czas nastawiony z przedziału do 90s,z tym,że pracuje tylko w danej chwili 1,2 lub 3 (nie może być możliwości załączenia np.2jednocześnie,praca jednego z nich blokuje pozostałe). dodatkowo jedno wyjście z ATMEGI przechodzące w stan wył.(normalnie zał.)gdy pracuje jeden z timerów. 3 przyciski start/stop dla timerów + 3 wyjścia zał., 1 wyjście wspólne wył.gdy pracuje jakiś timer.
Może to i banalnie proste,ale dla mnie to pewnie za parę miesięcy.
pozdrawiam.
Re: 3*timer na ATMEGA 8
Może powiedz co za urządzenie planujesz to będziemy mieli łatwiej Ci pomóc.
Moja strona w powijakach
3*timer na ATMEGA 8
Urządzenie ma za zadanie sterować przez przekaźniki elektrozaworami w prysznicu wrażeń(ciepły deszcz,zimny deszcz,bryza poranna),dadatkowe wyjście ma za zadanie po włączeniu jednej z funkcji wyłączyć oświetlenie na czas działania jednej z atrakcji. Dodatkowo chciałbym mieć możliwość zminy czasów (ale to już w samum sterowniku).
3*timer na ATMEGA 8
witam,widzę ,że temat skomplikowany,czy w takim przypadku jest możliwość przerobienia układu "Prosty Timer"z AT89C2051 na ATMEGA 8 i dołożenie tego co chciałem wyżej(SW1,SW2,SW3-jako start dla t1,t2 lub t3;dla każdego timera wyjście na przekaźnik-zał.gdy timer pracuje;1 wyjście na przekaźnik-wspólne dla trzech timerów).Przypominam,że praca jednego timera nie pozwala uruchomić pozostałych oraz każdy ma możliwość ustawiania czasów.
Pozdrawiam
Re: Timery
Program nie jest skomplikowany ale nikt za Ciebie go nie napisze od podstaw. Zacznij od konfiguracji timera napisz cos co odlicza czas w sekundach. Wstaw tu jakiś kod to pomożemy Ci uzupełnić
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.
3*timer na ATMEGA 8
ok,trochę mi zejdzie,zakupiłem książkę M.Wiązani,czekam na dostawę wtedy pokombinuję.Mam nadzieję ,że po przeczytaniu i testach coś ruszymy.
Pozdrowienia.
3*timer na ATMEGA 8
Narysowałem schemat i napisałem początek programu,co dalej
/files/user_img/u758/pocz%C4%85tek%20kodu.png
niestety nie wiem jak to dołączyć,pozdrawiam
Re: Timery
Normalnie kod skopiuj z bascoma i wklej w tekst posta.... potem zaznacz cały kod co wkleiłeś i kliknij przycisk BAS u góry formularza. Niestesty nic nie widać z twojego kodu
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.
3*timer na ATMEGA 8
przykład odliczania
Witam,
proste odliczanie 90s
Pisane z głowy(niekompilowane) mogą być błędy.
Stosuj wcięcia w kodzie, łatwiej się połapać co do czego należy.
Niestety nie wiem nic z twojego schematu (za mały), napisz co dokładnie ma robić kolejne przyciski,
napewno brakuje rezystorów podciągających (np 3,3k)- bez nich może "świrować"
zamiast debounce można użyć również instrukcj if..waitms
3*timer na ATMEGA 8
Dzięki za przykłady, wygląda to dosyć prosto,pokombinuję i zastosuję jako sterownik tymczasowy. W wersji końcowej sterownik będzie dużo bardziej skomplikowany, SW1 start/stop na ustawiony czas załącza PK1,PK4,SW2-PK2,PK4,SW3-PK3,PK4.Załączenie SW1 ma zablokować na czas pracy możliwość wybrania SW2 i SW3, to samo jak działa SW2 blokuje SW1 i SW3 itd. Pozostałe przyciski mają służyć do możliwości zmiany czsów timerów 1,2,3 z podglądem na LCD oraz zapisem do pamięci SW4-menu/ok, SW5-up,SW6-down,SW7-left,SW8-right.Mam nadzieję ,że coś wykombinujemy,wieczorem spróbuję dać większy schemat.Jeszcze raz dzięki za wsparcie dla zaczynającego przygodę z pisaniem w języku BASCOM.
/files/user_img/u758/schemat%
/files/user_img/u758/schemat%20czas%C3%B3wki%20x%203.zip
link do schematu,nie wiem jak będzie wyglądał,spakowany.
3*timer na ATMEGA 8
Przed naukom programowania w
Przed naukom programowania w BasCom, dobrze by było się zapoznać z podstawami algorytmów - ułatwi ci to życie z uC.
działanie i schemat już łapia
a więc:
on/off sw1->pk1,pk4
on/off sw2->pk2,pk4
on/off sw3->pk3,pk4
trochę namieszałeś w kodzie masz dwie główne pętle loop..do
odrobina kodu do analizy (standardowo napisane na kolanie :) ):
a tak w ogóle to używany będzie tylko jeden timer ( a dokładnie timer0 ), czy chodzi ci o możliwość ustawienia niezależnych czasów?
np.
sw1 na 30s
sw2 na 90s
sw3 na 59s
( oczywiście dowolna zmiana tych parametrów.)
3*timer na ATMEGA 8
Trochę się z tym pobawiłem i na chwilę obecną wywaliłem niepotrzebne rzeczy w schemacie i programie.Fusebity ustawiłem na wewnętrznym oscylatorze 8MHz,wszystko skompilowało się dobrze,niestety po wgraniu nie reaguje na nic,na wyjściach przekaźników jest cały czas stan niski.
może się gdzieś
może się gdzieś rombłem(chociaż nie wiem za bardzo gdzie ),
spróbuj przetestować same przyciski i przekaźniki np tak:
toggle -> zmiana stanu na przeciwny
sprawdziłem obsługę
sprawdziłem obsługę przycisków i przekaźników (dopisałem jeszcze do PR1: i PR2: toggle przekaznik4),wszystko działa,tylko należy zezwolić na działanie 1 przycisku w danej sekwencji (gdy zał.SW1-przekaźnik 1/4 nie powinno być możliwości włączenia SW2 lub SW3 itd)w przeciwnym razie przekaźnik 4 zaczyna mieć różne stany.
3*timer na ATMEGA 8
Witam ,czy może jeszcze ktoś zerknąć na ten kod ,gdzie jest jakiś błąd,a może mam coś skopane w fusebit, przestawiłem w BASCOM tylko na 8MHz wewnętrzny.
Re: Timery
A co się dzieje po jego wgraniu? niestety nie mam czasu żeby to na płytce testowej sprawdzić
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.
Re: Timery
No właśnie nic się nie dzieje,nie reaguje na przyciski tak jakby timer wcale nie pracował.
Re: Timery
Wstaw w tym miejscu w kodzie:
teraz bez naciskania przycisków powinien przekaźnik 1 zmieniać swój stan na przeciwny co 1s. Jeśli tak nie jest to timer nie chodzi. Możesz jeszcze dopisać Start Timer0 zaraz po enable ale wydaje mi się że powinien sam wystartować
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.
Re: Timery
Niestety timer0 nie pracuje,nic się nie dzieje,wgrałem same ustawienie timera0 na 8000000MHz aby mrugał diodą dla sprawdzenia ustawień fusebit i dioda pięknie mruga co 1s,więc coś musi go blokować w programie.
Re: Timery
w takim układzie przekaźnik zał.co sekundę jednak całość nie reaguje na przyciski.
Re: Timery
mam jeszcze jedno pytanie,czy te 2 fragmenty się przypadkiem nie dublują?
Re: Timery
Dopisz jeszcze na poczatku Portd = 255, tak wogóle to reszta pinów też powinna mieć jakąś wartość początkową.
Fragmenty się nie dublują bo w założeniu przycisk wywołuje odpowiedni podprogram a potem po odliczeniu czasu, case wywołuje drugi raz ten sam podprogram żeby wyłączyć przekaźnik
czekaj.... teraz dopiero zauważyłem... popatrz na procedurę :
Ta procedura nic nie robi.... aktywny_pro jest zero, wtedy ustawia się na 1 i włącza się przekaźnik, od razu wchodzi w następnego ifa i wyłącza przekaźnik i ustawia aktywny_pro spowrotem na 1. Zmień tą procedurę na taką:
i pozostałe tak samo
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.
sorry mój błąd - dobrze że
sorry mój błąd - dobrze że go znalazłeś (),
3*timer na ATMEGA 8
sprawdziłem,wszystko śmida jak należy,przyciski działają na zasadzie start/stop dla każdego timerka (tak jak chciałem),czas wspólny dla wszystkich ustawiamy programowo bez problemu.Wstawiam cały gotowy i przetestowany programik ,może się komuś przydać,jest dużo możliwości modyfikacji dla własnych potrzeb.
Podziękowania dla lukk13 i mirley-a
Jeszcze mam chęć powalczyć z możliwością zmiany czasu z przycisków + zapis oraz wyświetleniem tego na LCD,ale to póżniej.
Pozdrawiam marekszym.
3*timer na ATMEGA 8
Chciałem dołożyć do tego timera podwójny wyświetlacz LED ze wsp.anodą aby wyświetlał czas oraz możliwość jego zmiany dwoma przyciskami i zapis do eeprom,ale niestety poległem.Zmodernizowałem trochę kod, dałem cały portd na sterowanie katodami wyświetlacza i dołożyłem 2 przyciski +/-, ale niestety nie wiem jak ruszyć dalej
Proszę o jakąś pomoc, co dalej,i czy jest możliwość ustawienia trzech różnych czasów z zapisaniem do eeprom.
Re: Timer
Program musisz napewno zmienić bo masz za długą obsługę przerwania. Przerwanie niech tylko taktuje i ustawia zmienne flagi np co 4ms niech ustawi sie np F4ms (potrzebna do wysw. LED) a potem w pętli głównej trzeba sprawdzać stan tych flag. W przerwaniu możesz przecież zmniejszać wartość 3 liczników a nie jednego. Na starcie każdy z nich załadujesz inną wartością początkową i będą sobie liczyły do zera każdy inną ilość cykli
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.
3*timer na ATMEGA 8
Mirley możesz mi z tym pomóc? Zacząłem tak, ale na pewno coś mieszm
napisz co z tego wywalić i co dalej...
Re: Timer
Dobra to tak....
Po pierwsze popracuj nad prawidłowymi wcięciami. Jak masz do loop to są one równoważne i powinny być na tym samym poziomie. Potem jest If od flagi 4ms, jest to polecenie wewnątrz do loop wiec wcinasz go w stosunku do do loop. Wewnątrz If znowu wcinasz ale jakby się w przyszłości pojawiła np druga flaga ustawian w przerwaniu to powinna być wcięta tak samo jak ten if flaga_4ms.... nie trudno to zrozumieć a bez tego nie da się czytać programu.
Co do obsługi przycisków to po to masz timer i taktowanie flagami żeby nie używać poleceń debounce które wstrzymują program bo zawierają waity w środku. Przykład obsługi przycisku wstawiłem do kodu wyżej... Dla jednego przycisku wygląda to właśnie tak. Popatrz do kodów źródłowych napewno zamieszczałem tam obsługę przycisków w bascomie.
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.
3x timer V2
Witam, możesz zerknąć jak to teraz wygląda ,oraz co jest źle i jak dalej
cały PORT.D zostawiłem na segmenty wyświetlacza, natomiast PORTC.4 PORTC.5 na anody A2,A1.
Jeszcze jedno,czy jak PORTB obsługuje przyciski to czy mogę np.na jedno wyjście PORTB.7 ustawić przekaźnik,tak jak tutaj.
Re: timer
Miałeś popracować nad wcięciami... wiec co to jest:
program od linii:
do kolejnej takiej ma obsługiwać reakcję na stan klawiszy dany wartościa &B01111110, czyli jak widzisz przycisk S1 zwarty do masy. To zero na pierwszej pozycji zawsze występuje bo na początku procedury jest kasowana ta wartość.
Co tam robi Case 1: i Return.... do czego się ma program wracać?
Próbowałeś to kompilować i wgrywać do procka?
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.
3x timer V2
Wiem,że mam nad tymi wcięciami popracować, ale systematycznie do tego dojdę. Case 1: to niechcący, natomiast odnośnie RETURN to nie wiem, ale do oczekiwania po skończeniu programu na kolejne naciśnięcie jakiegoś przycisku. Pierwsze 0 to PORTB.7 służy jako jedno z wyjść przekaźnika.
Kompiluje się, jednak brak reakcji na przyciski.Po dołożeniu wyświetlania wyświetla tylko 00.
po naciśnięciu przyciku np.sw1 ma się wykonać program
czyli załączyć przekaźniki 1/4/5 na czas_zadany1.
Re: Timer
SKoro po naciśnięciu ma się wykonywać ten podprogram toma to wyglądac tak:
return ma być jeden na końcu procedury obsługi przycisków
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.
3x timer V2
Widzę,że mam wywalić tylko return z wszystkich przycisków, pokombinuję i trochę jeszcze dopiszę ,ale dopiero niestety wieczorem, jeszcze jedno pytanie-czy jak będę wstawiał obsługę menu na SW4
to poz_menu =4 then poz_menu = 0 , chodzi o zmianę 3 czasów.
Re: Menu
Dokładnie tak, tylko wcięcie złe.... dwa polecenia równoważne powinny być tak samo wcięte
Potem w przyciskach które robią + i - dodasz case zależny od poz_menu.
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.
3x timer V2
nie chce mi to ruszyć,możesz napisać przerwania do timer 0 ,bo kombinowałem na różne sposoby i nic.Jeszcze co trzeba dopisać i zmienić aby ruszyło wyświetlanie czasów w sek.do 99.Wszystko się kompiluje, tylko nie działa.
wiem ,że wcięcia mam bez sensu,ale daj mi czas,w kolejnym projekcie będzie dużo lepiej,
3x timer V2
możesz mi napisać co jest nie tak, po naciśnięciu przycisku SW1 lub SW2,SW3 załącza przekazniki i na wyświetlaczu odlicza zadane czasy,jednak gdy czas dojdzie do zera nic się dalej nie dzieje, przekaźniki są nadal załączone jedynie mogę je wyłączyć ponownym naciśnięciem SW. Wklejam na chwilę obecną trochę okrojony kod
nie wiem co jest z tym
3x timer V2
ok,udało mi się to uruchomić, programy się wykonują,przyciski działają,tylko jak zrobić aby przy ustawianiu czasów wyświetlało mi który czas i jaka wartość? Nie wiem co i jak ustawiam. Jak to ruszy muszę jeszcze dołożyć zapis i ograniczenia w ustawianiu czasów od 0 do 99s.
nic nie mogę wykombinować z tym wyświetlaniem, możesz poradzić jak dopisać procedurę do wyświetlania tego co chcę w danym momencie..
Re: Timer
No to teraz nagrzebałeś nieźle..... po co ci te etykiety Pr1, pr2 itp w środku obsługi przycisków.... Skaczesz z obsługi timera, która ma być krótka gdzieś w środek obsługi procedury przycisków, wykonuje się ona cała gdzieś od środka i nie wiadomo co się dzieje... może i działa na razie ale za chwile dopiszesz 2 linijki i przestanie działać.... Po to dzielisz program na procedury aby każda robiła co innego. Skoro masz obsługę przycisków to po co tam pchasz przekaźniki do tego. Zrób procedurę sterowania która zajmie się obsługą przekaźników. Ale to na samym końcu.... najpierw ma działać wyświetlanie czasu i ustawianie czasu i zanim to nie ruszy zapomnij o przekaźnikach.
W procedurze przycisków zrób sobie tak:
Zmienna stan_pracy jest typu byte, określa który czas został włączony do odliczania, w stanie 0, gdy wszystko wyłączone można włączyć jakiś przekaźnik. W przerwaniu timera:
Teraz wyświetlanie, w pętli głównej trzeba dopisać:
No i procedura sterowania(przekaźnik tylko tu ma prawo się zmienić, tu wstaw sobie set i reset poszczególnych przekaźników):
Pozostałe procedury w programie, które napisałeś są niepotrzebne, tak samo dodatkowe zmienne trzeba skasować.
Zapis do pamięci trzeba zrobić pod casem od zmiany pozycji menu:
Zanim coś wkleisz do kodu zastanów się czy rozumiesz co wklejasz i jak to działa. Zacznij od samego wyświetlania
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.
3x timer V2
dzięki,wieczorem to wszystko poprawię.Odnośnie sterowania przekaźnikami w procedurze obsługi przycisków to sam mnie tak nakierowałeś a reszta poszła już lawinowo tak aby zaczęło działać.Ale i tak byłem zadowolony,że wogle coś działało.
3x timer V2
wszystko działa bez problemu,sterowanie,wyświetlanie oraz zapis jest ok.Zapomniałem tylko ,że portB.6,portB.7 jest zajęty przez kwarc i przekaźnik5 wystawiłem teraz na portD.7 (przecinek od wyświetlaczy jest niepotrzebny).
Mam pytanie czy jest możliwość ustawienia przycisków SW1,SW2,SW3 aby działały tak jak w poprzedniej wersji to znaczy wciśnięcie SW1 -załączenie,ponowne wciśnięcie anuluje odliczanie i możliwość wyboru kolejnego itd.,ewentualnie np. po wybraniu sw1 naciśnięcie sw2/sw3 powoduje anulowanie wykonywania programu dla sw1 i wybranie programu dla sw2/sw3.
I jeszcze jedno, jeżeli zwolnię portb.3 (wybór poz_menu zrobię z diodami s+ i s-),czy jest możliwość dołożenia tam anody 3 wyświetlacza i wyświetlenia na nim który czas ustawiamy, lub podłączyć LED-y i wysterować czas_zadany1 segment A,czas_zadany2 segment G, czas_zadany3 segment D (i tu podłączę diody LED)
3x timer V2
zmienilem przyciski teraz menu jest przez diody z sw+/sw- i uzyskany port
portB.5 przepisałem jako anoda trzeciego wyświetlacza oraz dodałem obsługę
jak wyswietlic poz_menu 0/1/2/3 jako 0,1,2,3. No i oczywiście jeszcze to co pisałem wcześniej z przyciskami.
3x timer V2
trochę dodałem,utworzyłem zmienną wysw_poz_menu i dodałem do pętli gł. oraz wyświetlania,działa to przy ustawianiu czasów,jednak co dopisać aby wyświetlało równiż przy działaniu sw1/sw2/sw3, i zostanie tylko problem "czy jest możliwość ustawienia przycisków SW1,SW2,SW3 aby działały tak jak w poprzedniej wersji to znaczy wciśnięcie SW1 -załączenie,ponowne wciśnięcie anuluje odliczanie i możliwość wyboru kolejnego itd.,ewentualnie np. po wybraniu sw1 naciśnięcie sw2/sw3 powoduje anulowanie wykonywania programu dla sw1 i wybranie programu dla sw2/sw3.
3x timer V2
No to tak ze sobą popiszę.Wyświetlanie poz_menu mam już zrobione,może trochę bez ładu i składu ,ale działa prawidłowo.Dodałem kolejną zmienną wysw_poz ,a wprogramie
no i w pętli głównej
Mirley,podpowiedz mi jak mam wybrnąć z tymi przyciskami,nic mi nie przychodzi do głowy
-ustawienie przycisków SW1,SW2,SW3 aby działały tak jak w poprzedniej wersji to znaczy wciśnięcie SW1 -załączenie,ponowne wciśnięcie anuluje odliczanie i możliwość wyboru kolejnego itd.,ewentualnie np. po wybraniu sw1 naciśnięcie sw2/sw3 powoduje anulowanie wykonywania programu dla sw1 i wybranie programu dla sw2/sw3.
Jak jest możliwoś to chciałbym przetestować obie wersje i dopiero wybrać