Elektroda.pl
Elektroda.pl
X
Renex
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATtiny13 Bascom - dwie funkcje w jednym przycisku jedna zależna od drugiej

dobo_28 27 Mar 2016 18:44 2748 39
  • #1 27 Mar 2016 18:44
    dobo_28
    Poziom 11  

    Witam, potrzebuję 2 funkcje w 1 przycisku.
    Długie przytrzymanie (5sekund) Sw powoduje zmianę dla D1 i D2 oraz działanie krótkich impulsów Sw, które wywołują miganie D3 (klik Sw - 1 mignięcie, klik Sw - 2 mignięcia, klik Sw - 3 mignięcia, klik Sw - 4 mignięcia, klik Sw - 5 mignięć i od nowa) długie przytrzymanie (5sekund) powoduje wyjście z krótkich impulsów (by przez przypadek nie wywołać migania diodą D3).

    Udało mi się to zrobić ale nie działa to idealnie zaraz po wywołaniu funkcji udaje mi się przejść do trzech mignięć i tu koniec działania krótkich impulsów pozostaje przytrzymać dłużej i wyjść z krótkich impulsów i znowu długie przytrzymanie i uda się wywołać tylko dwa a czasem 3 krótkie impulsy i ponownie finito trzeba wyjść przez długie przytrzymanie i tak w koło.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod



    Program nie jest napisany idealnie gdyż nie mam wielkiego doświadczenia więc korzystam z tego co znajdę w necie i próbuję to połączyć w całość by działało tak jak ja bym chciał. Prawie mi się to udało.

    Proszę o pomoc gdzie leży problem z krótkimi impulsami?

    0 29
  • Renex
  • Pomocny post
    #2 27 Mar 2016 22:05
    373522
    Użytkownik usunął konto  
  • #3 27 Mar 2016 22:47
    dobo_28
    Poziom 11  

    Ostatnie 4 godziny spędziłem nad takim kodem

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    ale działa też połowicznie bo jednocześnie działa długie i krótkie naciśniecie.
    Głowa już mnie rozbolała, a oczy dostały :crazyeyes:

    niveasoft Dziękuje za zainteresowanie i podesłanie kodu za chwilkę sprawdzę jak to działa u mnie.
    Na szybko widzę, że zostały użyte timery, których totalnie nie kumam choć chciałem je zastosować by nie blokowały Sw poprzez miganie D3.

    0
  • #4 27 Mar 2016 23:15
    xury
    Poziom 38  

    To ja dodam, jeszcze właśnie, że totalnie zapomnij o waitms i zakumaj timery to jest najprawdziwsza z prawd do programowania wszelakich mikrokontrolerów we wszelakich językach.

    0
  • #5 28 Mar 2016 00:41
    dobo_28
    Poziom 11  

    xury dla początkującego wait czy waitms to najprostsze rozwiązanie choć już naczytałem się, że nie najlepsze i by tego unikać właśnie poprzez timery w jednym z tematów mirekk36 to nawet zademonstrował na atmega8 oraz ganił za używanie wait oraz waitms
    Nie poradziłem sobie w przełożeniu kodu z atmegi na attine :(

    Sprawdzone i działa rewelacyjnie WIELKIE DZIĘKI niveasoft
    Z rozbudową Case sobie poradziłem.
    Teraz nie chcę zniszczyć rewelacyjnego kodu komendą waitms więc kombinuję jak zamienić to na timer

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    próbowałem na różne sposoby użyć timera Cnt1 lub Cnt3 poniżej jeden ze sposobów
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    czy trzeba stworzyć jeszcze jedną składnię timera np
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    i to Przerwanie As Byte wstawić w miejsce waitms?

    Zauważyłem też, że przy szybkim naciskaniu przycisku by dojść np do Case 12 (dla testu zrobiłem case do 15) dioda gubi się z polaryzacją da rade to jakoś wyeliminować?

    0
  • Renex
  • Pomocny post
    #6 28 Mar 2016 01:04
    373522
    Użytkownik usunął konto  
  • #7 28 Mar 2016 09:31
    yokoon
    Poziom 28  

    Witam.
    A do czego służą wstawki asemblerowe i czy są konieczne?

    0
  • #8 28 Mar 2016 10:34
    dobo_28
    Poziom 11  

    niveasoft napisał:
    Pisząc Dim Zmienna As Byte opisujesz zmienną że będzie jednobajtowa i tak trzeba opisać każdą.
    Byte może zawierać się w przedziale od 0 do 255 nie większym (jeżeli zmienna miałaby zawierać wartość większą od 255 np 400 to trzeba by użyć zmiennej 2 bajtowej Word lub Integer)

    Co odpowiada za to, że wszystkie zmienne "odnoszą" się do 20ms i mnoży się je przez tą właśnie wartość?

    Czy za tą wartość "20ms" odpowiada ustawienie timera
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    i wszystkie zmienne są od tego zależne?





    Docelowo cały program ma działać jak ten, który przedstawiam niżej (brakuje w nim sterowania D1 i D2 poprzez wywołanie 5 sekund) ale dla tego programu nie było potrzeby bo sterowanie D1 i D2 odbywa się ręcznie (zewnętrznie) przez dodatkowe przyciski.

    Post pierwszy tego tematu na Attiny13 miał rozwinąć poniższy program o funkcję uaktywnienia krótkich impulsów (Sw_up, Sw_stale, Sw_down) poprzez dłuższe przytrzymanie Sw_Stale. Oczywiście nie udało by się tego osiągnąć na Attiny45, która ma większą pamięć ale ma za mało wyprowadzeń więc zastosował bym pewnie atmege8a bo akurat taką też posiadam.

    niveasoft Twoja REWELACYJNA optymalizacja programu za pomocą timerów powoduje, że wszystko co wgrywałem do attiny45 zmieści się w Attiny2313 gdzie dodatkowo jest więcej wyprowadzeń i można zastosować 3 przyciski (jeden Sw_stale i dwa Sw_gora_dol) i 3 diody.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    0
  • #9 28 Mar 2016 11:03
    373522
    Użytkownik usunął konto  
  • #10 28 Mar 2016 17:36
    dobo_28
    Poziom 11  

    Jestem już u siebie na dużym monitorze lepiej się porównuje kod niż na 15 calach w lapku :)

    niveasoft napisał:
    Co do interwału 20ms... to po prostu jest taki bo przy prędkości 9.6MHz, nawet przy maksymalnym preskalerze 1024 to przy pojemności 256 (8Bitów) dużo więcej nie wejdzie.. Jest to "największy" odcinek czasowy jaki mogłem wybrać.

    9 600 000Hz/ 1024 /186 =~50Hz (interwał 20ms)

    Do tego..obliczenia są dla 9.6MHz więc przy innym taktowaniu czasy nie będą się zgadzać..

    Czy w Compare0a = 186 mogę wstawić liczbę w zakresie 0-255?
    by uzyskać interwał =~100ms to 9 600 000Hz/ 1024 /37,5 (połówek pewnie nie można używać wiec zaokrąglę do 38 to będzie 247Hz
    natomiast dla interwału 50ms to 9 600 000Hz/ 1024 /75 to będzie 125Hz
    czy dobrze to rozumiem?

    Jak włączyć te połączenia miedzy pętlami bardzo pomagają w czytaniu kodu. Nie mam tego w widoku do włączenia możliwe, że to dlatego, że mam wersje Demo chyba, że trzeba to włączyć gdzieś indziej.

    0
  • Pomocny post
    #11 28 Mar 2016 18:43
    yokoon
    Poziom 28  

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    to jest interwał 8ms

    0
  • Pomocny post
    #12 28 Mar 2016 19:00
    373522
    Użytkownik usunął konto  
  • Pomocny post
    #13 28 Mar 2016 19:05
    emarcus
    Poziom 34  

    dobo_28 napisał:

    (A). Czy w Compare0a = 186 mogę wstawić liczbę w zakresie 0-255?
    (B). by uzyskać interwał =~100ms to 9 600 000Hz/ 1024 /37,5 (połówek pewnie nie można używać wiec zaokrąglę do 38 to będzie 247Hz
    (C). natomiast dla interwału 50ms to 9 600 000Hz/ 1024 /75 to będzie 125Hz
    czy dobrze to rozumiem?



    Nie dobrze , ..
    @A. -formalne/teoretycznie możesz w Compare0a wstawic dowolną wartośc z zakresu 'byte', ale musisz kalkulowac effekt wynikowy pracy timera w wybranym trybie i nowych parametrach; kalkulując (dobierając parametry timera) pozostaw na boku przelicznie częstotliwości wynikowej, to tylko wprowadza nieład i rozprasza twoją uwagę.., - do niczego ci to potrzebne w tym miejscu....
    @B. - nie ma takiej możliwości; maxymalny interwał czasu do odliczenia w tym trybie i prescaler jest: 27.30668 msec.
    @C. - tak samo jak @B.

    Jeżeli nie chcesz wszystkich rachunków robic 'ręcznie' (w windowsowym calkulatorze), to dośc praktycznie jest skorzystac z wielu gotowych, dostępnych calkulatorów timerów. Opracowanych na urzytek własny przez niektórych ludzi, którzy dzielą się bezpłatnie /bezinteresownie swoją pracą z innymi zainteresowanymi w tej dziedzinie.
    tu masz linki do takich narzędzi:

    http://homepage.hispeed.ch/peterfleury/AvrCalc.zip -AVR Calc and Timer Tool v2.0 - by Jack Tidwell
    http://www.avrcalc.com/ - by Kevin Rosenberg
    i chyba najbardziej praktyczny w Bascom:
    http://www.planet-ian.com/start_e.htm - tu wybierz 'Software tool' do download.
    oraz wiele innych.../

    e marcus

    0
  • #14 28 Mar 2016 19:54
    dobo_28
    Poziom 11  

    czyli im mniejsza częstotliwość tym interwał jest dłuższy?
    jeżeli dla 50Hz = 20ms
    to
    25Hz = 40ms (czyli 50Hz/2=25Hz co przekłada się na 2*20ms=40ms)
    75Hz = 15ms
    100Hz = 10 ms
    125Hz = 8ms (czyli 25Hz*5=150Hz co przekłada się na 40ms/5=8ms)
    150Hz = 6,7ms (czyli 50Hz*3=150Hz co przekłada się na 20ms/3=6,66ms)
    200Hz = 5ms
    tak to wyliczyłem na przykładzie 50Hz - matematyka nigdy nie była moją mocną stroną :)

    to by wychodziło, że 1Hz = 1000ms = 1sekunda
    czyli Compare0a = 255 (to jest max wartość jaką tu można wpisać?) co by dało 36,7Hz, które =~27,25ms
    dobrze teraz to rozumiem?

    Dodano po 3 [minuty]:

    O zanim zrobiłem swoje wyliczenia z moja słabą matematyką :) doszły dwa posty :)

    0
  • #15 28 Mar 2016 20:06
    373522
    Użytkownik usunął konto  
  • #16 28 Mar 2016 20:38
    dobo_28
    Poziom 11  

    Właśnie chcę to dokładnie zrozumieć by nawet bez kalkulatora móc to wyliczyć :) choć on bardzo ułatwia i nie trzeba za bardzo wysilać szarych komórek :)
    Kalkulatory jak najbardziej się przydadzą i za nie wielkie BÓG ZAPŁAĆ :)
    Z pierwszego kalkulatora zauważyłem, że Timer0 i Timer2 są 8 bitowe natomiast Timer1 i Timer3 16 bitowe
    Attiny13 ma tylko jeden timer (Timer0)
    natomiast jak będę kombinował by przerobić kod niveasoft do obsługi 3 przycisków to będzie mi potrzebny minimum Attiny2313,
    a on z tego co znalazłem w specyfikacji posiada 2 timery (Timer0 i Timer1) czyli będę mógł ustawić dwa interwały.
    Teraz pytanie skąd dana zmienna wie jakiego timera ma użyć (w Attiny13 jest jeden wiec do użycia jest tylko ten - tak mi się wydaje) chyba, że za to odpowiada ten kod asemblerowy na samym końcu o który pytał yokoon.

    0
  • #17 28 Mar 2016 23:13
    emarcus
    Poziom 34  

    dobo_28 napisał:
    Właśnie chcę to dokładnie zrozumieć by nawet bez kalkulatora móc to wyliczyć :) choć on bardzo ułatwia i nie trzeba za bardzo wysilać szarych komórek :)
    Kalkulatory jak najbardziej się przydadzą i za nie wielkie BÓG ZAPŁAĆ :)
    Z pierwszego kalkulatora zauważyłem, że Timer0 i Timer2 są 8 bitowe natomiast Timer1 i Timer3 16 bitowe
    Attiny13 ma tylko jeden timer (Timer0)
    natomiast jak będę kombinował by przerobić kod niveasoft do obsługi 3 przycisków to będzie mi potrzebny minimum Attiny2313,
    a on z tego co znalazłem w specyfikacji posiada 2 timery (Timer0 i Timer1) czyli będę mógł ustawić dwa interwały.
    Teraz pytanie skąd dana zmienna wie jakiego timera ma użyć (w Attiny13 jest jeden wiec do użycia jest tylko ten - tak mi się wydaje) chyba, że za to odpowiada ten kod asemblerowy na samym końcu o który pytał yokoon.


    Ta wstawka assemblerowa na końcu kodu, to wymóg/ odpowiedź na dodatkowy wpis ‘nosave’ w konfiguracji interruptu timera0.
    Normalnie, (bez ‘nosave’) nie dajesz tej wstawki i godzisz się na standardową w Bascom obsługę interruptu, która automatycznie odkłada (zapisuje) na stos, oprócz addresu powrotu z interruptu, większośc rejestrów niezależnie czy trzeba lub nie trzeba; co po pierwsze, zabiera dużo czasu ( ponad 100 cykli w jedną stronę i to samo podczas return), oraz miejsce w pamięci RAM (obszar przeznaczony na stos), która jest raczej ograniczona w Attiny13 i to co zadeklarowałeś dla stosu na początku programu (3x po 8 bajtów),
    $hwstack = 8
    $swstack = 8
    $framesize = 8
    byłoby stanowczo za mało, pamiętając że w Ram muszą zmieścic się także wszystkie zadeklarowane w programie zmienne.
    Odszukaj we własnym zakresie jakie są skutki deklaracji zbyt małego obszaru dla któregoś z tych trzech wymienionych.
    Jeżeli miałbyś processor z większą dostępną ilością ramu na przykład m8/m168 i nie zależy ci zbytnio na szybkości wykonywanego programu, to nie masz potrzeby jego optymalizacji i zrezygnujesz z tej opcji „nosave” w ogóle, deklarując dostatecznie większe/ bezpieczne obszary pamięci dla stosu.

    Odnośnie: ‘skąd dana zmienna wie jakiego timera ma użyć?’ – to nie zmienna szuka timera, a raczej programista wybiera dostępny, lub jeżeli jest ich w processorze więcej niż jeden – stosowny do potrzeby timer i dla: jemu tylko przypianych zmiennych określa wartośc zmiennej /zmiennych ( może byc więcej niż jedna) na przykład:zmienna ‘Compare0a‘ będzie odnosic się do timera0, natomiast ‘Pwm1b’ będzie odpowiednią zmienną dla Timera1, skonfigurowanym w trybie generowania fali PWM w kanale B i analogicznie ‘Pwm1a’- dla kanału A , itd.
    Każdy timer ma ‘komplet’ określonych nazw zmiennych standardowo używanych przy ich konfiguracji. Podobnie zresztą jak nazwy pozostałych rejestrów sa pewnymi standardami, które compiler Bascom identyfikuje poprzez plik z rozszerzenien *.dat, deklarowany na samym początku programu…
    Dla ciekawości otwóż go w notatniku dla dowolnego processora i odnajdziesz wszystkie możliwe nazwy zrozumiałe dla compilera...
    Niektóre zmienne lub rejestry mogą miec dwie lub więcej, równorzędne nazwy na przykład:
    Timer0, Counter0, TCNT0 - wszystkie odnoszą się do zawartości rejestru licznika Timera0.
    Tu uwaga: W Bascom może wystąpic odwrotna sytuacja, że na pozór ta sama nazwa może odnosic się sporadycznie do dwóch róznych funkcji.
    Przykładem może byc właśnie ‘Timer0’, która w zależności od kontekstu, może także oznaczac interrupt generowany przy przepełnieniu licznika0 , inaczej zwany ‘ovf0’ itp.; co może dla początkujących wywoływac pewną dezorientację.

    e marcus

    0
  • #18 31 Mar 2016 00:30
    dobo_28
    Poziom 11  

    Poszukałem trochę dodatkowych materiałów do wchłonięcia przez moje szare komóreczki :)

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    ustawiłem w ten sposób bo dostałem informację, że takie ustawienia w większości projektów mi wystarczą

    Attiny13 może mieć max

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    na szybko znalazłem informacje, że są to stosy przechowujące parametry podprogramów, przerwań i jeśli dobrze zrozumiałem to im mniejszy stos tym mniej podprogramów, przerwań może obsłużyć.

    Na razie nie mogę zrozumieć skąd zmienna o danej nazwie korzysta z timera, a inna nie.

    i jedna zmienna wykonuje incr (podnieś do góry) decr (obniż w dół) bez korzystania z timera
    choć zmienna Cnt3 korzysta z jednego i drugiego.

    Tu już mam mętlik.

    Znalazłem taki opis.

    13 Liczniki
    Słowo licznik to próba przetłumaczenia słowa timer. Ja używam tego słowa jako odpowiednika,
    ale nie wszyscy się z tym zgadzają i twierdzą, że należy używać słowa timer, gdyż nie można
    dokładnie przetłumaczyć znaczenia. Licznik to układ liczący o rozdzielczości 8 lub 16 bitów (w
    przypadku procesorów z rodziny AVR). Większość procesorów z rdzeniem AVR posiada dwa
    liczniki, jeden 8 bitowy, a drugi 16 bitowy. W zasadzie również jest regułą, że liczniki 16 bitowe
    posiadają więcej funkcji. Liczniki najczęściej wykorzystuje się do odmierzania czasu (np.
    trwania impulsu) lub generowania impulsów.

    13.1 Kon figuracja licznika
    Moduły licznikowe w mikrokontrolerach AVR mogą pracować w dwóch podstawowych
    trybach: jako timer (czasomierz) lub jako counter (licznik). Jeśli chcemy, żeby licznik
    pracował jako counter to robimy to następująco:
    CONFIG TIMERx = COUNTER,
    EDGE=RISING/FALLING, gdzie zamiast x wstawiamy numer licznika, który konfigurujemy
    (np. Config Timer0 = Counter) i określamy parametr EDGE tzn czy licznik
    będzie zwiększany wraz z pojawieniem się zbocza opadającego (FALLING) na wejściu
    licznika czy rosnącego(RISING). Natomiast jeśli licznik ma pracować jako czasomierz to
    konfigurujemy go następująco:
    CONFIG TIMERx = TIMER, PRESCALE=1/8/64/256/1024, gdzie zamiast x wstawiamy numer licznika,
    który konfigurujemy i określamy parametr PRESCALE, który określa współczynnik podziału częstotliwości sygnału zegarowego
    (czyli z jaką częstotliwością ma być taktowany licznik).
    W przykładzie pokazano jak skonfigurować licznik 0 w trybie counter, a licznik1 w trybie czasomierza.

    Przykład 24
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod






    w kodzie napisanym przez niveasoft wykorzystany jest Timer jako czasomierz z dodatkowym parametrem Compare0a w przykładzie go nie ma i tworzy mi to mętlik
    dlaczego raz jest dawany, a innym razem nie (podany przykład).

    Kolejny opis.
    Teraz tylko jeszcze powinniśmy nauczyć się jak obliczać czas, który ma
    odmierzać licznik. Tworzymy to następująco: dzielimy częstotliwość zegara taktującego
    przez wartość ustawionego preskalera, a następnie dzielimy przez maksymalną wartość
    jaka może być wpisana do licznika(8bit-256,16bit-65537). Przykład pokaże jak to zrobić w
    praktyce. Mamy następującą sytuacje: używamy licznika 8 bitowego, procesor jest
    taktowny kwarcem 8 Mhz, a preskaler jest ustawiony na 256.

    Przykład 25
    (8MHz/256)/256=122
    W czasie jednej sekundy licznik przepełni się około 122 razy.

    Przykład 26
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod




    nie rozumiem tego rozwiązania z tym co napisał niveasoft
    przy takich ustawieniach Config Timer0 = Timer , Prescale = 256 można odliczyć 1 sekundę, a przy
    Config Timer0 = Timer , Prescale = 1024 , Clear Timer = 1
    Enable Compare0a : On Compare0a Timer0_isr Nosave : Compare0a = 186 '20ms @9.6MHz/1024
    mamy 20ms


    Skomplikowane są te timery i to jaka zmienna z nich korzysta, a jaka nie (chodzi o incr i decr za pomocą jednego naciśnięcia np. Sw1 zwiększamy wartość zmiennej, a za pomocą innego Sw2 zmniejszamy wartość danej zmiennej).


    :shocked!:

    Za chiny ludowe nie mogę odnaleźć gdzie włączyć w Bascom te linie pomocnicze pomiędzy "DO i END" "IF i END IF"

    0
  • #19 02 Kwi 2016 00:54
    dobo_28
    Poziom 11  

    Przerobiłem program na ATtiny2313 dodałem jeszcze jeden przycisk i ustawiłem baud dla TX i RX przeliczyłem Compare0a (za pomocą kalkulatora z MkAvrCalculator) nie bawiłem się już w ręczne liczenie :)
    Zmieniłem też ustawienia portów gdzie wpisałem już w konfigurację portu podciąganie dla D1

    teraz wygląda to tak

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod





    Teraz kombinowałem gdzie wstawić komendę dla Sw2 i "cofanie" Case
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    jak na razie z mizernym skutkiem bo albo nie działało wcale albo dziwnie mnożyło Sw1

    0
  • #20 02 Kwi 2016 01:41
    373522
    Użytkownik usunął konto  
  • #21 02 Kwi 2016 12:08
    dobo_28
    Poziom 11  

    niveasoft napisał:
    Dodatkowo: PORTB w Attiny2313 ma już osiem pinów a nie jak poprzednio...

    Tak wiem o tym, ale by nic na nich nie występowało (stan niski ani wysoki) to postanowiłem PB5, PB6 i PB7 nie opisywać wtedy w PROTEUS widzę te porty jako szare (niewykorzystane).
    Ze środkowym pinem np PB3 tak zrobić bym nie mógł ale z ostatnimi jeśli nie są wykorzystane jest taka możliwość. Nie wiem czy to dobrze ale działa :)

    Zauważyłem, że Sw1 lub Sw2 można włączyć i wyłączyć funkcję 5sekund ale potem nie ma reakcji na krótkie kliki na Sw1 i Sw2
    Próbowałem zmieniać rożne kombinacje z Case
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    włącznie z tą stałą
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    i też mi nie działało :/

    nie wiem za co odpowiada konfiguracja
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod
    bo nie wiem do czego ona się odnosi

    0
  • #22 02 Kwi 2016 12:25
    373522
    Użytkownik usunął konto  
  • #23 02 Kwi 2016 13:00
    dobo_28
    Poziom 11  

    Działa REWELACYJNIE jak Ty takie rzeczy z kolana piszesz to strach pomyśleć co powstaje jak dłużej przy programie przysiądziesz :)
    niveasoft możesz skompresować swoja wiedzę i przesłać ją do mnie wgram ją sobie jak w Matrix-ie :)

    Wieczorem będę analizował wszystko ponieważ moje dwa małe rozbójniki dały mi szlaban na kompa i angażują w co się tylko da :)

    0
  • #24 03 Kwi 2016 01:36
    dobo_28
    Poziom 11  

    Po ciężkich bojach udało mi się dopisać kolejny przycisk

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    Moje różne wariacje kodu zostały oznaczone jako część opisowa (na forum jako szary text w bascom zielony text) pomagało mi to bym ciągle nie musiał pisać na nowo linijek kodu

    Pewnie niveasoft zrobił by to lepiej ale jak na moją maluczką wiedzę :) to i tak jestem z siebie dumny :D bo zaczyna mi wreszcie powoli wychodzić dopisywanie dodatkowych funkcji.

    0
  • #25 03 Kwi 2016 20:19
    dobo_28
    Poziom 11  

    W dniu dzisiejszym w związku z obchodzonymi urodzinami dałem sobie dzień wolny :)

    W dniu jutrzejszym będę dalej analizował kod niveasoft oraz czy da się w prosty sposób zrobić by dioda migała dopiero po około sekundzie od ostatniego naciśnięcia Sw.

    0
  • #26 05 Kwi 2016 22:34
    dobo_28
    Poziom 11  

    Panowie tak analizuje i trochę głupieje.
    Próbuję dodać nową funkcję aby dioda migała dopiero po około 500ms od ostatniego wciśnięcia Sw.
    Muszę stworzyć dodatkową zmienną "Czekaj", która jest zależna od stałej Sw_mask = &B00110001 badanie czy żaden Sw nie jest wciśnięty jeśli nie jest wciśnięty to zmienna "Czekaj" ma odliczyć 25*20ms (500ms) i wykonać miganie "Todo" zgodnie z danym Case.

    Próbowałem na dwa sposoby

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    i

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    ale nie działa

    Czy mój tok myślenia jest choć troszkę prawidłowy?

    0
  • #27 05 Kwi 2016 23:40
    373522
    Użytkownik usunął konto  
  • #28 09 Kwi 2016 00:37
    dobo_28
    Poziom 11  

    Mam problem z programowalnym UART-em na Attiny13
    Port TX otwieram za pomocą komendy Open "comb.1:38400,8,n,1" For Output As #1 zamknięcie tego portu wykonuje się komendą Close #1.

    Port TX otwierany jest przed wysłaniem danych i zamykany po ich wysłaniu

    Kod: scilab
    Zaloguj się, aby zobaczyć kod


    Otwarcie portu działa natomiast zamknięcie już nie.
    W programie testującym Proteus po podaniu zasilania na Attiny13 na pinie 6 (PB1) nie ma żadnego stanu ani 1 ani 0 ikonka przy porcie jest szara. Naciskam Sw by wysłał dane zawarte w Case 1 : wtedy uruchamia się programowalny port TX ikonka w Proteus jest czerwona co wskazuje na stan 1 ale nie reaguje na zamknięcie i cały czas utrzymuje się ten stan i ikonka jest czerwona zamiast szara.

    Czy jest jakaś inna komenda, która spowoduje całkowite wyłączenie pinu 6 (PB1) jak zaraz po podaniu zasilania na Attiny13?
    Czy tego już ponownie się nie da zrobić?

    0
  • #29 09 Kwi 2016 18:12
    dobo_28
    Poziom 11  

    Zmieniłem miejsce otwarcia portu

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod



    Tak będzie lepiej bo całość zajmie mniej miejsca.

    ale nadal występuje problem zamknięcia portu.

    0
  • #30 09 Kwi 2016 18:17
    373522
    Użytkownik usunął konto