logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega8][C]Przerwanie dokonuje się jak tylko zbliżę rękę nad atmegę :-)

D12 08 Paź 2011 14:42 2152 18
REKLAMA
  • #1 10005250
    D12
    Poziom 14  
    Sami zobaczcie:
    http://youtu.be/muACJfkTm4c

    Oto prosty kod jaki napisałem:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Podpięte są tylko 3 diody w tym 2 równolegle (na stanie niskim świecą), no i guzik do INIT0 (po naciśnięciu ma zwierać do masy).

    Czy ktoś wie o co chodzi? :D
  • REKLAMA
  • REKLAMA
  • #3 10005323
    D12
    Poziom 14  
    Jak wyciągnąłem kabel łączący INT0 z guzikiem od strony atmegi, to układ przestał reagować na zbliżanie ręki. Natomiast jak tylko wyciągnąłem od strony guzika i kabel był jak antena podłączony do wejścia INT0 to przerwanie cały czas działa.

    Tak mam wszystko podpięte jeśli chodzi o stabilizator napięcia i podpięcie zasilania do atmegi:
    http://hobby.abxyz.bplaced.net/img/art001_schemat1.png
  • #5 10005380
    mirekk36
    Poziom 42  
    D12 napisał:
    Jak wyciągnąłem kabel łączący INT0 z guzikiem od strony atmegi, to układ przestał reagować na zbliżanie ręki. Natomiast jak tylko wyciągnąłem od strony guzika i kabel był jak antena podłączony do wejścia INT0 to przerwanie cały czas działa.

    Tak mam wszystko podpięte jeśli chodzi o stabilizator napięcia i podpięcie zasilania do atmegi:
    http://hobby.abxyz.bplaced.net/img/art001_schemat1.png


    Schemat jest OK, za to w twoim programie (ok rozumiem, że to testowy) .... ale wstaw panie kochany zamiast tej linijki

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    taką:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 10005405
    dondu
    Moderator na urlopie...
    Ze schematu nie wynika, by na PD5 miał jakiś przycisk, więc raczej chodzi o zamianę :

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    na

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Choć pewności nie ma, bo autor nie opisuje komentarzy do kodu, co warto robić, bo wtedy samemu błędu łatwiej znaleźć.

    A swoją drogą używaj PD2 zamiast 2. Kod staje się czytelniejszy.

    A ja sugeruję taką wersję:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #7 10005436
    D12
    Poziom 14  
    Do PD5 podpiąłem 2 x diodę led do PD6 podpiąłem 1 x diodę led pod PD2(INT0) guzik teraz ma zwierać do +5V (bo chyba tak trzeba :D) w PD0 i PD1 mam tam wpięte od rs232 (max232). No i na stałe mam wpięte kable od programatora. No i kondensatory i reset. I to by było na tyle. Mogę wysłać foty zaraz ale tam trudno coś rozszyfrować :)
  • #8 10005441
    dondu
    Moderator na urlopie...
    Fotek nie wysyłaj, tylko wstaw na forum - link jak to zrobić podałem powyżej.
    Warto byłoby jednak, gdybyś naniósł na schemat swoją aktualną sytuację :)
    No i aktualny program.

    No tak, muszę sprawdzić bo INT nie jest chyba w logice ujemnej i pull-up będzie przeszkadzał.

    Dodano po 8 [minuty]:

    Pokaż uzupełniony schemat i aktualny program - to bardzo istotne.
  • #9 10005481
    mirekk36
    Poziom 42  
    D12 napisał:
    PD2(INT0) guzik teraz ma zwierać do +5V (bo chyba tak trzeba :D) )


    Przecież pisałeś wcześniej, że pod PD2 czyli pod wejćie INT0 masz wpięty swój GUZIK. Zatem musisz podciągnąć ten pin wejściowy tak jak pokazałem wyżej do VCC - tym poleceniem.

    I czy nie widzisz ze schematu, że twój guzik jest zwierany do masy a nie VCC ??? Więc tak to pozostaw a nie zmieniaj - to będzie dobrze z tym co napisałem.
  • #10 10005498
    dondu
    Moderator na urlopie...
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jeżeli poprawnie czytam datasheet i analizuję program autora, to ustawia on tryb: Any logical change on INT0 generates an interrupt request.
    więc nie ma większego znaczenia, czy zwiera włączony pull-up do masy, czy odwrotnie.
    Sądzę, że przy takim ustawieniu najprostszym rozwiązaniem jest przycisk zwierający do masy i włączony pull-up programowy.

    Swoją drogą włączasz oba przerwania INT0 i INT1 - więc ponowię prośbę : pokaż aktualny schemat.
  • REKLAMA
  • REKLAMA
  • #12 10005533
    mirekk36
    Poziom 42  
    D12 napisał:
    A bo ja chciałem zmodyfikować program z tego kursu (tzn napisać swój tylko z opisów a nie kopiując gotowca żeby się nauczyć :)) Więc jest niezły bałagan w tym co robię.


    No tak masz rację, że bałagan - tym bardziej, że co innego robisz, co innego piszesz, co innego pokazujesz na schemacie a jeszcze co innego piszesz w kodzie ;) .... oj tą drogą to jednak za dużo się nie nauczysz albo może inaczej powiem, tą metodą nie za szybko się nauczysz podstaw tego przyjemnego języka.
  • #14 10005579
    D12
    Poziom 14  
    No to w gimpie na szybko to tak wygląda

    [Atmega8][C]Przerwanie dokonuje się jak tylko zbliżę rękę nad atmegę :-)[/img]

    Diody są oczywiście LED, a się pomyliłem rezystory mam osobno do każdej diody.
  • #15 10005596
    dondu
    Moderator na urlopie...
    Przy takim schemacie i programie Twoim problemem (zbliżanie ręki) jest brak wymuszenia stanu na pinach INT0 oraz INT1 za pomocą rezystora pull-down.

    Ale zmiast podłączać zewnętrzny rezystor pull-down, zrób tak jak napisałem wcześniej:
    dondu napisał:
    ... przy takim ustawieniu najprostszym rozwiązaniem jest przycisk zwierający do masy i włączony pull-up programowy.


    Gdy tak zrobisz układ wtedy program doszlifujemy :)

    I uwaga do diod: jeden rezystor na diodę, a nie na 3 diody, bo będą przygasać gdy świecić będą razem. No chyba, że taka sytuacja (wspólne świecenie), nigdy nie wystąpi.
  • #16 10005605
    mirekk36
    Poziom 42  
    A powiedz mi z czego to wynika, że:

    1. Masz schemat oryginalny na którym się wzorowałeś i na nim jest klawisz zwierający pin procka do masy

    2. masz kursy w internecie na które się powołujesz z których jasno wynika że klawisz powinien zwierać pin do masy

    a ty z uporem godnym podziwu - przerabiasz to na klawisz zwierający do VCC czyli do +5V ???? a potem się dziwisz że ci to nie działa. A co dziwniejsze twierdzisz (nie wiem na podstawie czego) że akurat tak się robi.
  • #17 10005620
    D12
    Poziom 14  
    No nie dopatrzyłem tego i właściwie nie wzorowałem się na tym schemacie kiedyś ten przykład zrobiłem i działało. Tylko, że skopiowałem i nic mnie to nie nauczyło. Chyba zacznę od zrobienia to jak jest w tym kursie, a potem zacznę modyfikować.

    Na razie muszę sobie zrobić przerwę później zajmę się nauką przerwania. No i może coś doczytam. W ogóle dzięki, że staracie się mi pomóc :)
  • #19 10005648
    D12
    Poziom 14  
    Dzięki za punkty :)

    Dobra rozwiązałem problem trzeba było ustawić stan wysoki na wyjściu INT0.
    Dzięki wszystkim za pomoc.
REKLAMA