czasowy wył.cykliczny


Witam, chciałbym wykonać czasowy wyłącznik cykliczny załączający przekaźnik tzn.załączony (mm.ss), pauza-wył. (mm.ss)i tak w kółko.Zanim narysuję schemat proszę o radę czy użyć Atmegi8 czy też starczy ATTINY2313, czasy mają być ustawiane niezależnie za pomocą przycisków z zapisem oraz wszystko wyświetlone na LCD2x16.
W późniejszym czasie będę potrzebowł pomocy w napisaniu tego programu.
Z góry dzięki i pozdrawiam.




Portret użytkownika mirley

Re: timer

Na tiny powinno starczyć miejsca ale skoro będziesz robił od razu płytkę to lepiej daj M8. Koszt niewiele większy a wtedy na 100% się zmieści program i jeszcze inne rzeczy ewentualnie będzie można dorzucić

-

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 marekszy

czasowy wył.cykliczny

Ok,zrobię to na M8,różnica w kosztach nieznaczna,do poniedziałku postaram się wrzucić schemat i jakiś początek programu.Na razie dzięki.

Portret użytkownika marekszy

czasowy wył.cykliczny

Mam jeszcze jedno pytanie, ile najlepiej użyć przycisków do nawigacji,3 czy też lepiej 5 (na M8 jest dosyć wyjść).

Portret użytkownika mirley

Re: Przyciski

jak masz 3 przyciski to będzie SET, + i -... normalnie np + będzie robił jako start czy cos tam a po kliknięciu SET powoduje ustawianie wartości. Kolejne SET przechodzą do kolejnych pozycji i jak dochodzisz do końca to będzie zapis i wyjście z menu. Dodatkowe dwa przyciski mogą być jak chcesz osobno np zrobić start, stop czy tez pauzę

-

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 marekszy

czasowy wył.cykliczny

Witam ponownie.Nie rysowałem nowego schematu poniewarz Twój od timera fotograficznego z małymi poprawkami idealnie się nadaje do tego celu oraz początek programu także.
S1,2,3 to tak jak pisałeś SET,+/-, S4,5 załącz/wyłącz odliczanie,na PD0 i PD1 dałbym LED-y do sygnalizacji zał/wyłącz, a na PB0 zał.podświetlenia LCD np.na 30sek. po naciśnięciu jakiegokolwiek przycisku.
Niestety nie wiem jak dalej ruszyć

 ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111101
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Sw_port Alias Pind
Triak Alias Portb.2
Triak2 Alias Portb.1
Buzzer Alias Portd.1
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Tryb As Byte , Wyswietl As Byte
Dim Odliczanie As Bit , Poz_ust As Byte
Dim Licz_01s As Word , Licz_01s_u As Word , Dzielnik As Byte
Dim Help As Word
Dim Flaga_4ms As Bit
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim Autosave As Byte
   '* * * * * * * * * Zmienne Koniec * * * * * * * * * * * * * * *
 
Lcd "TIMER ON/OFF"
Lowerline
Lcd "WERSJA TEST."
Wait 2
Reset Buzzer
Waitms 200
Set Buzzer
 
'*******przerwanie timer 0*****************
Prztimer0:
Timer0 = 5
Flaga_4ms = 1
If Odliczanie = 1 Then
Incr Dzielnik
If Dzielnik = 25 Then
Dzielnik = 0

Co Ty na to?

Portret użytkownika mirley

Re: Timer

Popatrz do programów z timerami na mojej stronie. Przeanalizuj coś żebyś wiedział co piszesz.

W timerze brakuje return na końcu obsługi przerwania oraz end ifów. Nie masz też w ogóle pętli głównej, powinna być zaraz po Set Buzzer. W pęli głownej daj sprawdzanie warunku czy flagi zostały ustawione. Osobiście zrobił bym drugą flagę co 1s i tam odliczał czas.

Na początku zajmij się tym żeby zrobić wszystkie potrzebne zmienne i napisać obsługę LCD żeby poprawnie wyświetlał czas z tych zmiennych

-

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 marekszy

czasowy wył.cykliczny

witam ponownie.Przeanalizowałem listingi wszystkich Twoich timerów ,jednak jeszcze o wiele za mało z tego rozumiem.Każdy ma w sobie całkowicie coś innego i niestety strasznie się motam.Na początek mam coś takiego

 ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111101
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Sw_port Alias Pind
Przekaznik1 Alias Portb.2
Przekaznik2 Alias Portb.1
Dioda_zielona Alias Portd.1
Dioda_czerwona Alias Portd.0
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Tryb As Byte , Wyswietl As Byte
Dim Odliczanie As Bit , Poz_ust As Byte
Dim Licz_1s As Word , Licz_1s_u As Word , Dzielnik As Byte
Dim Flaga_4ms As Bit
Dim Flaga_1s As Bit
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim Przekaznik1 As Bit , Przekaznik2 As Bit
Dim Dioda_zielona As Bit , Dioda_czerwona As Bit
Dim Autostart As Word
Dim Autosave As Byte
   '* * * * * * * * * Zmienne Koniec * * * * * * * * * * * * * * *
   '*****************warunki poczatkowe***************************
 Readeeprom Licz_1s_u , 1
 Licz_1s = Licz_1s_u
 Wyswietl = 1
 
 '*******************warunki poczatkowe koniec**************
 
Lcd "TIMER CYKLICZNY"
Lowerline
Lcd "WERSJA TEST.1"
Wait 50
Reset Przekaznik1
Reset Przekaznik2
Reset Dioda_zielona
Reset Dioda_czerwona
Waitms 200
Set Przekaznik1
Set Przekaznik2
Set Dioda_zielona
Set Dioda_czerwona
 
