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

Licznik impulsów na Atmega8- jakie oprogramowanie w Bascom?

Juni[]r 16 Sie 2007 01:04 2792 4
REKLAMA
  • #1 4182472
    Juni[]r
    Poziom 16  
    Posty: 459
    Ocena: 25
    mam prośbę i skierowano mnie tutaj.. potrzeba mi zrobić układ na atmega8 w języku bascom a sam nie wiem jak to wykonać w 100%... Działanie proste urządzenie jeżeli dostanie 100 imp / sek zapali jedną diodę od 100 do 200 imp / sek zapali drugą a od 200 w górę zapali trzecią... pewnie dla was to proste jak obręcz ale proszę o pomoc... z góry THX

    dokładnie to nie będą 3 diody tylko dioda rgb ale wyjścia sobie już opisze ptanie tylko jak bawić sie timerem bo mnie w wielu kombinacjach i tak nie działało pewnie robiłem jakiś dziwny błąd... :idea:
  • REKLAMA
  • #2 4182685
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    zobacz sobie temat:
    https://www.elektroda.pl/rtvforum/topic815029.html

    program będzie bardzo podobnie wyglądał. Chodzi mi o Timery.

    Dodano po 2 [minuty]:

    ale czy te diody mają się świecić cały czas to znaczy, że jeśli będzie więcej impulsów niż 200, to mają się świecić wszystkie 3 diody czy tylko 3 dioda??

    Tak na szybko napisałem( nie testowałem ale powinno działać):
    Dioda świeci się tylko jedna w danym momencie
    Diody zaświecane są - to znaczy, że podłączone są Katodą do uP

    $regfile = "m8def.dat"
    $crystal = 8000000
    Cursor Off
    Dim Czestotliwosc As Long
    Dim Licz_8ms As Byte
    Config Portd.0 = Output
    Config Portd.1 = Output
    Config Portd.2 = Output
    Config Timer0 = Timer , Prescale = 256
    Config Timer1 = Counter , Edge = Falling
    On Timer0 Czas
    On Timer1 Zlicz
    Enable Interrupts
    Enable Timer0
    Enable Timer1
    Declare Sub Licz_cze                                        'Pomiar czasu
    Do
    Loop
    End
    
    Czas:
    Load Timer0 = 250
    Incr Licz_8ms
    If Licz_8ms = 125 Then
       Licz_8ms = 0
       Stop Timer1
       Gosub Licz_cze
       Start Timer1
    End If
    Return
    
    Sub Licz_cze
        Czestotliwosc = Czestotliwosc * 256
        Czestotliwosc = Czestotliwosc + Counter1
        If Czestotliwosc < 100 Then
          Reset Portd.0
          Set Portd.1
          Set Portd.2
        End If
        If Czestotliwosc > 100 Then
          If Czestotliwosc < 200 Then
             Reset Portd.1
             Set Portd.0
             Set Portd.2
          End If
        End If
        If Czestotliwosc > 200 Then
          Reset Portd.2
          Set Portd.0
          Set Portd.1
        End If
        Czestotliwosc = 0
        Counter1 = 0
    End Sub
    
    Zlicz:
    Incr Czestotliwosc
    Return
  • REKLAMA
  • REKLAMA
  • #4 4187405
    Juni[]r
    Poziom 16  
    Posty: 459
    Ocena: 25
    Nostradamus na razie mam programator walnięty ale chciałem to na symulatorze odpalić i niestety nic... no chyba ze coś robie nie tak z tymi impulsami... możesz to sprawdzić u siebie może ja coś źle robie ? daje na symulatorze "sim timers" potem, portd.4 150 pulse i nic :(
  • Pomocny post
    #5 4188271
    Nostradamus
    Poziom 17  
    Posty: 233
    Pomógł: 14
    Ocena: 4
    na symulatorze nie masz co patrzeć. One są do niczego. Ok sprawdzę zaraz.

    Dodano po 18 [minuty]:

    ok sprawdziłem. Działa bez problemu. Sprawdzałem na płycie testowej a sygnał brałem z Timera2 skonfigurowanego jako PWM. Zmieniałem różnie Prescaler od 1 do 1024 i działało bez problemu.
REKLAMA