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

Stroboskop pomoc w kodzie, zmiana

henryxxl 07 Maj 2010 15:47 1800 6
REKLAMA
  • #1 8047334
    henryxxl
    Poziom 26  
    Witam.
    Zrobiłem stroboskop samochodowy oto kod wzięty z https://www.elektroda.pl/rtvforum/topic1378758.html
    $crystal = 1000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "m16def.dat"                                        'deklaracja modelu procesora
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       'Konfiguracja Timera
    Ddrb = &B11111111                                           'Odblokowanie globalnego wyjścia OC1
    Pwm1a = 0
    Pwm1b = 0
    Do
    
    Pwm1a = 200
    Waitms 45
    Pwm1a = 0
    Waitms 45
    
    Pwm1a = 200
    Waitms 45
    Pwm1a = 0
    Waitms 45
    
    Pwm1a = 200
    Waitms 45
    Pwm1a = 0
    Waitms 45
    
    Pwm1a = 200
    Waitms 45
    Pwm1a = 0
    Waitms 45
    
    
    
    
    
    Pwm1b = 200
    Waitms 45
    Pwm1b = 0
    Waitms 45
    
    Pwm1b = 200
    Waitms 45
    Pwm1b = 0
    Waitms 45
    
    Pwm1b = 200
    Waitms 45
    Pwm1b = 0
    Waitms 45
    
    Pwm1b = 200
    Waitms 45
    Pwm1b = 0
    Waitms 45
    
    
    
    
    Loop
    

    Jak zrobić przyciskając przycisk zmieniać szybkość migania?
  • REKLAMA
  • #2 8047367
    ololukiXP
    Poziom 19  
    Zamiast liczby za Waitms daj zmienną, którą będziesz zwiększał lub zmniejszał po naciśnięciu przycisku(ów). Po co ci PWM do tego? Będziesz zmieniał jasność?
  • REKLAMA
  • #3 8047386
    henryxxl
    Poziom 26  
    To nie ja pisałem ten program, według autora użył pwm do obniżania napięcia które daje mosfet do 6v a ja bym chciał 12v.
    Mógłbyś zmienić program żeby dało sie zmieniać szybkość? Jestem początkującym wiec nie wiem ale sporo czytam.
  • Pomocny post
    #4 8047964
    ololukiXP
    Poziom 19  
    
    $crystal = 1000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "m16def.dat"                                        'deklaracja modelu procesora
    
    Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down       'Konfiguracja Timera
    Ddrb = &B11111111                                           'Odblokowanie globalnego wyjścia OC1
    
    Dim Szybkosc As Byte                                        ' okres swiecenia diody byte-255ms max
    Config Porta = Input                                        'wejście przycisków zwiekszania/zmniejszania szybkosci
    Porta = 255                                                 'włączenie rezystorów podciągających
    Szybkosc = 40                                               'początkowy okres swiecenia diody
    
    Pwm1a = 0
    Pwm1b = 0
    
    Do
    
    If Porta.0 = 0 And Szybkosc < 255 Then Incr Szybkosc        'jesli porta.0 zwarty do masy to zwieksz okres swiecenia diody
    If Porta.1 = 0 And Szybkosc > 5 Then Decr Szybkosc          'jeśli porta.1 zwarty do masy to zmniejsz okres swiecenia diody
    
    Pwm1a = 200
    Waitms Szybkosc
    Pwm1a = 0
    Waitms Szybkosc
    
    Pwm1a = 200
    Waitms Szybkosc
    Pwm1a = 0
    Waitms Szybkosc
    
    Pwm1a = 200
    Waitms Szybkosc
    Pwm1a = 0
    Waitms Szybkosc
    
    Pwm1a = 200
    Waitms Szybkosc
    Pwm1a = 0
    Waitms Szybkosc
    
    
    
    
    
    Pwm1b = 200
    Waitms Szybkosc
    Pwm1b = 0
    Waitms Szybkosc
    
    Pwm1b = 200
    Waitms Szybkosc
    Pwm1b = 0
    Waitms Szybkosc
    
    Pwm1b = 200
    Waitms Szybkosc
    Pwm1b = 0
    Waitms Szybkosc
    
    Pwm1b = 200
    Waitms Szybkosc
    Pwm1b = 0
    Waitms Szybkosc
    
    
    
    
    Loop
    end
    

    Przyciski monostabilne np. mikroswitche podłączone do portu A0 i A1 zwierają do masy.
  • REKLAMA
  • #5 8050990
    wader_669
    Poziom 28  
    Radze poczytac helpa i pomyslec logicznie, bo kod bedzie dzialac, ale z mega opoznieniem.

    Dodano po 9 [minuty]:

    i po co uzywasz do tego pwm?

    Dodano po 24 [minuty]:

    
    $crystal = 1000000
    $regfile "m16def.dat"
    
    Config Pind.2 = Input
    Config Pind.3 = Input
    
    Config Pind.4 = Output
    Config Pind.5 = Output
    
    Set Portd.2
    Set Portd.3
    
    P1 Alias Pind.2
    P2 Alias Pind.3
    
    Led1 Alias Portd.4
    Led2 Alias Portd.5
    
    Dim Czas As Byte
    Dim I As Byte
    Declare Sub Przyciski
    
    czas= 45
    
    Led1 = 0
    Led2 = 0
    
    Do
    
    For I = 0 To 3
       Call Przyciski
       Led1 = 1
       Waitms Czas
       Led1 = 0
    Next I
    
    For I = 0 To 3
       Call Przyciski
       Led2 = 1
       Waitms Czas
       Led2 = 0
    Next I
    
    Loop
    End
    
    Sub Przyciski
    
    If P1 = 0 Then
    Waitms 25
    If P1 = 0 Then
       Incr Czas
    End If
    End If
    
    If P2 = 0 Then
    Waitms 25
    If P2 = 0 Then
       Decr Czas
    End If
    End If
    
    End Sub
    


    Dodano po 8 [minuty]:

    a najlepiej by bylo tak zrobic:
    
    $crystal = 1000000
    $regfile "m16def.dat"
    
    Config Pind.2 = Input
    Config Pind.3 = Input
    
    Config Pind.4 = Output
    Config Pind.5 = Output
    
    Set Portd.2
    Set Portd.3
    
    P1 Alias Pind.2
    P2 Alias Pind.3
    
    Led1 Alias Portd.4
    Led2 Alias Portd.5
    
    Config Int0 = Low Level
    Config Int1 = Low Level
    On Int0 Przycisk1
    On Int1 Przycisk2
    
    Dim Czas As Byte
    Dim I As Byte
    Declare Sub Przyciski
    
    czas = 45
    
    Led1 = 0
    Led2 = 0
    
    Enable Interrupts
    Enable Int0
    Enable Int1
    Do
    
    For I = 0 To 3
       Led1 = 1
       Waitms Czas
       Led1 = 0
    Next I
    
    For I = 0 To 3
       Led2 = 1
       Waitms Czas
       Led2 = 0
    Next I
    
    Loop
    End
    
    Przycisk1:
    disable int0
    Waitms 25
    If P1 = 0 Then
       Incr Czas
    End If
    enable int0
    Return
    
    Przycisk2:
    disable int1
    Waitms 25
    If P2 = 0 Then
       Decr Czas
    End If
    enable int1
    Return
    
  • #6 8052162
    henryxxl
    Poziom 26  
    $crystal = 1000000
    $regfile "m16def.dat"
    
    Config Pind.2 = Input
    Config Pind.3 = Input
    
    Config Pind.4 = Output
    Config Pind.5 = Output
    
    Set Portd.2
    Set Portd.3
    
    P1 Alias Pind.2
    P2 Alias Pind.3
    
    Led1 Alias Portd.4
    Led2 Alias Portd.5
    
    Config Int0 = Low Level
    Config Int1 = Low Level
    On Int0 Przycisk1
    On Int1 Przycisk2
    
    Dim Czas As Byte
    Dim I As Byte
    Declare Sub Przyciski
    
    Led1 = 0
    Led2 = 0
    
    Enable Interrupts
    Enable Int0
    Enable Int1
    Do
    
    For I = 0 To 3
       Led1 = 1
       Waitms Czas
       Led1 = 0
    Next I
    
    For I = 0 To 3
       Led2 = 1
       Waitms Czas
       Led2 = 0
    Next I
    
    Loop
    End
    
    Przycisk1:
    
    Waitms 25
    If P1 = 0 Then
       Incr Czas
    End If
    
    Return
    
    Przycisk1:
    
    Waitms 25
    If P2 = 0 Then
       Decr Czas
    End If
    
    Return 

    Dioda świeci a nie miga ale dziękuję za zainteresowanie tematem.
  • REKLAMA
  • #7 8167353
    wader_669
    Poziom 28  
    le racja zapomnialem dodac jaka ma miec wartosc poczatkowa zmienna "czas". To poprawilem i 2 inne rzeczy. Teraz powinien dzialac. Przyciski podlacz do odpowiednich portow i do masy
    _______________________________________

    Kolega miszczo997 mnie prosił na pw o schemat i kod do attiny2313.
    Pisze na forum, może komuś innemu też się przyda.

    Zmien regfile na:
    Kod:

    $regfile = "attiny2313.dat"


    Schemat:
    Nie bede rysować 2 diód i 2 switchy na to mi szkoda czasu.
    Podpinasz diode do pinud.4 i pinud.5 i do masy. Możesz też do plusa, ale wtedy "odwróć" diode.
    Switche do pinud.3 i pinud.2, druga nóżka do masy.
    Oczywiście nie zapominając o rezysotrach przy diodzie do tego rezystor na reset i kondensator filtrujący 100nF do zasilania.
REKLAMA