'*******************petla glowna************************
Do
If Flaga_4ms = 1 Then
   Flaga_4ms = 0
   Gosub = Wyswietlanie
   Gosub Przyciski
 
   If Autosave < 250 Then
     Incr Autosave
     If Autosave = 250 Then
       Writeeeprom Licz_1s_u , 1
     End If
    End If
   End If
  Loop
  End
  '***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 5
 Flaga_4ms = 1
 If Odliczanie = 1 Then
  Incr Dzielnik
  If Dzielnik = 25 Then
   Dzielnik = 0
 
   If Licz_1s = 0then
     Gosub Zatrzymaj_liczenie
     Reset Przekaznik1
     Reset Przekaznik2
     Reset Dioda_zielona
     Reset Dioda_czerwona
     Waitms 200
     Set Przekaznik1
     Set Przekaznik2
     Set Dioda_zielona
     Set Dioda_czerwona
     Waitms 200
     Reset Przekaznik1
     Reset Przekaznik2
     Reset Dioda_zielona
     Reset Dioda_czerwona
     Waitms 200
     Set Przekaznik1
     Set Przekaznik2
     Set Dioda_zielona
     Set Dioda_czerwona
     Waitms 200
     Reset Przekaznik1
     Reset Przekaznik2
     Reset Dioda_zielona
     Reset Dioda_czerwona
     Waitms 200
     Set Przekaznik1
     Set Przekaznik2
     Set Dioda_zielona
     Set Dioda_czerwona
     Waitms 200
    Else
     Decr Licz_1s
     Wyswietl = 2
    End If
 
   End If
  Else
  Dzielnik = 0
  End If
 Return
 '*************************przerwanie timer 0 koniec**************

Napisz co z tego poprawić, a co wywalić i jak dalej.
Dopisane diody LED będą miały za zadanie sygnalizację pracy timera.
Wyświetlacz LCD PRACA PAUZA
mm:ss mm:ss
natomiast podczs działania odliczają się mm:ss pracy,a następnie mm:ss pauzy.
Przeszukałem internet i niestety nic podobnego nie znalazłem,jedynie jeden układ ,ale to na pic16F628A http://www.elektroda.pl/rtvforum/topic2004873.html
Pozdrawiam.

Portret użytkownika mirley

RE: timer

Kompilowałeś w ogóle ten program? jakie masz mieć zakresy odmierzanych czasów i przerw?

-

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 marekszy

RE: timer

Nie ,jeszcze nie kompilowałem, a czsy to mm:ss dla pracy i dla przerwy ,w zależności jak pasuje, może być nawet 99min:59sec.

Portret użytkownika marekszy

czasowy wył.cykliczny

po kompilacji wyskakują błędy do lini 126:" '*************************przerwanie timer 0 koniec**************"
ERROR:61 LINE:126 Label not found [=WYSWIETLANIE ]
ERROR:61 LINE:126 Label not found [PRZYCISKI]
ERROR:61 LINE:126 Label not found [PRZYCISKI]
ERROR:61 LINE:126 Label not found [ZATRZYMAJ_LICZENIE]
ERROR:61 LINE:126 Label not found [ZATRZYMAJ_LICZENIE]

Portret użytkownika mirley

Re: Timer

No włąśnie do tego zmierzam.... masz jakieś fragmenty i zrobiłą ci się strona kodu a nic z niczym nie pasuje.... zacznij od początku, zrób tak aby się kompilowało i narazie liczyło sobie czas do przodu..np:

 ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111101
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik As Byte
Dim Flaga_4ms As Bit
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
     Gosub Wyswietlanie
 
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 250 Then '250*4ms = 1s
   Dzielnik = 0
   incr Licz_1s
 End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
  Cls
  Lcd Licz_1s
Return
'******************************************************

Najpierw próbuj to uruchomić, potem musisz dołożyć obsługę klawiatury z mozliwością ustawiania dwóch czasów ale nie wszystko na raz

-

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 marekszy

czasowy wył.cykliczny

wyświetlacz faktycznie zlicza sekundy, jednnak są one ledwie widoczne i pulsują, nawet na max kontrast.Ustawiłem fusebit A987 na zewn.16MHz . 1111:1111 external XTAL, fusebit H na 0:CKOPT0.Jak dopiszę wyświetlanie napisu na początku to jest widoczny normalnie.
Co może być przyczyną?

Portret użytkownika mirley

Re: LCD

Za szybko jest zrobione wyświetlanie.... sprawdź teraz:

Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
     'tu potm da się przyciski
 
  End If
  If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 250 Then '25*4ms = 100ms
   Dzielnik = 0
   Incr Dzielnik2
   If Dzielnik2 = 10 then
     Dzielnik2 = 0
     incr Licz_1s
   end if
 End If
Return

Do zmiennych trzeba będzie dorzucic jeszcze flagę 100ms i dzielnik2

-

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 marekszy

czasowy wył.cykliczny

Dopisałem tak jak radziłeś, niestety teraz nic nie wyświetla,program kompiluje się bez problemu.

'* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit
Dim dzielnik2 As Byte

jeszcze jedno pytanie,jak tobie wyszło w tej poprawce 100ms
 Incr Dzielnik
 If Dzielnik = 250 Then '25*4ms = 100ms

skoro przedtem było

Incr Dzielnik
 If Dzielnik = 250 Then '250*4ms = 1s

Portret użytkownika mirley

Re; Wyłącznik

Nie wyszło mi bo się pomyliłem i zapomniałem zmienić... ma być tam 25

-

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 marekszy

czasowy wył.cykliczny

po zmianie na 25 też nie ruszył,dopiero po zmianach w "przerwanie timer 0" wystartowało,wyświetla i liczy dobrze

 '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
 
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'****************petla glowna********************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
                          'tu dodamy potem przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1                                          'to dopisałem
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    Incr Licz_1s
  End If
 End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
Cls
  Lcd Licz_1s
Return
'******************************************************

co zrobić dalej,jak ustawić na wyświetlaczu czasy mm:ss aby odliczać

Portret użytkownika mirley

Re: Licznik

 '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim on_licz as Word, off_licz as Word
Dim out_state as bit
 
'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 
out_state = 0 
on_licz = 6
off_licz = 3
 
