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

Jak prawidłowo zliczać impulsy? ATmega16, przerwania int0.

NeverGiveUp1995 15 Maj 2015 17:15 1236 10
  • #1 14695729
    NeverGiveUp1995
    Poziom 9  
    Witam mam taki problem z przerwaniami int0 chciałem podłączyć transoptor szczelinowy pod wejście int0 atmegi16 i zliczać impulsy tylko jest taki problem ze jak zasłonię szczelinę transoptora to zamiast mi dodać 1 impuls to dodaje mi albo 2 albo 10 jak padnie w czym może być problem poniżej zamieszczam kod i schemat Jak prawidłowo zliczać impulsy? ATmega16, przerwania int0.


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #2 14695845
    Konto nie istnieje
    Konto nie istnieje  
  • #3 14696082
    NeverGiveUp1995
    Poziom 9  
    zobaczę ale to bd działać jak bd 1 impuls np co 5-10min??
  • #4 14696440
    dondu
    Moderator na urlopie...
    NeverGiveUp1995 napisał:
    ... problem ze jak zasłonię szczelinę transoptora to zamiast mi dodać 1 impuls to dodaje mi albo 2 albo 10 jak padnie

    Nie ma takiej możliwości jeśli ruch przesłony jest stanowczy tzn. przesłona nie drga stojąc na krawędzi strumienia światła.

    Taki objaw daje jedynie przycisk w powodu drgań styków: http://mikrokontrolery.blogspot.com/2011/04/przycisk-drgania-stykow-debouncing.html

    Czy więc na pewno mówimy o transoptorze skoro w programie w komentarzach mamy klawiaturę?

    Zastanów się co ustawiasz tym rozkazem:

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

    vs schemat.


    Zastanów się nad sensem tych dwóch linii:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #5 14697869
    NeverGiveUp1995
    Poziom 9  
    Kod programu poprawiłem na taki i dalej jest tak jak przy klawiszu raz dodaje 1 raz 2 a nieraz nawet doda 6 razy transoptor to LTH301A a przegrodę zasłaniam czarnym kawałkiem plastiku


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 14699728
    dondu
    Moderator na urlopie...
    Na końcu pętli głównej dodaj opóźnienie 1000ms, po to byśmy byli pewni co się dzieje gdy zasłonisz, a następnie po np. 3 sekundach odsłonisz transoptor. Opisz dokładnie efekt działania programu.
  • #7 14702386
    GienekS
    Poziom 32  
    Sygnał po transoptorze należałoby formować. Najpierw filtrem dolnoprzepustowym, a potem przepuścić przez bramkę Schmitta.
  • #8 14702439
    dondu
    Moderator na urlopie...
    GienekS napisał:
    Sygnał po transoptorze należało by formować. Najpierw filtrem dolno-przepustowym a potem przepuścić przez bramkę Schmitta.

    Po pierwsze, transoptor sam z siebie nie jest generatorem, więc nie może generować impulsów jak sugeruje autor tematu przy takim podłączeniu jak pokazane na schemacie. Filtr RC jest więc niepotrzebny.

    Po drugie, przerzutniki Schmitta są na każdym wejściowym pinie cyfrowym tego mikrokontrolera: http://mikrokontrolery.blogspot.com/2011/04/jak-mikrokontroler-widzi-sygnal-cyfrowy.html

    Problem leży w inny miejscu, ale autor milczy ...
  • #9 14704701
    NeverGiveUp1995
    Poziom 9  
    Witam uruchomiłem ten program na atmega16 innej niż ta co wcześniej i jak na razie liczy tak jak powinno czyli zasłonie szczelinę transoptora i dodaje 1 tak jak miało to być. A na tej drugiej dalej nie działa tak jak powinno nie wiem czy czasem nie jest problem z płytka pcb która dodam wieczorem
  • #10 14715627
    NeverGiveUp1995
    Poziom 9  
    dalej nie mogę sobie poradzić z tymi przerwaniami może ma ktoś jakiś inny pomysł potrzebuję zrobić takie coś żeby mi zliczało ile razy załącza się podajnik pieca co
  • #11 14715904
    dondu
    Moderator na urlopie...
    To jest tak prosta sprawa, że trudno nam sobie wyobrazić jaki błąd popełniasz. Jest to tym trudniejsze, że zamiast pokazać aktualny program i opisać rezultaty jego działania, piszesz nic nie mówiący nam post.
REKLAMA