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

Sprawdzenie kodu oraz doradzenie w razie konieczności.

lumpus 22 Mar 2013 12:49 3645 31
  • #1 22 Mar 2013 12:49
    lumpus
    Poziom 14  

    Witam wszystkich.

    Od nie dawna zajmuje się zabawą z avr i Bascomem,
    Chciałbym zrobić dla znajomego prosty układ do autka
    na attiny 13. Miałby on na celu miganie led - co nie jest zbyt odkrywcze.
    Ale chciałbym by układ ten był uruchaminy przez przyciśnięcie
    przycisku - włącza się układ led miga co np. 1 sekundę,
    przyciśnięcie po raz drugi led miga co 2 sekundy...
    przyciśnięcie po raz trzeci led miga co 3 sekundy...
    przyciśnięcie po raz czwarty wyłącza się układ.
    Napisałem program w bascomie, i czy mógłby mi ktoś
    pomóc zrealizować ten projekcik?
    Ewentualnie podpowiedzieć jak to programowo rozwiązać?
    Z góry dziękuję.


    Za odpowiedzi z góry dziękuję

    Oto kod programu:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    0 29
  • #2 22 Mar 2013 14:12
    Kuniarz
    Moderator Projektowanie

    Schemat drugi jest błędny, możesz dać do portu po dwie diody LED, ale każda musi mieć w szereg "swój" rezystor.

    Dodano po 3 [minuty]:

    Program natomiast wykona tylko pierwszą pętlę DO-LOOP, gdyż nie masz z niej wyjścia. Mógłbyś dodać sprawdzanie przycisku w tej pętli, jeśli przycisk wciśnięty, to EXIT DO.

    Przy czym napotkasz pewien spory problem, gdyż procesor wykonując WAIT 1 w tym czasie nie robi nic innego, czyli też nie sprawdzi wciśnięcia przycisku. Pozostają przerwania albo pętle opóźniające.

    0
  • #3 22 Mar 2013 18:27
    lumpus
    Poziom 14  

    Witam

    Na wstępie dziękuję za odpowiedź i zainteresowaie.

    W chwili obecnej to jestem na etapie początkowym i za bardzo się nie znam.
    Jednak szperając troche po sieci napisałem tak:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Program ten powinien po włączenu przycisku zapalać led mniej wiecej jak chciałem.

    Ale chciałbym by ta dioda zapalała się tak :
    włącza się układ led miga co np. 1 sekundę,
    przyciśnięcie po raz drugi led miga co 2 sekundy...
    przyciśnięcie po raz trzeci led miga co 3 sekundy...
    przyciśnięcie po raz czwarty wyłącza się układ.

    Nie wiem za bardzo jak to zrobić : włączyć i wyłączyć układ.
    Prosiłbym o jakieś konkrety.

    Z góry dziękuję.

    0
  • #5 22 Mar 2013 18:40
    lumpus
    Poziom 14  

    Witam

    Jak widać staram się samemu coś kombinować.
    Co prawda jeszcze z wujkiem google ale jednak.
    Nie szukam gotowych rozwiązań.
    Ale też nie jestem dobry w tym - zaczynam jak widać.

    0
  • #6 22 Mar 2013 18:45
    Piotr Piechota
    Poziom 21  

    W tak prostym układzie podaruj sobie watchdog'a.

    0
  • #7 22 Mar 2013 18:46
    Kuniarz
    Moderator Projektowanie

    Dobra. Na początek trzeba wywalić WAITy, zdefiniuj zmienną "petla" jako word.
    Zamiast WAIT 1 dajesz:

    FOR PETLA=1 TO 1000
    WAITMS 1

    ....
    tu dodasz sprawdzanie przycisków i wybór trybu pracy
    ....

    NEXT PETLA

    Takim oto sposobem masz pauzę 1 sekundę, ale w jej trakcie możesz sprawdzać przycisk.

    Proponuję też zdefiniować zmienną TRYB , która będzie bajtowa i będzie miała cztery możliwe wartości : 0-wyłączone, 1- 1 sekunda, 2- 2 sekundy, 3- 3 sekundy. Pomyśl, jak to zrobić ;-)

    0
  • #8 22 Mar 2013 18:56
    lumpus
    Poziom 14  

    Mam rozumieć,

    że zamiast WAIT 1 czyli 1 sekunde, wpisać w mili sekundach?
    Nie bardzo wiem jaka to różnica, ale zobaczymy.

    Ok jutro się za to wezmę i napiszę jeśli coś wymyślę :-)

    Dziękuje za podpowiedzi.

    Pozdrawiam

    0
  • #9 22 Mar 2013 18:59
    Kuniarz
    Moderator Projektowanie

    No nie... masz dopisać pętlę, która wykona się 1000 razy z pauzą wewnątrz 1ms. W ten sposób nie blokujesz procesora na caaaaałą długą sekundę, tylko tysiąc razy, ale na 1 milisekundę, w międzyczasie sprawdzając, czy nie wciśnięto przycisku.

    To KOLOSALNA różnica.

    0
  • #10 22 Mar 2013 19:01
    lumpus
    Poziom 14  

    Dobra

    Wszystko jasne :-)
    Jutro się za to zabieram.

    Dziękuję.

    0
  • #11 23 Mar 2013 18:54
    lumpus
    Poziom 14  

    Witam

    Zgodnie z wczorajszym tekstem końcowym, dziś
    podjąłęm dalszą walkę, ale chyba jestem za słaby
    w te klocki, coś tam napisałem ale chyba to nie to:

    ' mryganie led + switch

    $regfile = "attiny13.dat"
    $crystal = 9600000


    Config Pinb.1 = Output
    Config Pinb.3 = Input



    Dim Petla As Word
    Dim Tryb As Byte

    For Petla = 1 To 1000
    Waitms 1


    Petla = 1
    Program:

    Do

    If Pinb.3 = 0 Then
    For Petla = 1
    Wait 1
    Set Portb.1
    Goto Program
    End If

    Loop

    End

    Nie mam pojęcia jak to zrobić :-(

    0
  • #12 24 Mar 2013 09:23
    Kuniarz
    Moderator Projektowanie

    No faktycznie stek bzdur... zastanawiałeś się może krok po kroku co ten program będzie robił ? Pomyśl, jak napisać zwykłe miganie diodą z odstępem co 1 sekundę.
    Algorytm powinien wyglądać tak:

    - początek pętli nieskończonej
    ---- zmień stan diody (z 0 na 1 i odwrotnie)
    ---- początek pętli odliczającej sekundę
    ------- pauza 1ms
    ---- koniec pętli odliczającej sekundę
    - koniec pętli nieskończonej
    - koniec programu

    Zastosowałem wcięcia nie bez powodu - łatwo widać co się dzieje w danej pętli albo w danej instrukcji warunkowej.

    P.S. Chyba powinno się pisać "mrugać" ;-)

    0
  • #13 24 Mar 2013 12:30
    lumpus
    Poziom 14  

    Witam

    Jak już wspomniałem na samym początku nie jestem orłem z Bascoma.
    Dlatego też poprosiłem o pomoc na tym właśnie forum.

    Co do pisowni - wiadoma sprawa, że pisze się : mrugać, mruganie itd.
    Mryganie - jest to taka moja wariacja na temat. Nie jest ona przedmiotem
    moich pytań, czy też problemów :-)

    Postaram się popołudniu lub wieczorem coś napisać.
    Wedle rad udzielonych.

    Pozdrawiam

    0
  • #15 24 Mar 2013 17:17
    lumpus
    Poziom 14  

    Do DONDU

    Tłumaczyć nie trzeba - sprawa nie aktualna.

    Nie łupiemy punktów bez sensownymi postami...

    Dodano po 4 [godziny] 30 [minuty]:

    Witam ponownie

    Ponieważ podpowiedzi na zasadzie : skręć w prawo - zimno
    skręć w lewo - ciepło niestety nie przynoszą oczekiwanych
    rezultatów, to chyba nie zrobie dla młodego układziku. Trudno.
    Napisałem coś takiego :

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Zakładam, że to również jest źle napisane.
    Nie chce się ośmieszać, więc jeśli może ktoś
    jakiś szablon czy coś co doraźnie może pomóc to
    po proszę. Myślałem, że można to napisać za
    pomocą pęti, paru if-ów, waits-ów itd.
    Pomyliłem się :-(

    Z góry dziękuję.

    0
  • #16 24 Mar 2013 19:18
    30402
    Użytkownik usunął konto  
  • #17 24 Mar 2013 20:43
    lumpus
    Poziom 14  

    Do Saabotaz

    Dziękuje za podanie przykładu.
    Ale chodzi mi o coś mnie skąplikowanego.
    Posiłkując się siecią napisałem coś takiego:

    ' mryganie led + switch

    $regfile = "attiny13.dat"
    $crystal = 9600000

    Config Pinb.0 = Output
    Config Pinb.3 = Input

    Do

    Debounce Pinb.3 , 0 , Tryb1 , Sub


    Loop

    Tryb1:
    Wait 1
    Toggle Portb.0
    Wait 2
    Return
    End

    Tryb2:
    Wait 2
    Toggle Portb.0
    Wait 4
    Return
    End

    Nie wiem czy to będzie działać, ale coś kombinuje.
    Zakładam po raz kolejny, że to nie to ale...może
    choć trochę w dobrym kierunku?

    Pozdrawiam

    0
  • #18 24 Mar 2013 21:28
    30402
    Użytkownik usunął konto  
  • #19 24 Mar 2013 21:42
    lumpus
    Poziom 14  

    Owszem mogę go skompilować itd. Mam Bascoma 2.0.5.0 AVR.
    Nawet to zrobiłem, żadnych błędów nie wywalił.
    Choć nadal nie wiem czy choć troszkę w dobrą stronę idę.
    Co do tiny2313 to wiem, że lepszy, więcej możliwości itd.
    Ale nie wiem czy jest mi potrzebny aż taki...
    Potrzebuje tylko obsługe switcha i 2 led.

    Co by jednym przyciśnięciem urochomić cały układ ledki świecą co 1 sekunde
    drugim przyciśnięciem ledki świecą co 2 sekundy,
    trzecim przyciśnięciem ledki świecą co 2 sekundy
    i czwartym przyciśnięciem wyłączamy cały układ.
    Nic więcej mi nie trzeba...

    Pozdrawiam

    Dodano po 2 [minuty]:

    Upsss

    Trzecim przyciśnięciem ledki świecą co 3 sekundy a nie 2.
    Pomyliło mi się.

    Pozdrawiam

    0
  • #20 24 Mar 2013 22:37
    30402
    Użytkownik usunął konto  
  • #21 24 Mar 2013 22:38
    emarcus
    Poziom 34  

    Saabotaz napisał:
    ............ Pytam z ciekawości bo mój Bascom uniemożliwia napisanie jakiegokolwiek programu na ten procesor bo mu Sram brakuje. To znaczy że nawet pustej pętli DO-LOOP nie da się zrobić.



    Eh, Sabot....

    Nie przesadzaj z tym brakiem Ramu.
    Czy chcesz tu zdyskredytowac Bascom, czy też wskazac na bezużytecznośc Attiny13?
    Odwiedź więc tę strone i przekonaj się że nie jest aż tak źle:
    http://mdiy.pl/miniaturowy-miernik-do-zasilacza-na-attiny13/#more-862

    Jest tam jeszcze kilka zabawnych projektów z Attiny13 w kategorii 'Mikrokontrolery".

    e marcus

    0
  • #22 24 Mar 2013 22:43
    30402
    Użytkownik usunął konto  
  • #23 25 Mar 2013 07:07
    lumpus
    Poziom 14  

    Do Saabotaz

    Witam.

    Dziękuje za kod.
    Chciałbym się jednak zapytać czy on wykonuje
    te wszystkie założenia o których pisałem?

    Pozdrawiam

    Dodano po 37 [minuty]:

    Ps.

    Czy mógłby kolega opisać ten kod?
    Mógłbym coś z tego wynieść. :-)
    Dziękuje .

    0
  • #24 25 Mar 2013 12:31
    30402
    Użytkownik usunął konto  
  • #25 26 Mar 2013 09:23
    lumpus
    Poziom 14  

    Witam

    Skoro kolega tak twierdzi to niechaj tak będzie. :-)
    Bardzo dziękuje .

    Ps. A gdybym chciał jeszcze 2 led podpiąć, tak aby przód i tył
    mrygały oddzielnie to co trzeba by dopisać?

    Pozdrawiam

    0
  • #26 26 Mar 2013 10:14
    BlueDraco
    Specjalista - Mikrokontrolery

    Kol. Sabotaż pokazał piękny przykład jak nie pisać obsługi przerwań i jak nie pisać programów wkurzających użytkownika, tylko nie napisał, że ten przykład tego właśnie dotyczy. ;)

    Mamy więc oczekiwanie o nieokreślonym czasie robione w obsłudze przerwania i program reagujący na zwolnienie przycisku, a nie na jego naciśnięcie.

    0
  • #27 26 Mar 2013 11:24
    lumpus
    Poziom 14  

    Yyyy aż tak źle?

    To jak w końcu napisać ten program?
    Może jakieś przykłady z opisem czy coś?

    Pozdrawiam

    0
  • #28 26 Mar 2013 12:39
    30402
    Użytkownik usunął konto  
  • #29 27 Mar 2013 08:34
    lumpus
    Poziom 14  

    Witam Saabotaz

    Jeszcze nie wgrałem, gdyż po świętach zakupię części.
    Jak tylko dostane je w łapki, wgram i poinformuję o
    efekcie. Mam nadzieje, że będzie ok.

    Pozdrawiam

    Dodano po 1 [godziny] 21 [minuty]:

    Ps.

    W dalszym ciągu mile widziane podpowiedzi.

    Pozdrawiam

    0