'****************petla glowna********************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
                          'tu dodamy potem przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1                                          'to dopisałem
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    Incr Licz_1s
    if out_state = 0
      if Licz_1s >= off_licz then 
        Licz_1s = 0
        portb.2 = 1
        out_state = 1
      end if
    else
      if Licz_1s >= on_licz then 
        Licz_1s = 0
        portb.2 = 0
        out_state = 0
      end if
    end if
  End If
 End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
Cls
  Lcd Licz_1s
Return

Sprawdź coś takiego powinno liczyć włacz wyłacz cyklicznie z ustawionymi czasami off_licz i on_licz w sekundach. Potem zrobi się wyświetlanie żeby pokazywało mm:ss

-

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 marekszy

czasowy wył.cykliczny

niestety nie mogę skompilować jest error do

 if out_state = 0

Error:46 Assignment error [UT_STATE:0 0:112]
i jeden End If na końcu za dużo.

Portret użytkownika mirley

Re: wyłącznik

...nie widzisz że brakuje "Then". Ma być:

if out_state = 0 Then

-

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 marekszy

czasowy wył.cykliczny

Fakt,przegabiłem, twraz odlicza cyklicznie 6s/3s załączając i wyłączając portb.2 .a jak dalej z wyświetlaniem mm:ss, oraz przyciskami.

Portret użytkownika mirley

Re: Lcd

Z wyświetlaczem trzeba powalczyć w pierwszej kolejności i zamienić sekundy na minuty: sekundy.... nie powinno to być problemem. Zadeklaruj jakaś zmienną typu Word pomocniczą i do niej najpierw wpisz licznik /60 i wyświetl na LCD, potem dopis : a na końcu do zmiennej pomocniczej wpisz licznik Mod 60 co da wartość reszty z dzielenia przez 60 czyli sekundy... na końcu wtpisz to na LCD. Jeszcze można zrobić 0 wiodące za pomocą jednego if'a jak wartość sekund lub minut jest mniejsza do 10 to dopisujesz 0 przed wyświetleniem wartości.

W praktyce jak dojdą przyciski będzie to bardziej skomplikowane ale narazie pobaw się z LCD. Może wieczorem znajdę czas aby zobaczyć co napisałeś

-

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 marekszy

przktycznie to działa tak jak

przktycznie to działa tak jak powinno, zadane czasy wyświetla mm:ss,liczy prawidłowo, zmieniłem jeszcze config PORTB bo był ustawiony stan wysoki na pin1,ustawiłem na pin2 ,teraz jest już tak jak powinno.

           '*********TIMER on/off ver.testowa**************
                ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111011
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim On_licz As Word , Off_licz As Word
Dim Out_state As Bit
Dim Help As Word
 
'* * * * * * * * * * * * * *zmienne koniec * * * * * * * * * * * * * * * * * *
'***************************warunki poczatkowe********************************
Out_state = 0
On_licz = 80                                                'czas wylaczenia przekaznika,PORTB.2 wyl.
Off_licz = 45                                               'czs wlaczenie przekaznika,PORTB.2 zal.
 
'************************warunki poczatkowe koniec****************************
 Lcd "  TIMER ON/OFF"
 Lowerline
 Lcd "  wer.testowa"
 Wait 2
 
'*****************************petla glowna************************************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
                          'tu dodamy potem przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1                                          'to dopisałem
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    Incr Licz_1s
    If Out_state = 0 Then
     If Licz_1s >= Off_licz Then
      Licz_1s = 0
      Portb.2 = 1
      Out_state = 1
    End If
   Else
    If Licz_1s >= On_licz Then
      Licz_1s = 0
      Portb.2 = 0
      Out_state = 0
     End If
    End If
   End If
  End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
Cls
 Help = Licz_1s
 Help = Help Mod 60                                         'liczenie sekund
 Locate 1 , 8
 Lcd ":"
 If Help < 10 Then Lcd "0"                                  'zero wiodace,jak mniej niz 10
 Lcd Help
 Help = Licz_1s / 60                                        'liczenie minut
 Locate 1 , 6
 If Help < 10 Then Lcd "0"                                  'zero wiodace dla minut
 Lcd Help
Return
'******************************************************

i co dalej?

Portret użytkownika mirley

Re: Wyłącznik

Zaraz pod gosub wyswietlanie trzeba dać: gosub przyciski a na końcu:

Przyciski:
Sw = PIND And &B11111000             'maskowanie nieużywanych pinów
 
If Sw <> &B11111000 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 100 Then
      Licznik_sw = 0
      Select Case Stan_sw
        Case &B01111000:    'pozmenu Pd7                               
          incr poz_menu 
          if poz_menu = 3 then poz_menu = 0
        Case &B10111000:   '+sek   pd6                             
          Select Case Poz_menu
            case 1:
              incr on_licz
            case 2:
              incr off_licz
          end select  
        Case &B11011000:   '-sek pd5
          Select Case Poz_menu
            case 1:
              decr on_licz
            case 2:
              decr off_licz
          end select                            
        Case &B11101000:   '+min   pd4  
          Select Case Poz_menu
            case 1:
              on_licz = on_licz +60
            case 2:
              off_licz = off_licz +60
          end select 
        Case &B11110000:   '-min    pd3  
          Select Case Poz_menu
            case 1:
              on_licz = on_licz -60
            case 2:
              off_licz = off_licz -60
          end select      
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 80
  End If
Return
 
return

Na porcie Pd jest teraz 5 przycisków. Do lcd dopisz w drugiej linii aby pojawiły sie czasu on_licz i off_licz żebys je widział. Klikasz przycisk menu pd7 i następnie czterema pozostałymi ustawiasz + i - minuty i sekundy, klikasz drugi raz menu i ustawisz drugi czas

-

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 marekszy

czasowy wył.cykliczny

dopisałem obsługę przycisków,tylko wywaliło pełno błędów,po dopisaniu

 Dim Poz_menu As Byte 
