Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Tap tempo dla AVR, [Attiny 2313] [bascom]

maciek741 17 Aug 2010 21:00 1880 1
  • #1
    maciek741
    Level 1  
    Witam serdecznie!
    To jest mój pierwszy post na elektrodzie. Jestem początkującym Bascomowcem.
    Szukałem długo w necie rozwiązań typu "Tap tempo" dla AVR pod Bascom. Niestety nie było. Napisałem własny programik i działa.

    
    'mój pierwszy program typu "metronom"
    'z "nabijaniem tempa 1 przyciskiem
    'Działa, ale czy da się prościej?
    
    $regfile = "attiny2313.dat"
    $crystal = 8000000
    
    
    Config Pinb.1 = Output
    'na razie dioda
    Config Pinb.0 = Input
    Pinb.0 = 1
    'przycisk "TEMPO"
    
    Config Debounce = 2
    
    Config Int0 = Falling
    ' przycisk "wymuszony start"
    Config Timer0 = Timer , Prescale = 64
    On Timer0 Przerwanie_co_1ms
    On Int0 Zeruj
    
    Led Alias Portb.1
    Portb.1 = 1
    
    
    Dim Granica As Word
    Dim Licznik As Word
    Dim Odlicz As Word
    Dim Tik As Bit
    
    Granica = 1000
    Odlicz = 0
    Licznik = 0
    Tik = 0
    
    Enable Interrupts
    Enable Timer0
    Enable Int0
    Timer0 = 6
    Start Timer0
    
    
    '-------------------------------------------
    Glowna:
    Do
       Debounce Pinb.0 , 0 , Zacznij , Sub
          If Tik = 1 Then
          Gosub Petla
       End If
    Loop
    
    '-------------------------------------------
    Petla:
    
    
    If Odlicz = Granica Then
    Reset Portb.1
       Odlicz = 0
    End If
    
    If Odlicz >= 2 Then
    Set Portb.1
    End If
    
    Incr Odlicz
    
    Reset Tik
    
    Return
    
    
    '-------------------------------------------  start licznika
    Zacznij:
    
    Licznik = 0
    
    Do
       Debounce Pinb.0 , 0 , Zakoncz , Sub
    Loop
    
    '-------------------------------------------  2 klik - zakończ przechwytywanie
    Zakoncz:
    Stop Timer0
    Gosub Przepisz
    Start Timer0
    Gosub Glowna
    
    '-------------------------------------------  przepisanie zmiennej
    Przepisz:
    Granica = Licznik
    Odlicz = 0
    Return
    
    '------------------------------------------- +131 dla uzyskania 1mS
    Przerwanie_co_1ms:
    
    Counter0 = Counter0 + 131
    
    Incr Licznik
    
    Set Tik
    
    Return
    '-------------------------------------------
    Zeruj:
    Odlicz = Granica
    Counter0 = Counter0 + 131
    Return
    
    End
    


    proszę o krytykę na temat składni kodu, poprawności pisania itd., ale też o inne lepsze pomysły w tym temacie.

    Pozdrawiam serdecznie.

    Dodano po 14 [minuty]:

    Dodam może jeszcze, że ten mały kod będzie częścią większego - czyli sterownika DMX-512. Odbiornik jest prosty w napisaniu w porównaniu z nadajnikiem.
    To może się rozbić o co najmniej 2 procki, w tym jeden z ADC, oraz zewnętrzny EEPROM.
  • #2
    Freddy
    Level 43  
    Sterownik DMX, jest tego troche w sieci, słabo szukałeś.
    Patrzyłeś na avrfreaks ?