Skocz do zawartości

[bascom][Atmega8], sterowanie PWM za pomocą rc5


loop123

Pomocna odpowiedź

Witam, próbuje zrobić urządzenie które by sterowało diodą led (później silnikiem) ,sterowało by się pilotem rc5 a mianowicie jednym klawiszem by ściemniało diodę a drugim rozjaśniało. Napisałem program a właściwie połączyłem dwa jednak urządzenie nie działa. Może ma ktoś pomysł co zrobiłem źle?

$regfile = "m8def.DAT"                                      'deklaracja procesora, w tym wypadku Atmega8
$crystal = 8000000                                          'deklaracja taktowania

Config Rc5 = Pinb.0                                         'ustawienie pinb.0 jako odbiór sygnału IR

Dim I As Byte , Komenda As Byte                          'deklaracje zmiennych


Enable Interrupts                                           'włączenie przerwań

Config Portb.1 = Output

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 64

                                                        '{Reset Portb.1}
Pwm1a = 0

Do
                                                        'poczatek programu

Getrc5(I , Komenda)                                         'pobierz adres i komende z pilota

  Komenda = Komenda And &B01111111

  Waitms 50



If Komenda = 1 Then
Incr I
If I = 0 Then
I = 255
End If
Pwm1a = I
Waitms 20
End If

If Komenda = 2 Then
Decr I
If I = 255 Then
I = 0
End If
Pwm1a = I
Waitms 20
End If

Loop
End
Link do komentarza
Share on other sites

Wszystko mogłeś zrobić źle poza działającym kodem. Nie podałeś schematu, może tu masz błąd, może twój pilot nie nadaje w RC5, generalnie wszędzie mogłeś popełnić błąd poza kodem. Czy wyświetlałeś na jakimś lcd komendy z pilota? Czy prawidłowo podłączyłeś diodę led pod pin mikrokontrolera?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Zamień $crystal = 8000000 na $crystal = 1000000 - pewnie używasz wewnętrznego oscylatora, który fabrycznie ustawiony jest na 1MHz. No i fajnie by było, gdybyś dodał kilka kondensatorów, z czego ty to zasilasz? A no i na wyjście tsopa koniecznie pull-up (rezystor podciągający do +), albo dopisz portb.0 = 1, to włączysz wewnętrzny, powinien wystarczyć.

Link do komentarza
Share on other sites

Wewnętrzny rezonator jest ustawiony na 8MHz, układ działa i schemat jest na pewno dobry bo pierwotnie był zrobiony tak żeby po naciśnięciu przycisku na pilota zapalała się dioda i działał a teraz chciałbym zrobić tak żeby jednym przyciskiem ściemniać a drugim rozjaśniać. Ogólnie to wymyśliłem tak żeby przerobić w którym steruje się pwm przy pomocy zwykłych przycisków i tam gdzie jest " If przycisk = 0 then......" dać "If komenda z pilota = 1 then...........", ale coś nie działa.

Link do komentarza
Share on other sites

Spróbuj odwrócić polaryzację diody (przez rezystor do GND) i użyć kodu:

(na początku programu)

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down 

a w programie "na sztywno" (na razie bez zdalnego sterowania) ustawiaj wartości PWM1A w zakresie 0-255 i obserwuj jak jasno dioda świeci.

Link do komentarza
Share on other sites

niestety tak jak radziliście nie działa wogóle ale jak mam podłączoną tak jak na moim schemacie to dioda świeci cały czas i nie ma reakcji na przyciski, a pozatym dioda podłączona pod port PB2 też się świeci a przecież nie powinna bo niema jej nigdzie w programie

Link do komentarza
Share on other sites

Podłącz diodę tak jak Ci mówiłem - portb.1 -> anoda diody -> katoda diody -> rezystor -> GND ("-") i wypróbuj ten kod:

$regfile = "m8def.DAT"
$crystal = 8000000

Config Portb = Output

Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Dim Zmienna As Integer

Do
For Zmienna = 1 To 255
Pwm1a = Zmienna
Pwm1b = Zmienna
Waitms 5
Next

Loop
End

Jeśli nie zadziała, to źle ustawiłeś fusebity.