ładnie się kompiluje.Nie mam pojęcia jak dopisać on_licz i off_licz ,aby wyświetlało menu co ustawiam.całość na chwilę obecną wygląda tak:
 '*********TIMER on/off ver.testowa**************
                ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111011
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim On_licz As Word , Off_licz As Word
Dim Out_state As Bit
Dim Help As Word
 
Dim Poz_menu As Byte                                        'dopisalem
'* * * * * * * * * * * * * *zmienne koniec * * * * * * * * * * * * * * * * * *
'***************************warunki poczatkowe********************************
Out_state = 0
On_licz = 8                                                 'czas wylaczenia przekaznika,PORTB.2 wyl.
Off_licz = 4                                                'czs wlaczenie przekaznika,PORTB.2 zal.
 
'************************warunki poczatkowe koniec****************************
 Lcd "  TIMER ON/OFF"
 Lowerline
 Lcd "  wer.testowa"
 Wait 2
'*****************************petla glowna************************************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
         Gosub Przyciski                                    'tu dodamy potem przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
 
  End If
Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1                                          'to dopisałem
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    Incr Licz_1s
    If Out_state = 0 Then
     If Licz_1s >= Off_licz Then
      Licz_1s = 0
      Portb.2 = 1
      Out_state = 1
    End If
   Else
    If Licz_1s >= On_licz Then
      Licz_1s = 0
      Portb.2 = 0
      Out_state = 0
     End If
    End If
   End If
  End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
Cls
 Help = Licz_1s
 Help = Help Mod 60                                         'liczenie sekund
 Locate 1 , 8
 Lcd ":"
 If Help < 10 Then Lcd "0"                                  'zero wiodace,jak mniej niz 10
 Lcd Help
 Help = Licz_1s / 60                                        'liczenie minut
 Locate 1 , 6
 If Help < 10 Then Lcd "0"                                  'zero wiodace dla minut
 Lcd Help
 
Return
'*********************koniec wyswietlania*********************************
'*********************przyciski********************************
Przyciski:
Sw = Pind And &B11111000                                    'maskowanie nieużywanych pinów
 
If Sw <> &B11111000 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 100 Then
      Licznik_sw = 0
      Select Case Stan_sw
        Case &B01111000:                                    'pozmenu Pd7
          Incr Poz_menu
          If Poz_menu = 3 Then Poz_menu = 0
        Case &B10111000:                                    '+sek   pd6
          Select Case Poz_menu
            Case 1:
              Incr On_licz
            Case 2:
              Incr Off_licz
          End Select
        Case &B11011000:                                    '-sek pd5
          Select Case Poz_menu
            Case 1:
              Decr On_licz
            Case 2:
              Decr Off_licz
          End Select
        Case &B11101000:                                    '+min   pd4
          Select Case Poz_menu
            Case 1:
              On_licz = On_licz + 60
            Case 2:
              Off_licz = Off_licz + 60
          End Select
        Case &B11110000:                                    '-min    pd3
          Select Case Poz_menu
            Case 1:
              On_licz = On_licz - 60
            Case 2:
              Off_licz = Off_licz - 60
          End Select
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 80
  End If
Return
 
Return
'******************koniec przyciski**********************

Portret użytkownika mirley

Re: LCD

Jak to nie wiesz jak dopisać..... tak samo jak zwykły czas napisałeś. Dopisz na razie tylko do wyświetlania na końcu:

Lowerline
Lcd On_licz
lcd " "
Lcd Off_licz

i sprawdź czy klawiatura działa i da się przestawić wartości tych czasów. Przyciskiem menu Pd7 zmieniasz czas, który ustawiasz a pozostałymi modyfikujesz wartość.

-

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 marekszy

czasowy wył.cykliczny

Teraz w drugiej lini wyświetla mi czs zadany ale tylko w sekundach np.85/45 a nie mm:ss, klawiatura działa na zasadzie,że sek.+/- przestawia prawidłowo po sekundzie natomiast min.+/- zmienia po 60sek. na przykład maksymalny czas jest wyświetlany w postaci 65535 sek. Pd7 działa prawidłowo.

Wykombinowałem coś takiego i teraz w drugiej lini z lewej strony mam mm:ss ON, a z prawej mm:ss OFF,wszystko pracuje prawidłowo

Dim Help2 As Word
Dim Help3 As Word

Help2 = On_licz
Help2 = Help2 Mod 60
 Locate 2 , 14
 Lcd ":"
 If Help2 < 10 Then Lcd "0"
 Lcd Help2
 Help2 = On_licz / 60
 Locate 2 , 12
 If Help2 < 10 Then Lcd "0"
 Lcd Help2
 
 Help3 = Off_licz
 Help3 = Help3 Mod 60
 Locate 2 , 3
 Lcd ":"
 If Help3 < 10 Then Lcd "0"
 Lcd Help3
 Help3 = Off_licz / 60
 Locate 2 , 1
 If Help3 < 10 Then Lcd "0"
 Lcd Help3
 
Return

Jest tylko problem ,jak zrobić aby maksymalny czas ustawiany był np.99min59s lub 59min59sek,ponieważ jak zjadę poniżej 00min00ss to wyświetla misię 10925.
I jeszcze w którym miejscu to zapisać do eeprom.
Równierz przydaby się jakaś strzałka po naciśnięciu menu który ustawiam czas,np w drugiej lini na środku lewo/prawo

Portret użytkownika mirley

Re: Czasy

Jasne że to napisałem wyżej będzie wyświetlało tylko sekundy.... miałeś sam sobie dopisać podział na minuty i jak widzę zrobiłęś to.... co do ograniczenia ustawień to trzeba to zrobić przy przyciskach np tak:

        Case &B11101000:                                    '+min   pd4
          Select Case Poz_menu
            Case 1:
              if On_licz < 3540 then On_licz = On_licz + 60
            Case 2:
              if Off_licz < 3540 then Off_licz = Off_licz + 60
          End Select
        Case &B11110000:                                    '-min    pd3
          Select Case Poz_menu
            Case 1:
              if On_licz > 60 then On_licz = On_licz - 60
            Case 2:
              if Off_licz > 60 then Off_licz = Off_licz - 60
          End Select
      End Select

