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

ATtiny13 - [Bascom] Przerwanie INT0 od syg. z generatora

sieger 03 Mar 2013 11:56 3315 12
  • #1 12010272
    sieger
    Poziom 24  
    Witam

    Na PB0 mam podpięty generator
    Na PB2 powinien się generować prawidłowy sygnał o częstotliwości f/2

    Napisałem kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Niestety na oscyloskopie obserwuję coś następującego:

    ATtiny13 - [Bascom] Przerwanie INT0 od syg. z generatora

    Zamiast przełączać stan portu przy każdym narastającym zboczu sygnału z generatora generuje jakieś szpilki
  • #2 12011059
    BlueDraco
    Specjalista - Mikrokontrolery
    1. Wygląda to na błędne zaprogramowanie sposobu zgłaszania przerwania, ale kod wygląda na pioprawny. Taki efekt występowałby przy nie skasowaniu znacznika przerwania, ale wg datasheet znacznik jest kasowany przy wywołaniu procedury.

    2. Nie pomyślałeś, żeby użyć do tego celu zwykłego przerzutnika D w obudowie SOT23-5? Działałby bez drżenia (jitter) i nie trzeba go programować,
  • Pomocny post
    #3 12011443
    seba_x
    Poziom 31  
    A nie powinno być Config Portb.0 zamiast Pinb.0 ?
  • #5 12011699
    sieger
    Poziom 24  
    @BlueDraco

    Oczywiście, to jest dobry pomysł, ale to jest dopiero początek bardziej skomplikowanego programu. Na razie tylko odpalałem przerwanie i chciałem to przetestować w najprostszej formie.
    Więc y=f/2 to tylko test a nie docelowa funkcja

    @Seba_x

    Według dokumentacji bascoma, temat config port:

    Syntax

    CONFIG PORTx = state

    CONFIG PINx.y = state

    @rs07

    oczywiście mogę spróbować, ale wg podpowiedzi bascoma pin od INT0 znajduje się w portB.0. Uważasz, że B.0 jest błędny dla INT0 i powinienem użyć B.1 ?
  • Pomocny post
    #6 12011727
    Mundi1970
    Poziom 24  
    Na PB0 jest PCINT0, a na PB1 INT0 lub PCINT1.
  • #7 12011822
    sieger
    Poziom 24  
    Zaczęło działać poprawnie. Niedopatrzenie z mojej strony, że PCINT0 i INT0 to różne przerwania.

    Dla pełności tematu. Jak skorzystać z PCINT? Szukałem w manualu i jakieś przykłady w sieci ale nie znalazłem nic czytelnego.
  • Pomocny post
    #8 12012575
    Mundi1970
    Poziom 24  
    Przerwania PCINTx wykonują się przy każdej zmianie stanu logicznego, niema możliwości konfiguracji np. tylko dla zbocz narastającego lub opadającego. Stan zbocza na poszczególnym pinie sprawdzasz w przerwaniu. Attiny13 ma 6 pinów PB.0-PB.5 (PCINT0 do PCINT5) które mogą wywołać przerwanie. I tu jest jedna myląca rzecz :) dla tych pinów jest tylko jeden wektor przerwań w tym wypadku PCINT0. Który pin ma wywoływać przerwanie ustawiasz w rejestrze PCMSK0. Czyli chcesz np. przerwanie z pinu PB4 (PCINT4) i PB5 (PCINT5), przykład z ATmegi2561:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    #9 12014486
    Konto nie istnieje
    Poziom 1  
  • #10 12016594
    sieger
    Poziom 24  
    Wszystkie te cechy mi odpowiadają, bo planuje użyć detekcji przejścia przez zero sieci. Czyli będzie tylko 100Hz (dwa przejścia na okres, oba zbocza mnie interesują).
  • #11 12617296
    sieger
    Poziom 24  
    Aktualnie program wygląda następująco:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Spodziewane działanie:
    po sygnale przejścia od zera program powinien odczekać 2.5ms, załaczyć wyjście sterujące triakiem na 2.5ms i wrócić do oczekiwania aż pojawi się kolejne przejście przez zero - tym razem w przeciwnym kierunku.

    Obecne zachowanie:
    Testuje układ z generatorem sygnałów i oscyloskopem aby wyeliminować błędy wynikające z obwodu zero-crossingu. Gdy sygnał wejściowy TTL zmienia stan na wyjściu pojawia się ten sam stan z opóźnieniem o 2.5ms.

    Nie rozumem dla czego sygnał wyjściowy nie wraca do zera po 2.5ms od włączenia.
    Gdy zmieniam czasy opóźnienia ma to wpływ na czas opźóźnienie przełączenie sygnału wyjściowego ale dalej jest to jakby kopia sygnału sterującego z opóźnieniem a nie sygnał wyzwalania dla triaka.

    Pozdrawiam
  • Pomocny post
    #12 12617467
    Konto nie istnieje
    Poziom 1  
  • #13 12618065
    sieger
    Poziom 24  
    Dziękuję za podpowiedź.

    Rzeczywiście w linii "Triac Alias Pinb.2" wstawiłem coś niezgodnego z zamierzeniem.
    Dałoby się to obejść, gdyby sygnał bramki triaka też wyłączać przypisaniem jedynki.

    Za instrukcją do procesora:

    Cytat:
    10.2.2 Toggling the Pin
    Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn.
    Note that the SBI instruction can be used to toggle one single bit in a port.


    Natomiast ciężko mi się zgodzić z pierwszą sugestią, bo w instrukcji Bascom jest napisane:

    Cytat:
    Action

    Sets the port or a port pin to the right data direction.

    Syntax

    CONFIG PORTx = state

    CONFIG PINx.y = state


    Program już działa prawidłowo. Teraz czas na dodanie sterowania kątem zapłonu triaka z potencjometru(przetwornik A/C) i komunikacją szeregową.

    Pozdrawiam
REKLAMA