Link do komentarza
Share on other sites

portb.1 -> anoda diody -> katoda diody -> rezystor -> GND ("-")
dział, dioda pulsuje, i jak podłącze portb.1> katoda> anoda > rezystor> +5v to też działa.

[ Dodano: 25-10-2010, 15:35 ]

Znalazłem coś takiego, jest tu sterowanie pwm tyle że jeszcze do atmegi podłączony jest "l293d". Czy PWM powinno działać bez l293d czy nie?

Schemat i kod do tego urządzenia jest pod linkiem http:// http://bascomania.pl/index.php?page=8

$regfile = "m8def.DAT"                                      'deklaracja procesora, w ty wypadku Atmega8
$crystal = 8000000                                          'deklaracja taktowania

Config Rc5 = Pinb.0                                         'ustawienie pinb.0 jako odbiór sygnału IR

Dim Adres As Byte , Command As Byte                         'deklaracje zmiennych
Dim Speed As Integer

Enable Interrupts                                           'włączenie przerwań

Config Portc = Output                                       'port c  jako wyjścia
      Portc = &B00000000                                   'wszędzie stan spoczynkowy-0

'-------konfiguracja timera do generowania sygnału PWM warunkującego prędkość pojazdu
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1


Speed = 255                                                 'prędkośc na maksa



Do                                                          'poczatek programu

Getrc5(adres , Command)                                     'pobierz adres i komende z pilota

  Command = Command And &B01111111

 'wyświetlanie adresu  i komendy (o ile podłączony i skonfigurowany LCD) w celu dokonania ustawień zgodnie z własnym pilotem.
 'W razie potrzeby zmień komendy w kodzie poniżej

  Cls
  Lcd "adres: " ; Adres                                    'wyświetl adres
  Lowerline
  Lcd "komenda: " ; Command                                'wyświetl komendę


Waitms 50
                        'warunki i odwołania do podprogramów

  If Command = 2 Then
     Gosub Przod
  End If

  If Command = 8 Then
     Gosub Tyl
  End If

  If Command = 4 Then
     Gosub Lewo
  End If

  If Command = 6 Then
     Gosub Prawo
  End If
     'regulacja prędkości. Dostosuj wartosci komend do swojego pilota!
  If Command = 3 Then
     Incr Speed
     If Speed = 251 Then
        Speed = 250
     End If
  End If

  If Command = 1 Then
     Decr Speed
     If Speed = 1 Then
        Speed = 2
     End If

  End If
     'koniec regulacji prędkości

 If Command = 12 Then Pwm1a = 0                           'komenda 12 podawana jest kiedy
 If Command = 12 Then Pwm1b = 0                           'procesor nie odbiera sygnału z nadajnika
                                                            'przy tej komendzie stój!

 Loop                                                      'koniec pętli

End                                                         '---------------------------------------------------

                                                          'podprogramy:

Przod:
Do


   Waitms 50
   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.0
   Reset Portc.1
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.2
   Reset Portc.3

  If Command = 2 Then Return

Loop
End


Tyl:
Do

   Waitms 50
   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.1
   Reset Portc.0
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.3
   Reset Portc.2

  If Command = 8 Then Return

Loop
End


Lewo:
Do

    Waitms 50
   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.0
   Reset Portc.1
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.3
   Reset Portc.2

  If Command = 4 Then Return

Loop
End

Prawo:
   Waitms 50
   ' gasienica prawa
   Pwm1a = Speed
   Set Portc.1
   Reset Portc.0
   ' gasienica lewa
   Pwm1b = Speed
   Set Portc.2
   Reset Portc.3

  If Command = 6 Then Return
Return

http://bascomania.pl/index.php?page=8http://bascomania.pl/index.php?page=8

Link do komentarza
Share on other sites

Powinno działać tylko zamiast l293d dajesz diode i tam gdzie pin9 mostka to + diody a do gng -gnd.Tutaj masz link do tego jak ja zrobiłem ten sam projekt. Jak wogule nie odbiera to może być tak, że tsop1736 jest padnięty, ja tak miałem. Może jak gdzieś bym znalazł płytkę to Ci wyśle 🙂

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.