no i podobnie dla ustawień sekund tylko będzie:

if On_licz > 0 then decr On_licz

....

oraz
if On_licz < 3600 then incr On_licz

Co do wskazań co ustawisz to już myślałem o tym wcześniej... wygodnie jest dodac miganie. W przerwaniu dodaj linijkę od migania:

......
  If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
    toggle mig  'to dodaj
    Incr Licz_1s
............

zmienna mig jest typu bit

No i teraz przy wyświetlaniu:

 locate 2,1 
 if poz_menu = 1 then if mig = 0 then lcd ">" else lcd " "
 Help3 = Off_licz
 Help3 = Help3 Mod 60
 Locate 2 , 4
 Lcd ":"
 If Help3 < 10 Then Lcd "0"
 Lcd Help3
 Help3 = Off_licz / 60
 Locate 2 , 2
 If Help3 < 10 Then Lcd "0"
 Lcd Help3

-

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 marekszy

czasowy wył.cykliczny

Mam zrobione to co kazałeś, trochę pozmieniałem i pracuje dobrze,
zmieniłem tutaj

 if On_licz > 60 then On_licz = On_licz - 60
            Case 2:
              if Off_licz > 60 then Off_licz = Off_licz - 60

na 59
 if On_licz > 59 then On_licz = On_licz - 60
            Case 2:
              if Off_licz > 59 then Off_licz = Off_licz - 60

ponieważ jak zostało 01:00 to - min nie można było zejść do 0 ,jedynie wtedy -s
,a teraz jest ok.
wyświetlanie co ustawiamy mam mm:ss < ,oraz > mm:ss
Zostało teraz tylko dodać zapis do eeprom po wyjściu z ustawień i oczywiście odczyt.
Jest jeszcze trochę problem ,bo wyświetlacz częściowo jeszcze pulsuje (nie na całości)i nie wiem co jest przyczyną,a przy 4 ms wogle część jest niewidoczna (ta co pulsuje przy 100ms).
Całość teraz wygląda tak:
   '*********TIMER on/off ver.testowa**************
                ' * * * * * * * * * Konfiguracja Uc * * * * * * * * * * *
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111011
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000011 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
  '* * * * * * * * * * Konfiguracja Uc Koniec * * * * * * * * * * * * * * * *
  '* * * * * * * * * * * * * * * * Zmienne * * * * * * * * * * * * * * * * * *
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim On_licz As Word , Off_licz As Word
Dim Out_state As Bit
Dim Help As Word
Dim Help2 As Word
Dim Help3 As Word
Dim Poz_menu As Byte
Dim Mig As Bit
'* * * * * * * * * * * * * *zmienne koniec * * * * * * * * * * * * * * * * * *
'***************************warunki poczatkowe********************************
Out_state = 0
On_licz = 80                                                'czas wylaczenia przekaznika,PORTB.2 wyl.
Off_licz = 45                                               'czs wlaczenie przekaznika,PORTB.2 zal.
 
'************************warunki poczatkowe koniec****************************
 Lcd "  TIMER ON/OFF"
 Lowerline
 Lcd "  wer.testowa"
 Wait 2
'*****************************petla glowna************************************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
     Gosub Przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
 Loop
End
'***************petla glowna koniec*****************
 
'*******przerwanie timer 0*****************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
 Incr Dzielnik
 If Dzielnik = 25 Then                                      '25*4ms = 100ms
   Dzielnik = 0
   Flaga_100ms = 1
   Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
     Toggle Mig                                             'to dodaj
    Incr Licz_1s
    If Out_state = 0 Then
     If Licz_1s >= Off_licz Then
      Licz_1s = 0
      Portb.2 = 1
      Out_state = 1
    End If
   Else
    If Licz_1s >= On_licz Then
      Licz_1s = 0
      Portb.2 = 0
      Out_state = 0
     End If
    End If
   End If
  End If
Return
 '*************************przerwanie timer 0 koniec**************
 
'******************** wyswietlanie ******************
Wyswietlanie:
Cls
 Help = Licz_1s
  Help = Help Mod 60                                        'liczenie sekund
   Locate 1 , 8
   Lcd ":"
  If Help < 10 Then Lcd "0"                                 'zero wiodace,jak mniej niz 10
 Lcd Help
  Help = Licz_1s / 60                                       'liczenie minut
   Locate 1 , 6
    If Help < 10 Then Lcd "0"                               'zero wiodace dla minut
     Lcd Help
 
 Locate 2 , 10
  If Poz_menu = 1 Then If Mig = 0 Then Lcd ">" Else Lcd " "
   Help2 = On_licz
    Help2 = Help2 Mod 60
     Locate 2 , 14
      Lcd ":"
     If Help2 < 10 Then Lcd "0"
    Lcd Help2
   Help2 = On_licz / 60
  Locate 2 , 12
 If Help2 < 10 Then Lcd "0"
Lcd Help2
 
 
 Locate 2 , 7
  If Poz_menu = 2 Then If Mig = 0 Then Lcd "<" Else Lcd " "
   Help3 = Off_licz
    Help3 = Help3 Mod 60
     Locate 2 , 3
      Lcd ":"
     If Help3 < 10 Then Lcd "0"
    Lcd Help3
   Help3 = Off_licz / 60
  Locate 2 , 1
 If Help3 < 10 Then Lcd "0"
Lcd Help3
 
 Locate 1 , 1
 Lcd "ON"
 Locate 1 , 14
 Lcd "OFF"
 
Return
'*********************koniec wyswietlania*********************************
'*********************przyciski********************************
Przyciski:
Sw = Pind And &B11111000                                    'maskowanie nieużywanych pinów
 
