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

[Bascom] zegar widmowy- reset wartości timera

zuraf 09 Gru 2009 14:33 2405 7
REKLAMA
  • #1 7365830
    zuraf
    Poziom 14  
    Witam.

    Uruchomiłem mój prototypowy zegar widmowy lecz mam mały problem. Pozycjonowanie obrazu zrealizowałem za pomocą halotronu podpiętego pod int0. Problem polega na tym że wraz z ustawiniem wartości zmiennej A w przerwaniu od int0 wartość timera1 odmierzająca stałe odcinki czasu nie zostaje resetowana co skutkuje drżeniem obrazu. W jaki sposób w bascomie zresetować wartość timera?próbowałem wszystkimi znanymi mi sposobami jak load timer1=0, counetr1=0, timer1=0 load counter1=0 i nic...


    $crystal = 16000000
    $regfile "m8def.dat"
    
    
    Config Timer0 = Timer , Prescale = 8
    Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1
    
    
    
    Config Int0 = Rising
    Config Int1 = Rising
    On Int0 Poz
    On Int1 O
    Enable Int1
    Enable Int0
    Enable Interrupts
    Compare1a = 600
    
    Config Portc = Output
    Config Portb.2 = Output
    Config Portb.1 = Output
    Config Portd.2 = Input
    Config Portd.3 = Input
    Config Portd.7 = Output
    Set Portd.3
    
    
    Dim A As Byte
    Dim T As Word
    Dim W As Single
    Dim U As Word
    Dim B As Word
    Dim C As Word
    C = 1
    A = 1
    B = 0
    Do
    
    
    Portc = Lookup(a , Tab)
    Portd = Lookup(a , Tab2)
    If A = 10 Then A = 0
    
    
    
    
    
    Loop
    
    
    Poz:
    A = 1
    Timer1 = 0
    Return
    
    
    O:
    Incr A
    
    
    Return
    
    
    
    Tab:
    Data &B00000001 , &B00000011 , &B00000011 , &B00000101 , &B00000101
    Data &B00001001 , &B00001001 , &B00010001 , &B00111111 , &B00000001
    
    Tab2:
    Data &B00000000 , &B00000000 , &B00000000 , &B00000000 , &B00000000
    Data &B00000000 , &B00000000 , &B00000000 , &B00000110 , &B00000000
  • REKLAMA
  • #2 7365909
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 7365977
    zuraf
    Poziom 14  
    Dokładnie taki miałem zamiar ale coś to nie chciało chodzić. timer0 miał mierzyć okres, a timer1 generował odcinki czasu ale wszystko głupiało i zrezygnowałem. Łatwiej mi było ustabilizować obroty silnika, gdyż jest to silnik z hdd wiec steruje nim przez sterownik
  • #4 7366012
    janbernat
    Poziom 38  
    "Config Timer1 = Timer , Prescale = 8 , Compare A = Toggle , Clear Timer = 1"
    Przy tej konfiguracji to chyba nigdy nie wejdzie w przerwanie od Timer1.
    Gdy osiągnie Compare1a = 600 to dzięki poleceniu Clear Timer = 1 licznik zostanie wyzerowany.
    A przerwanie Poz: jest uruchamiane dopiero po przepełnieniu licznika.
    Ale ja nie mam zaufania do konfiguracji liczników w Bascomie- zawsze wpisuję wartości do rejestrów "na piechotę"
  • REKLAMA
  • #5 7366055
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 7366951
    zuraf
    Poziom 14  
    dokładnie tak jak mówisz. A wytłumacz mi jeszcze od czego jest przerwanie c1?
  • #7 7366982
    Konto nie istnieje
    Poziom 1  
  • #8 7371873
    janbernat
    Poziom 38  
    "kolega janbernat chyba nie pojął o co chodzi w programie w pierwszym poście.
    Tam są przerwanie na int0 i int1 , pierwsze to pewnie czujnik optyczny a drugie końcówka compare A połączona z int1, chyba że się mylę."
    No tak to jest- jak się coś widzi a o czym innym myśli.
    Głupoty napisałem bo "zafiksowałem" się na przerwaniu od timera- a to normalne przerwanie zewnętrzne.
REKLAMA