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 przeróbka kodu.

henryxxl 07 Sie 2010 16:45 1458 11
REKLAMA
  • #1 8374414
    henryxxl
    Poziom 26  
    Witam.
    Znalazłem na elektrodzie stroboskop na atmega8, zmieniłem program na atmega16(taki miałem pod ręką) wszystko działa jak trzeba tylko nie wiem jak dopisać program który po podłączeniu masy do portu PORTC5 zapali diody na stałe.
    Oto link do stroboskopu https://www.elektroda.pl/rtvforum/topic1378758.html
  • REKLAMA
  • #2 8375584
    jacekk232
    Poziom 17  
    Witam.

    Spróbuj zrobić tak:
    $crystal = 1000000                                          'Deklaracja częstotliwości kwarcu
    $regfile "m8def.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
    Config Pinc.5 = Input
    Portc.5 = 1
    
    Do
    If Pinc.5 = 1 Then
       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
    Else
       Pwm1a = 200
       Pwm1b = 200
    End if
    Loop
    


    Pozdrawiam
  • REKLAMA
  • REKLAMA
  • #6 8376906
    jacekk232
    Poziom 17  
    Sprawdziłem ten kod na tiny2313 i działa dobrze czyli po podaniu stanu niskiego na wybrany pin (u mnie PD0) diody przestają mrugać i świecą stale. Pokaż może jak to masz podłączone.
  • REKLAMA
  • #7 8377104
    henryxxl
    Poziom 26  
    Ja testuję ten program na atmega16, Diody podłączam do oc1A, oc1B.
    Jeżeli do atmegi wyślę sam program bez funkcji ciągłego świecenia to diody migają a jak wyślę z funkcją to świecą ciągłym światłem po załączeniu.,
  • Pomocny post
    #8 8377201
    jacekk232
    Poziom 17  
    Hmmm...Wygląda to tak jakby na PC.5 był wciąż stan niski i program wykonuje cześć odpowiedzialna za ciągłe świecenie. Spróbuj zmienić linie
    If Pinc.5 = 1 then

    na
    If Pinc.5 = 0 then
    i zobacz co się będzie robiło. Program powinien działać niejako odwrotnie tzn. po podaniu masy na pin diody powinny mrugać.
    Jeśli to nie pomoże to spróbuj zamiast PC.5 użyć jakiegoś innego pinu. Pamiętając o skonfigurowaniu go jako wejścia z podciągnięciem.
  • #9 8377738
    henryxxl
    Poziom 26  
    Witam.
    Zrobiłem tak jak napisałeś i miałeś rację diody migają tzn. tak jakby non stop była podłączona masa a nie jest, wiesz czemu tak się dzieje? pinc5 podałem jako przykład mogę każdą nóżkę użyć, wszystkie są wolne oprócz tych na diody.
    Zmieniłem port na Portd.7 i wszystko działa.
    Dziękuję Panu za pomoc wiele się nauczyłem.
    Pozdrawiam

    Dodano po 27 [minuty]:

    Mam jeszcze jedno pytanie jaką komendą regulować szybkość migania diód? chodzi mi oto że podłączam jeden switch do portu dowolnego i on zwiększa szybkosć a drugi zmniejsza.
  • #10 8377945
    Jaca
    Poziom 31  
    PortC.5 (i jeszcze kilka pinów portu C w M16) nie będzie działać bo domyślnie (fabrycznie) ma włączony JTAG w fusebit'ach. Pamiętaj aby wyłączać JTAG w M16 jak i w innych AVR'ach, które posiadają JTAG.
  • #11 8452339
    henryxxl
    Poziom 26  
    Chcę zrobić zęby po naciśnięciu 1switcha dioda zapalała sie z po naciśnięciu 2switcha gasła oto kod który kompiluję i wgrywam to atmegi lecz dioda po załączeniu odrazu świeci a nie jak program kaze powinna nie swiecić dopiero po naciśnięciu switcha, dla czego tak się dzieję?
                 $regfile = "m16def.dat"                        'najpierw określamy typ proca
    $crystal = 1000000                                          'definiujemy z jakim taktowaniem będzie pracował
    
    
    Config Portb = Input                                        'port b  jako wejścia
           Portb = &B00000000                                   'wszędzie stan spoczynkowy-0
    Config Portd = Output                                       'pprt d jako wyjścia
           Portd = &B0000000                                    'wszędzie stan spoczynkowy-0
    
    
     Do                                                         'pętla nieskończona
    
       If Pinb.0 = 1 Then                                       'jeżeli przycisk 1 wciśnięty
       Portd.0 = 1                                              'zapal diode
       Elseif Pinb.1 = 1 Then                                   'jeżeli przycisk 2 wciśnięty
       Portd.0 = 0                                              'zgaś diodę
       End If                                                   'koniec bloku warunkowego
    
     Loop                                                       'koniec pętli
    
    End                                                         'koniec programu
  • #12 8469799
    jacekk232
    Poziom 17  
    Najprawdopodobniej dzieje się to dlatego, że wpisanie zer do Portb
    Config Portb = Input                                        'port b  jako wejścia
           Portb = &B00000000                                   'wszędzie stan spoczynkowy-0 

    nie ustawia na wejściach spoczynkowego stanu niskiego tylko ustawia te wejścia w stan wysokiej impedancji (tzw. pływające wejścia). Po szczegóły odsyłam do wujka googla :-)
    Spróbuj obydwa wejścia ściągnąć do masy rezystorami np. 10k albo jeszcze lepiej ustaw na wejściach spoczynkowy stan wysoki i przyciskami zwieraj je do masy. To jest powszechny sposób dołączania przycisków do AVRków.
    Tylko program zmień na:
    If Pinb.0 = 0 Then                                       'jeżeli przycisk 1 wciśnięty
       Portd.0 = 1                                              'zapal diode
       Elseif Pinb.1 = 0 Then                                   'jeżeli przycisk 2 wciśnięty
       Portd.0 = 0                                              'zgaś diodę
       End If      


    Pozdrawiam
REKLAMA