If Sw <> &B11111000 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 100 Then
      Licznik_sw = 0
      Select Case Stan_sw
        Case &B01111000:                                    'poz.menu pd7
         Incr Poz_menu
          If Poz_menu = 3 Then Poz_menu = 0
 
        Case &B10111000:                                    '+sek   pd6
          Select Case Poz_menu
            Case 1:
              If On_licz < 3600 Then Incr On_licz
            Case 2:
              If Off_licz < 3600 Then Incr Off_licz
          End Select
        Case &B11011000:                                    '-sek pd5
          Select Case Poz_menu
            Case 1:
              If On_licz > 0 Then Decr On_licz
            Case 2:
              If Off_licz > 0 Then Decr Off_licz
          End Select
        Case &B11101000:                                    '+min   pd4
          Select Case Poz_menu
            Case 1:
              If On_licz < 3540 Then On_licz = On_licz + 60
            Case 2:
              If Off_licz < 3540 Then Off_licz = Off_licz + 60
          End Select
        Case &B11110000:                                    '-min    pd3
          Select Case Poz_menu
            Case 1:
               If On_licz > 59 Then On_licz = On_licz - 60
            Case 2:
              If Off_licz > 59 Then Off_licz = Off_licz - 60
          End Select
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 80
  End If
 
Return
 
Return
'******************koniec przyciski**********************

I nie wiem czy ma sens przycisk start/stop ,ale jakby był to dobrze.

Portret użytkownika mirley

Re: Timer

LCd miga bo zbyt dużo informacji próbujesz na nim wyświetlić. Lcd obsługuje się tylko wtedy gdy jest potrzeba. napewno nie można go zapisywać co 4ms bo to nie zadziała. Przede wszystkim wywal polecenie Cls bo ono najwięcej przeszkadza. I tak używasz Locate więc tak musisz wypisywać dane aby stare zawsze były zapisane przez nowe i nie było widać pozostałych znaków. Jak wywalisz Cls to napewno się poprawi. Po drugie możesz zrobić Lcd wywoływane np co 4ms ale z dodatkową zmienną flagą która ustawi się tylko wtedy gdy potrzeba np co sekundę jak się licznik zmieni lub jak klikniesz przycisk. Wtedy np jak licznik jest stop to lcd wogóle nie będzie zapisywane bo i po co.....

Przycisk stop można łatwo dorobić wystarczy zrobić zmienną flagę np Licz_ena as bit i zmieniac jej wartość na przeciwną po kliknięciu przycisku. Przy obsłudze klawiatury musisz odmaskować kolejny bit na przycisk i będzie to wyglądało teraz tak:

w = Pind And &B11111100                                    'maskowanie nieużywanych pinów
If Sw <> &B11111100 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 100 Then
      Licznik_sw = 0
      Select Case Stan_sw

W każdej wartości Case musisz dodać teraz jedynkę na 3 bicie bo inaczej żaden z przycisków nie pójdzie i na końcu dodać kolejny case

     Case &B11111000:                                    'poz.menu pd2
         toggle licz_ena

W przerwaniu musisz zablokować liczniki wpisując:

If licz_ena = 1 then

Incr Licz_1s
    If Out_state = 0 Then
     If Licz_1s >= Off_licz Then
      Licz_1s = 0
      Portb.2 = 1
      Out_state = 1
    End If
   Else
    If Licz_1s >= On_licz Then
      Licz_1s = 0
      Portb.2 = 0
      Out_state = 0
     End If
    End If
 
end if

Zapis do eeprom robi się:

Writeeeprom wartosc, adres

tylko trzeba pamiętać aby nie robić tego za często bo się zepsuje pamięć po jakimś czasie. Można zapisywać np jak zmienia się poz_menu z powrotem na zero

-

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 marekszy

czasowy wył.cykliczny

Ćwiczyłem to przez całe popołudnie i niestety nie wiem gdzie i jak umieścić zapis, Cls usunąłem z wyświetlania i umieściłem tutaj ponieważ to zostawało ,a teraz jest super.

Lcd "  TIMER ON/OFF"
 Lowerline
 Lcd "  wer.testowa"
 Wait 2
Cls

Co prawda kursor <,> przestał mrugać ale to nie przeszkadza.
Z przyciskiem STOP też na razie problem ale jeszcze powalczę, zaczynam coś tam jarzyć,na razie blokuje mi cały timer (nie liczy).
Mirley,sory,że zawracam głowę ale mam prośbę czy mógłbyś zerknąć do 3*timer,potrzebuję go na SOS przerobić, a niestety na chwilę obecną nie wiem jak to zrobić.

Portret użytkownika mirley

Re: Zapis

Zapis robisz tutaj:

    Case &B01111000:                                    'poz.menu pd7
         Incr Poz_menu
          If Poz_menu = 3 Then 
            Poz_menu = 0
            Writeeeprom off_licz, 2
            Writeeprom on_licz, 4
          End If 

i na początku programu

readeeprom off_licz, 2
readeeprom on_licz, 4

itd

-

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 marekszy

czasowy wył.cykliczny

zapis działa tak jak powinien, tylko w warunakch początkowych dodałem ogrniczenie do 59min i 59sek aby przy pierwszym uruchomieniu nie wyświetlało kosmicznych wartości

'***************************warunki poczatkowe********************************
Out_state = 0
Readeeprom Off_licz , 2
If Off_licz > 3599 Then
Off_licz = 60
End If
Readeeprom On_licz , 4
If On_licz > 3599 Then
On_licz = 60
End If

Dzięki za pomoc,jeszcze to później dokończymy, na razie muszę powalczyć z 3*timer

Portret użytkownika marekszy

czasowy wył.cykliczny

wstawiam prawie komletny kod (brak jest tylko obsługi start/stop) czasowego wyłącznika cyklicznego.Ustawiamy czasy min:sec dla czasu załączenia PK i mim:sek dla czasu wyłączenia PK,następnie czasówka pracuje na zasadzie czas OFF PK_0 wyłączony,następnie czas ON PK_0 włączony,i tak cały czas na okrągło.
Przycisk MENU:
1-ustawianie sek dla czasu OFF
2-ustawianie min dla czasu OFF
3-ustawianie sek dla czasu ON
4-ustawianie min dla czasu ON
5-wyjście i zapis ustawionych czasów.
Napisy można modyfikować wg własnych upodobań.
Kod zajmuje około 40% pamięci procesora także można jeszcze dużo dopisać.

