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

Jak napisać program w Bascom do generatora 59 impulsów z przerwą?

simgsm 22 Gru 2007 18:59 1202 4
REKLAMA
  • #1 4614323
    simgsm
    Poziom 11  
    Posty: 15
    Pomógł: 2
    Witam.

    Jestem osobą która od kilku miesięcy w wolnych chwilach próbuje sił z mikrokontrolerami. Jako język wybrałem Bascom bo wydaje się być bardziej przyjazny od np. C.

    Mam wielki problem gdyż nie wiem jak zabrać się za pisanie programu który miałby generować 59 impulsów w określonym czasie, a po wygenerowanie zrobić przerwę długości jednego impulsu i dalej od początku.

    Częstotliwość generatora to powiedzmy 2kHz.

    Za wszelką pomoc dziękuję.
  • REKLAMA
  • #2 4614891
    m_zim
    Poziom 18  
    Posty: 170
    Pomógł: 23
    Ocena: 1
    Zliczaj przerwania timera co odpowiedni odstęp czasu. Po 59 zliczeniu przerwij generowanie i wyzeruj timer.

    pozdrawiam
  • REKLAMA
  • #3 4622480
    simgsm
    Poziom 11  
    Posty: 15
    Pomógł: 2
    Mam prostokąt (PWM) na timer1.
    Czy zliczać Timer1 czy Timer0?
    Timer ma być ustawiony na time czy counter.
    Wydaje mi się że najlepiej byłoby ustawić na zliczanie impulsów czyli counter i po odliczeniu 59 zatrzymać Timer1 na czas 1 lub 2 impulsów.

    Wszystko OK ale nie udaje mi się to w praktyce. Albo nie generuje nic, albo nie zatrzymuje po odliczeniu.

    Próbowałem zliczać impulsy timer0=counter i stopować timer1 po odliczeniu 59 i nie wychodzi.

    Może ktoś wrzuci kawałek przykładu?


    pozdrawiam
  • REKLAMA
  • #4 4623842
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    Witaj.
    Pod ręką miałem ATtiny26 i płytkę ZL4AVR, więc na szybko "popełniłem" programik, który spełnia Twoje założenia. Zmieniłem częstotliwość impulsów (około 2Hz), abym mógł sobie wizualnie sprawdzić prawidłowość działania programu. Programik w poniższej postaci generuje 8 impulsów, potem ma 2 okresy przerwy itd. Dioda LED podłączona do B0 miga w takt tych zmian, a Dioda LED podłączona do B1 zmienia stan przy każdym przerwaniu od timer0. W ten sposób łatwiej mi było sprawdzić działanie programu.
    $regfile = "ATtiny26.dat"
    $crystal = 1000000
    Dim Bylo_przerwanie As Bit , Ilosc_impulsow As Byte , Licznik_impulsow As Byte
    Dim Ilosc_przerw As Byte , Licznik_przerw As Byte
    Ilosc_impulsow = 8
    Ilosc_przerw = 2
    Config Timer0 = Timer , Prescale = 1024
    On Timer0 Przerwanie                                        'przerwanie co około 0,26 s
    Config Pinb.0 = Output
    Config Pinb.1 = Output
    Reset Portb.0
    Reset Portb.1
    Enable Interrupts
    Enable Timer0
    Ilosc_impulsow = Ilosc_impulsow + Ilosc_impulsow            ' x2, bo robimy Toggle PortB.0 po każdym przerwaniu
    Ilosc_przerw = Ilosc_przerw + Ilosc_przerw                  ' x2, bo robimy Toggle PortB.0 po każdym przerwaniu
    Do
     If Bylo_przerwanie = 1 Then
       Bylo_przerwanie = 0
       Licznik_impulsow = Licznik_impulsow + 1
          Toggle Portb.1
          If Licznik_impulsow <= Ilosc_impulsow Then
           Toggle Portb.0
          Else
           Licznik_przerw = Licznik_przerw + 1
             If Licznik_przerw >= Ilosc_przerw Then
               Licznik_przerw = 0
               Licznik_impulsow = 0
             End If
          End If
     End If
    Loop
    
    Przerwanie:
    Bylo_przerwanie = 1
    Return
    
    End
    

    Pozdrowienia - teedd
  • #5 4628475
    simgsm
    Poziom 11  
    Posty: 15
    Pomógł: 2
    Wielkie dzięki Teedd.

    O coś takiego chodziło ;-)

    Pozdrawiam
REKLAMA