Mam działający programik timera zrealizowny na attiny2313, czasy są liczone na timer1 i teraz mam pytanie jak zrealizować aby z poz_menu można było zmienić wartość Dzielnik_1 aby odliczał w sek. lub min. Case &B00000100: 'poz menu(2 pozycje 0/1/) Incr Poz_menu If Poz_menu = 2 Then 'ilosc poz_menu 0/1/) Poz_menu = 0 na Case &B00000100: 'poz menu(2 pozycje 0/1/) Incr Poz_menu If Poz_menu = 3 Then 'ilosc poz_menu 0/1/2) Poz_menu = 0 ale jak dalej,czy tak będzie można to rozwiązać, dołączam cały kod '*******************1*timer attiny 2313********************* '*******************marekszy******************************** '*******************konfiguracja uC************************* $regfile = "attiny2313.dat" $crystal = 10000000 Config Portb = &B11111111 : Portb = &B11111111 Config Portd = &B01111000 : Portd = &B01101111 Config Timer0 = Timer , Prescale = 256 Enable Timer0 : On Timer0 Prztimer0 Config Timer1 = Timer , Prescale = 256 Enable Timer1 : On Timer1 Prztimer1 Enable Interrupts Przekaznik1 Alias Portd.4 'start PK1 out Led_menu Alias Portd.3 'miganie Declare Sub Loading 'animacja ladowana do LCD w trakcie startu Loading '*****************konfiguracja koniec************************ '*****************zmienne poczatek*************************** Dim Flaga_4ms As Bit , Flaga_1s As Byte 'flagi Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte Dim Czas_zadany As Word Dim Poz_menu As Byte Dim Dzielnik_1s As Byte , Dzielnik_1min As Byte , Dzielnik_1 As Byte Dim Wysw As Word , Wysw1 As Byte , Wysw10 As Byte Dim Mux As Byte Dim Czas_odliczony As Byte Dim Stan_pracy As Byte Dim Odliczanie As Byte Dim Wysw_poz As Byte Dim Migaj As Byte Dim Mig As Bit , Led_menu As Bit '*****************zmienne koniec***************************** '*****************warunki poczatek*************************** Readeeprom Czas_zadany , 2 If Czas_zadany > 99 Then 'gdy czas wiekszy od 99s wczytaj 15s Czas_zadany = 15 End If '****************warunki koniec****************************** '****************petla glowna******************************** Do If Flaga_4ms = 1 Then Flaga_4ms = 0 Select Case Poz_menu Case 0: Wysw = Czas_odliczony Migaj = 0 Case 1: Wysw = Czas_zadany Migaj = 1 End Select Gosub Wyswietlanie Gosub Przyciski Gosub Sterowanie Gosub Miganie End If Loop End '*****************petla glowna koniec********************** '*****************przerwanie timer0************************ Prztimer0: Timer0 = 100 Flaga_4ms = 1 Incr Dzielnik_1s If Dzielnik_1s = 250 Then Dzielnik_1s = 0 Toggle Mig If Odliczanie = 1 Then Led_menu = Mig End If End If Return '*****************przerwanie timer0 koniec***************** '*****************przerwanie timer1************************ Prztimer1: Timer1 = 26474 Flaga_1s = 1 Incr Dzielnik_1 If Dzielnik_1 = 60 Then '1s x 60 =1min Dzielnik_1 = 0 If Czas_odliczony > 0 Then Decr Czas_odliczony If Czas_odliczony = 0 Then Stan_pracy = 0 End If End If End If Return '*****************sterowanie poczatek********************** Sterowanie: Select Case Stan_pracy Case 0: 'co ma byc zal/wyl przy menu 0 (STOP) Reset Przekaznik1 Case 1: 'co ma byc zal/wyl przy menu 1 (SW_1) Set Przekaznik1 End Select Return '*****************sterowanie koniec************************ '*******************miganie******************************** Miganie: Select Case Migaj Case 0: Reset Led_menu Case 1: If Mig = 1 Then Set Led_menu Else Reset Led_menu End If End Select Return '*****************wyswietlanie***************************** Wyswietlanie: Incr Mux If Mux = 2 Then Mux = 0 Select Case Mux Case 0: Set Portd.5 Wysw10 = Wysw / 10 Wysw10 = Lookup(wysw10 , Tabela) Portb = Wysw10 Reset Portd.6 Case 1: Set Portd.6 Wysw1 = Wysw Mod 10 Wysw1 = Lookup(wysw1 , Tabela) Portb = Wysw1 Reset Portd.5 End Select Return '*****************wyswietlanie koniec********************** '*****************przyciski poczatek*********************** Przyciski: Sw = Pind And &B00000111 'maskowanie nieużywanych pinów If Sw <> &B00000111 And Stan_sw = Sw Then Incr Licznik_sw If Licznik_sw = 100 Then Licznik_sw = 0 Select Case Stan_sw Case &B00000011: 'start If Poz_menu = 0 Then If Stan_pracy = 0 Then Stan_pracy = 1 Czas_odliczony = Czas_zadany Dzielnik_1 = 0 Else 'Stan_pracy = 1 'ponowne nacisniecie sw odlicza od nowa 'Czas_odliczony = Czas_zadany 'Dzielnik_1 = 0 Stan_pracy = 0 'ponowne nacisniecie sw wylacza Czas_odliczony = 0 End If End If Case &B00000100: 'poz menu(2 pozycje 0/1/) Incr Poz_menu If Poz_menu = 2 Then 'ilosc poz_menu 0/1/) Poz_menu = 0 Writeeeprom Czas_zadany , 2 'zapis do pamieci eeprom End If Case &B00000101 'sek + pd.0 Select Case Poz_menu Case 1: If Odliczanie = 0 Then If Czas_zadany < 99 Then Incr Czas_zadany 'ograniczenie do 99s Else Odliczanie = 0 End If End Select Case &B00000110 'sek - pd.1 Select Case Poz_menu Case 1: If Odliczanie = 0 Then If Czas_zadany > 0 Then Decr Czas_zadany 'gdy > 1 ograniczenie do 1s, Else '> 0 praca start/stop bez odliczania czsu Odliczanie = 0 End If End Select End Select End If Else Stan_sw = Sw Licznik_sw = 80 End If Return '***************animacje dla LCD**************************************** Sub Loading : 'program animacji startowej Waitms 500 Set Portd.6 Set Portd.5 Wysw10 = 254 Portb = Wysw10 Reset Portd.6 Reset Portd.5 Waitms 250 Wysw10 = 251 Portb = Wysw10 Waitms 250 Wysw10 = 239 Portb = Wysw10 Waitms 250 Wysw10 = 191 Portb = Wysw10 Waitms 250 Wysw10 = 127 Portb = Wysw10 Waitms 250 Wysw10 = 253 Portb = Wysw10 Waitms 250 Wysw10 = 247 Portb = Wysw10 Waitms 250 Wysw10 = 32 Portb = Wysw10 Waitms 1000 Return End Sub '**********************tabela************************* Tabela: Data 40 , 235 , 50 , 162 , 225 , 164 , 36 , 234 , 32 , 160 'znak: 0 1 2 3 4 5 6 7 8 9 'Tabela_1: Data 254 , 251 , 239 , 191 , 127 , 253 , 247 'znak: a b c d e f g 'tabela_2: Data 254 , 250 , 234 , 170 , 42 , 40 , 32 'znak: a ab abc abcd abcde abcdef abcdefg schematu nie daje poniewarz wszystko widać z programu,no chyba ,że jak będzie potrzebny to dołączę.
|
|||
Re: Timer na ATTINY2313
Jeszcze raz spokojnie i po polsku wyjaśnij co chcesz osiągnąć?
Takim wiesz, normalnym językiem.
Moja strona w powijakach
Timer na ATTINY2313
w chwili obecnej czas jest odliczany w min., gdy dzielnik_1 = 1 to wtedy chyba odlicza w sek.
a ja chcę mieć możliwość zmiany z poz_menu dzielnik_1 aby liczył sek. lub min. oraz aby pamiętał po resecie czy odliczał min. czy też sek.
Re: Timer na ATTINY2313
Masz dwa wyjścia.
Albo napiszesz warunek na przykład w ten sposób ustalając podstawę czasu jako 1sekunda:
Albo zmienisz podstawę czasu ustalając przerwanie co 1 sekundę lub co jedną minutę i wtedy mogło by wyglądać to tak:
Obydwa rozwiązania czysto teoretyczne i wymyślone w mniej niż 10 sekund. Nie ogarniam Twojego kodu i nie do końca kojarzę jaki masz zamysł.
Moja strona w powijakach
Timer na ATTINY2313
To co napisałeś to nie jes to o co mi chodzi, ustawienie dwóch flag dla min. i sek. to chyba będzie za proste,
gdy naciśniemy SW menu zwierający do masy Pd.0 i Pd.1 wchodzimy do pirwszej poz_menu w której wykonujemy ustawianie czasu jaki ma odliczyć,
oraz
kolejne naciśnięcie SW menu przejdzie do 2 poz_menu gdzie chcę ustawiać dzielnik_1 na zliczanie sek. lub min. czyli dzielnik_1 = 1 lub dzielnik_1 = 60
i ponowne naciśnięcie SW menu wychodzi z ustawień i zapisujemy wszystko
Re: Timer na ATTINY2313
To tak jak pisałem. Zastosuj zmianę podstawy czasu z 1 sekunda na 1 minuta ustawiając w case 2 flagę na 0 lub 1.
Teraz przerwanie albo tak:
Albo lepiej utrzymać podstawę czasu co 1 sekundę i napisać przerwanie jak niżej:
Moja strona w powijakach
Timer na ATTINY2313
To ma sens, dzięki ,jutro przećwiczę w praktyce.
Timer na ATTINY2313
Timer działa już bez problemów, pierwsze naciśnięcie SW3 wchodzi do ustawiania czasu ,ponowne naciśnięcie wchodzi do ustawienia dzielnika (odliczanie w sek. lub min.),kolejne powoduje wyjście z menu i zapis ustawionego czasu i dzielnika min/sek. Przycisk start/stop wiadomo co robi. po małej modyfikacji w obsłudze przycisków Timer pracuje na zasadzie,że każde naciśnięcie START w trakcie odliczania rozpoczyna odliczanie od nowa. Po włączeniu zasilania najpierw jest mała animacja na wysw.LED, następnie jest gotowy do pracy.Dołączam cały kod oraz schemat.CKDIV8 -wewnętrzny podział zegara przez 8 jest wyłączony,kwarc zewn.10MHz. Nie testowałem jeszcze z przekaźnikiem, ale dioda LED sygnalizuje załączenie wyjścia.
Podziękowania dla matrix-a za szybką pomoc.
Re: Timer na ATTINY2313
Nie ma kłopotu. Zawsze pomogę jeśli potrafię. Tylko teraz jeszcze się przyznaj co to jest?
Moja strona w powijakach
Timer na ATTINY2313
Tak jak wcześniej pisałem, zwykły prosty TIMER odliczający do 99sek lub 99min ,no może trochę bardziej rozbudowany i zbajerzony z możliwością wszechstronnego zastosowania do sterowania co tylko będziesz chciał (od oświetlenia klatki schodowej po sterowanie silnikami,pompami,podgrzewaczami itd),na 100% nie do sprzedaży,przecież nie wrzuciłbym schematu i wsadu, po prostu potrzeba chwili z prostą możliwością konfiguracji z przycisków.
Jeszcze raz dzięki, do następnego problemu.
Problem
Witam, mam problem spodobał mi sie twój projekt. ale próbowałem trochę go przerobić i nic mi nie wychodzi męczę się już tydzień z tym. chce zrobić tak, mam 2 wyświetlacze 7 segmentowe z wspólną anodą na nich miało być wyświetlane sekundy ustawiane swichami(dwoma up i down dodanie sekundy i odejmowanie) potrzebuje tylko sekundy, ale to nie ma być minutnik lub sekundnik tylko aby taki czas jaki ustawie na wyświetlaczu np 25s ma po 25s uruchomić przekaźnik i tak w kółko oczywiście gdy kliknę start/stop to będzie start/stop tego tak zwanego interwałometru napisał byś mi kod albo pomógł napisać ?
Odp. Problem
Masz to już poskładane według tego schematu?
BARTek
Moja strona
Na razie nie
Nie ale mam trochę inaczej, tak się "uczyłem" piny:tranzystory: w1 = PD0, w2 = PD1,ekrany: PB7 - A . . . PB1 - G te litery to segmenty wyświetlacza. zrobiłem tak ponieważ znałem kody do sterowania cyframi, oczywiście mogę złożyć tak jak jest schemat ale jeśli chciałeś wiedzieć to proszę.
Tak
złożone, ale nie potrafię przerobić tego tak jak ja chce pomoże ktoś ?
Odp. Timer na ATTINY2313
Ma działać od 1 do 99 sec. Przyciski góra, dół i start/stop. Po starcie ma na przemian włączać i wyłaczać coć z zadanym czasem tam i z powrotem? Napisz jeszcze czy ma odliczac na wyswietlaczu czy wartośc ma tam byc stała a na przykład kropka ma pokazywać że coś działa? Napisz jak najdokładniej to Ci to postaram się napisać z opisem :P
BARTek
Moja strona
Timer na ATTINY2313
Dzięki ze mi pomożesz. nigdzie nie ma dobrych poradników na temat multipleksowania i dlatego zdesperowany szukam jakiegoś wzoru, kodu. czyli tak moze na początek powiem co to jest, a wiec tak chciałem zrobić tak zwany interwałometr do aparatu Canon 1100D czyli ustawiam czas i robi zdjęcia przez np 3 godz w odstępach 20 s, potem montuje z tych zdjęć film i powstaje Timelapse bardzo ciekawa technika fotografii. a teraz wyjaśnię działanie jakie sobie wyobrażałem:2 wyświetlacze 7 segmentowe z wspólną anodą maksymalny czas to 99 s (wystarczająco) pod jakie chcesz piny 3 przyciski up down start/stop i klawiszami up down ustawiam sekundy np:15 klikam start i zaczyna sie odliczać gdy dojdzie do zera włącza się przekaźnik na około 1 s (nawet mniej moze być) i po sekundzie się wyłącza, dalej kod znowu odlicza 15 s i tak w kółko oczywiście gdy kliknę stop przestaje i tyle
Odp.Timer na ATTINY
To powinno działać. Specjalnie taki prosty,żeby było widać o co chodzi.
Timer0 ustawiony jest w tryb CTC także nie trzeba go ładować w obsłudze przerwania. Na razie jest napisany pod schemat Marka. Nie budowałem tego ale powinno działać ;)
Przyciskami można zmieniać wartość Interwału. Na razie jest wpisany testowo na sztywno (na początku) na 15sec. Po teście można pokusić się o zapisywanie do eeprom. Sprawa jest prosta. Dopóki wartość Odlicz jest większa od zera to co sekundę odejmowane jest jeden. Kiedy Odlicz osiąga zero włączany jest przekaźnik który będzie wyłączony za sekundę bo wartość Odlicz znów będzie większa od zera.
Przycisk Start przełącza tryb pracy albo ustawiania. Wprowadzenie stałych Odliczaj i Ustaw jest by kod był przejrzystszy i łatwiejszy do czytania.
Multipleksowanie jest proste. Po prostu co 5ms podawany jest plus na inny wyświetlacz.
Jak byś miał inaczej piny i kłopotliwe by było ich przepięcie to pozmieniamy w kodzie. Ten ma pokazać idee działania. Możesz też skorzystać z wewnętrznego oscylatora 8MHz zmieniając wartość dla Timera0.
BARTek
Moja strona
Odp.Timer na ATTINY
Działa jest dobrze, dzięki wielkie, teraz jak mam bazę muszę przeanalizować kod i spróbuje zrozumieć co i jak a mam jeszcze jedno pytanie jak zrobić taką funkcje inteligentnego przycisku i go dodać do tego kodu chodzi mi o to by gdy klikasz dodaje liczbę a gdy trzymasz przycisk to dodaje liczby ale szybko
Odp.Timer na ATTINY
i jest jeszcze jedna sprawa przekaźnik u mnie jest ciągle włączony jak zrobić aby się włączał stanem wysokim
Odp. Timer na ATTINY2313
Set Przekaźnik
alboPrzekaźniki = 1
oznacza stan wysoki. Reset Przekaźnik albo Przekaźnik = 0 oznacza stan niski.Szukasz w kodzie za pomocą Ctrl + F3 hasła "Przekaznik" i zamieniasz Set na Reset a Reset na Set. Naciskając F3 znajdziesz następne. Opisałem taki sposób bo się przydaje w większych kodach i niczego nie przegapisz.
W tym trzeba też na samym początku zamienić
Portd.4 = 1
naPortd.4 = 0
Ten inteligentny przycisk to łatwe, ale może chcesz sam coś pomyśleć ;) Jak nie to to też machnę :)
Dlatego na początku lepiej wypytać o wszystkie opcje bo dopisywanie bywa bardzej kłopotliwe niż napisanie od początku. Ten kodzik jest krótki wiec nie ma sprawy.
BARTek
Moja strona
Odp.Timer na ATTINY
nie mam pomysłu jak to zrobić :D jak możesz to ok xD
Odp.Timer na ATTINY
Zobacz bo wrzuciłem schemat i kod do czasowego wył.cyklicznego
jest w Strona główna ? Projekty inne
Jakiego wyświetlacza użyłeś?
Jakiego wyświetlacza użyłeś? Masz może biblioteki tego wyświetlacza?
wyświetlacz
Zwykły wyświetlacz LED 2x7 segmentów ze wspólną anodą.Jakie biblioteki? Po co ?
W eagle nie ma takiego
W eagle nie ma takiego wyświetlacza,jakim programem wgrywałeś wsad?
Program
Jakim programem wgrałeś ten wsad? W eagle nie ma takiego wyświetlacza ale już sobie z tym poradziłem.
Program
Jakim programem wgrałeś ten wsad?
Odp.Timer na ATTINY
Programem mkAVR Calculator , tylko musisz skompilować wcześniej program w Bascom-ie i wgrywasz plik hex.
Pamiętaj aby dobrze ustawić fusbity, CKDIV8 ma być wyłączony.
A jak skompilować w Bascom-ie
A jak skompilować w Bascom-ie nie ma nigdzie pliku hex chyba że przez błąd po kompilacji (Error : 375 Line : 38 Duplicate definition [LED_MENU] , in File : C:\Users\Piotrek\Desktop\timer 1.bas)
Odp.Timer na ATTINY
Nie wiem co za błąd masz, ale wtedy na pewno nie utworzy pliku hex, napisz który kod ciebie interesuje ,jak wrócę w nocy do domu to sprwdzę.
Daj adres e-mail to podeślę tobie gotowy wsad.
tutaj poprawiony kod ale nie sprawdzałem
Dziękuje kod nie wyświetla
Dziękuje kod nie wyświetla błędu wgrałem do procesora.Jak byś mógł to przyślij plik hex na adres zachowuje się timer przy naciśnięciu i trzymaniu przycisku start/stop? Chodzi mi o to aby przy zwarciu przycisku odliczył czas i wyłączył przekaźnik do następnego zwarcia przycisku.
Odp.Timer na ATTINY
No w takim przypadku trzeba będzie troszeczkę przerobić w kodzie, teraz działa tak ,że naciśnięcie start startuje odliczanie ,a kolejne zeruje odliczanie. Działa to tobie tak na marginesie.
Jak znajdę chwilę to przerobię i podeślę tobie do testu.
Wielkie dzięki
Wielkie dzięki
Timer
Witam
Mógłbym prosić o przerobienie ostatniego kodu żeby po włączeniu zasilania przekaźnik był rozwarty po naciśnięciu start nadal pozostał rozwarty do momentu zakończenia odliczania.
timer
Na spokojnie damy radę, jak ma działać przycisk start?
naciskamy na chwilę i tom dr startuje ,po doliczonym czasie załącza Pk?
Jak ma działać Pk, zalaczy po upływie czasu i co dalej, ma tak sobie trzymać?
Przekaźnik normalnie ma być
Przekaźnik normalnie ma być wyłączony po naciśnięciu START i trzymaniu ma załączyć przekaźnik dopiero po zakończeniu odliczania.
re:timer
Proszę bardzo
niżej plik hex
/files/user_img/u758/timer%20x1%20attiny2313%2002.2016r%20V4.zip
Dziękuje działa super.
Dziękuje działa super.
timer_v4
Witam !!
męczę się i męczę , potrzebuję pomocy by ostatni program przerobić tak by odliczał 0,1s do 9,9s bez żadnych dzielników i dodatkowych menu. Chodzi mi o to:przy wcisnieciu i trzymaniu "START" PK1wylaczony i zaczyna odliczac czas
gdy czas = 00 wlacza PK1(PK1 zalaczony do czasu puszczenia przycisku "START)
po puszczeniu przycisku wyswietla czas zadany a PK1 jest wylaczony
puszczenie przycisku "START" w trakcie odliczania powoduje ,ze czas powraca do zadanego
będę wdzięczny jeśli mi ktoś podpowie jak wywalić dzielniki i ustawić timer by liczył 0,1s
Pozdrawiam !!
re.timer
Najłatwiej zmień czasy timera tutaj ,aby liczył 0,1s
Prztimer1:
Timer1 = 26474
Flaga_1s = 1
re.timer
zastanawiało mnie zawsze czemu takie fajne strony znikają, ale co się dziwić,każdy tylko "potrzebuję, albo zróbcie mi", a później jak dostanie to ani dzięki ,ani pocałuj mnie w d..., zero opisu czy zadziałało, jak to zrobił i co jeszcze poprawił (np.wyświetlanie z przecinkiem).
Aż się chce pomagać.
Pozdrawiam
re.timer
Bo wiesz, większość szuka rozwiązania na raz. Tzw "pomóż mi" a później po osiągnięciu celu znikają jak kamfora. Ja obecnie nie robię żadnego projektu więc się nie wypowiadam. Praktycznie cały mój wolny czas zabiera praca, a po powrocie już na nic nie mam ochoty.
Ale coś tam szykuję to się z pewnością podzielę.
Moja strona w powijakach