'***************************TIMER ON/OFF działa*********************************
'************************** marekszy********************************************
'do dopisania przycisk START/STOP
'****************************Konfiguracja Uc************************************
$regfile = "m8def.dat"
$crystal = 16000000
 
Config Portb = &B11111111 : Portb = &B11111001
Config Portc = &B11111111 : Portc = &B11111111
Config Portd = &B00000000 : Portd = &B11111111
 
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.3 , Db6 = Portc.5 , Db7 = Portc.2 , E = Portc.0 , Rs = Portc.1
Config Lcd = 16 * 2
Cls
Cursor Off Noblink
Deflcdchar 1 , 32 , 32 , 32 , 10 , 4 , 10 , 32 , 32         ' gwiazdka
Deflcdchar 2 , 32 , 14 , 17 , 17 , 17 , 14 , 32 , 32        ' kolo puste
Deflcdchar 3 , 32 , 14 , 31 , 27 , 31 , 14 , 32 , 32        ' kolo pelne
 
Declare Sub Loading                                         'animacja ladowana do LCD w trakcie startu
Loading
 
Config Timer0 = Timer , Prescale = 256
Enable Timer0 : On Timer0 Prztimer0
 
Enable Interrupts
'***********************Konfiguracja Uc Koniec**********************************
 
Pk_0 Alias Portb.2
Led_on Alias Portb.1
Led_off Alias Portb.0
 
 
'*******************************Zmienne*****************************************
Dim Licz_1s As Word , Dzielnik2 As Byte
Dim Flaga_4ms As Bit
Dim Flaga_100ms As Bit , Dzielnik As Byte
Dim Sw As Byte , Stan_sw As Byte , Licznik_sw As Byte
Dim On_licz As Word , Off_licz As Word
Dim Out_state As Bit
Dim Help As Word
Dim Help2 As Word
Dim Help3 As Word
Dim Poz_menu As Byte
Dim Mig As Bit
Dim Licz_ena As Bit
'****************************zmienne koniec*************************************
'***************************warunki poczatkowe**********************************
Out_state = 0
Readeeprom Off_licz , 2                                     'czas zal.PB2
If Off_licz > 3599 Then
Off_licz = 15
End If
Readeeprom On_licz , 4                                      'czas wyl.PB2
If On_licz > 3599 Then
On_licz = 20
End If
 
'************************warunki poczatkowe koniec******************************
 
'*****************************petla glowna**************************************
Do
  If Flaga_4ms = 1 Then
    Flaga_4ms = 0
     Gosub Przyciski
  End If
   If Flaga_100ms = 1 Then
    Flaga_100ms = 0
     Gosub Wyswietlanie
  End If
 Loop
End
'****************************petla glowna koniec********************************
 
'***************************przerwanie timer 0**********************************
Prztimer0:
 Timer0 = 6
 Flaga_4ms = 1
  Incr Dzielnik
   If Dzielnik = 25 Then                                    '25*4ms = 100ms
    Dzielnik = 0
    Flaga_100ms = 1
  Incr Dzielnik2
   If Dzielnik2 = 10 Then                                   '10*100ms=1s'
    Dzielnik2 = 0
     Toggle Mig
  Incr Licz_1s
   If Out_state = 0 Then
   If Licz_1s >= Off_licz Then
      Licz_1s = 0
      Pk_0 = 1
      Led_on = 1
      Led_off = 0
      Out_state = 1
   End If
   Else
    If Licz_1s >= On_licz Then
      Licz_1s = 0
      Pk_0 = 0
      Led_off = 1
      Led_on = 0
      Out_state = 0
     End If
   End If
   End If
   End If
Return
'*************************przerwanie timer 0 koniec*****************************
 
'*******************************wyswietlanie ***********************************
Wyswietlanie:
Select Case Poz_menu
Case 0:
 
 Help = Licz_1s
  Help = Help Mod 60                                        'liczenie sekund
   Locate 1 , 4 : Lcd ":"
  If Help < 10 Then Lcd "0"                                 'zero wiodace,jak mniej niz 10
 Lcd Help
  Help = Licz_1s / 60                                       'liczenie minut
   Locate 1 , 2
    If Help < 10 Then Lcd "0"                               'zero wiodace dla minut
     Lcd Help
   Locate 1 , 1 : Lcd " "
   Locate 1 , 7 : Lcd " "
   Locate 2 , 1 : Lcd "        "
 
  Locate 1 , 8
   If Pk_0 = 0 Then Lcd Chr(2)
  Locate 1 , 8
   If Pk_0 = 1 Then Lcd Chr(3)
 
Case 1:
 Locate 1 , 1 : Lcd " SEC ON "
 Locate 2 , 1 : Lcd " "
 Locate 2 , 7 : Lcd "  "
   Help2 = On_licz
    Help2 = Help2 Mod 60
     Locate 2 , 4
      Lcd ":"
     If Help2 < 10 Then Lcd "0"
    Lcd Help2
   Help2 = On_licz / 60
  Locate 2 , 2
 If Help2 < 10 Then Lcd "0"
Lcd Help2
 
Case 2:
 Locate 1 , 1 : Lcd " MIN ON "
 Locate 2 , 1 : Lcd " "
 Locate 2 , 7 : Lcd "  "
   Help2 = On_licz
    Help2 = Help2 Mod 60
     Locate 2 , 4
      Lcd ":"
     If Help2 < 10 Then Lcd "0"
    Lcd Help2
   Help2 = On_licz / 60
  Locate 2 , 2
 If Help2 < 10 Then Lcd "0"
Lcd Help2
Case 3:
 Locate 1 , 1 : Lcd " SEC OFF"
 Locate 2 , 1 : Lcd " "
 Locate 2 , 7 : Lcd "  "
   Help3 = Off_licz
    Help3 = Help3 Mod 60
     Locate 2 , 4
      Lcd ":"
      If Help3 < 10 Then Lcd "0"
     Lcd Help3
    Help3 = Off_licz / 60
   Locate 2 , 2
  If Help3 < 10 Then Lcd "0"
 Lcd Help3
Case 4:
 Locate 1 , 1 : Lcd " MIN OFF"
 Locate 2 , 1 : Lcd " "
 Locate 2 , 7 : Lcd "  "
   Help3 = Off_licz
    Help3 = Help3 Mod 60
     Locate 2 , 4
      Lcd ":"
      If Help3 < 10 Then Lcd "0"
     Lcd Help3
    Help3 = Off_licz / 60
   Locate 2 , 2
  If Help3 < 10 Then Lcd "0"
 Lcd Help3
End Select
Return
'************************koniec wyswietlania************************************
'******************************przyciski****************************************
Przyciski:
Sw = Pind And &B11111100                                    'maskowanie nieużywanych pinów
 
If Sw <> &B11111100 And Stan_sw = Sw Then
    Incr Licznik_sw
    If Licznik_sw = 100 Then
      Licznik_sw = 0
      Select Case Stan_sw
 
        Case &B01111100:                                    'poz.menu pd7
         Incr Poz_menu
          If Poz_menu = 5 Then
          Poz_menu = 0
           Writeeeprom Off_licz , 2
            Writeeeprom On_licz , 4
             End If
 
        Case &B11111000:                                    '+sek/min   pd2
          Select Case Poz_menu
 
            Case 1:
              If On_licz < 3600 Then Incr On_licz
            Case 2:
                If On_licz < 3540 Then On_licz = On_licz + 60
            Case 3:
                If Off_licz < 3600 Then Incr Off_licz
            Case 4:
                If Off_licz < 3540 Then Off_licz = Off_licz + 60
          End Select
 
        Case &B11110100:                                    '-sek/min pd3
          Select Case Poz_menu
            Case 1:
              If On_licz > 0 Then Decr On_licz
            Case 2:
              If On_licz > 59 Then On_licz = On_licz - 60
            Case 3:
              If Off_licz > 0 Then Decr Off_licz
            Case 4:
              If Off_licz > 59 Then Off_licz = Off_licz - 60
          End Select
        Case &B11101100:                                    ' pd4
 
        Case &B11011100:                                    ' pd5
 
        Case &B10111111:                                    ' pd6
 
 
      End Select
    End If
  Else
    Stan_sw = Sw
    Licznik_sw = 80
  End If
 
Return
 
Return
'*****************************koniec przyciski**********************************
'****************************animacje dla LCD***********************************
Sub Loading :                                               'program animacji startowej
Cls
Lcd "MAREKSZY"
Locate 2 , 1
Lcd "loading"
Waitms 1000
Locate 2 , 1
Lcd Chr(1)
Waitms 500
Locate 2 , 2
Lcd Chr(1)
Waitms 500
Locate 2 , 3
Lcd Chr(1)
Waitms 500
Locate 2 , 4
Lcd Chr(1)
Waitms 500
Locate 2 , 5
Lcd Chr(1)
Waitms 500
Locate 2 , 6
Lcd Chr(1)
Waitms 500
Locate 2 , 7
Lcd Chr(1)
Waitms 500
Locate 2 , 8
Lcd Chr(1)
Waitms 500
Cls
Locate 1 , 1
Lcd " Odczyt "
Locate 2 , 1
Lcd "poprawny"
Waitms 1000
End Sub
'**************************KONIEC PROGRAMU**************************************

MENU-0,przekaźnik OFF

przeekaźnik ON

MENU-1,ustawianie sec. dla OFF

MENU-2,ustawianie min. dla OFF

MENU-3,ustawianie sec. dla ON

MENU-4,ustawianie min. dla ON

Portret użytkownika gosc

Czasowy wył

Witam
Kolego Marekszy czy zrobiłeś ten układ i chodzi?czy wsad jest już kompletny,potrzebuję informacji chcialbym wykonać ten układ
Może rysunek płytki jest dostępny

pozdrawiam

Portret użytkownika marekszy

Czasowy wył

Tak, działa. Schemat i kod jest sprawdzony, jednak w końcu nie dopisałem przycisku on/off (nie było takiej potrzeby).Startuje po podaniu napięcia.

Portret użytkownika gosc

Czasowy wył

Dzięki za info
Masz może rysunek płytki PCB?

Portret użytkownika marekszy

Czasowy wył

niestety nie, miałem płytki do obudowy montowanej na szynę w rozdzielni,ale schemacik jest wyjątkowo prosty.Atmegę możesz zastosować PDIP28,ułatwi to tobie montaż.

Portret użytkownika JaroM6

Czasowy wył

Witaj
Poskładałem układ na atmedze w podstawce i mam problem z przyciskami
działa tylko S1 i po nacisnięciu jest po kolei SEC ON , MIN ON, SEC OFF, SEC ON pozostałe przyciski nie działają
układ dziala jako cykliczny z czasem 20 sekund

Portret użytkownika marekszy

Czasowy wył

Czekaj chwilę ,zaraz zerknę.
OK,masz rację ,poprawiłem w kodzie przyciski, teraz po kompilacji powinien działać jak należy.
Te 20s to tak na starcie, jak zmienisz to będzie pamiętał te co wpisałeś.
Daj znać czy wszystko jest ok.

Portret użytkownika JaroM6

Czasowy wył

Witam
poprawiłeś w tym kodzie co jest powyżej?

Portret użytkownika marekszy

Czasowy wył

Tak,w tym co wyżej.

Portret użytkownika JaroM6

Czasowy wył

Testuję wsad po zmianach i myślę że jest wszystko ok.
jest możliwy jakiś kontakt PW w razie pytań?
pozdrawiam

Portret użytkownika marekszy

Czasowy wył

Niestety nie ma tu PW i nie używam portali społecznościowych, pisz na lub na tej stronie.

Portret użytkownika JaroM6

Czasowy wył

Dziękuję za porady w razie pytan będę pisał na maila
ja też nie używam portali społecznościowych
pozdrowienia