Skocz do zawartości

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


loop123

Pomocna odpowiedź

Nie działa. Odbiornik podczerwieni działa napewno bo jak dam żeby się zapalała albo gasiła po naciśnięciu przycisku na pilocie to działa. Coś mi się wydaje że nie da się tak sterować pwm przez rc5

Link do komentarza
Share on other sites

Zasadniczo nie da to się parasola w ***** otworzyć. Skoro mi się udało serwami sterować z pilota to na pewno nic nie stoi na przeszkodzie. Kwestia taka czy pilota masz na pewno na RC5, a z tym na prawdę ciężko.

Nie działa tsop działa bo ja.k dam żeby się zapalała albo gasiła po naciśnięciu przycisku na pilocie to działa.

Używaj przecinków, albo lepiej buduj zdania bo ciężko wyczuć o co chodzi.

Link do komentarza
Share on other sites

Aby wygenerować sygnał PWM za pomocą pilota musisz użyć innego timera. Nie można używać tego samego do obsługi RC5 i PWM!

A robisz to tak:

Przy konfiguracji np. rc5 używać polecania Timer = 2

np.

Config Rc5 = Pind.1[ , Timer = 2] 

Reszta programu bez zmian.

Pozdrawiam!

Edit:

Kurcze dopiero teraz zauważyłem że do generowania sygnału PWM używasz timera1, a do rc5 domyślnego timer0 więc chyba moje wywody nie pomogą... 😕

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

jak nie działa Ci PWM sprzętowe to napisz sobie programowe.

poza tym jak ma Ci działać PWM jak piszesz w programie:

If Komenda = 1 Then
Incr I
If I = 0 Then
I = 255
End If

tu nie będziesz miał nigdy wartości pomiędzy 0 a 255.

napisz odwrotnie:

If Komenda = 1 Then
Incr I
If I = 255 Then
I = 0
End If

natomiast niżej zamiast pisać:

If Komenda = 2 Then
Decr I
If I = 255 Then
I = 0
End If

co też nie daje Ci wartości pośrednich napisz:

If Komenda = 2 Then
Decr I
If I = 0 Then
I = 255
End If

w ogóle to według mnie trochę to źle napisane. masz poniżej działający kod. zmień sobie tylko konfiguracje pinów na taką jak masz u siebie.

$PROG &HFF , &HA4 , &HD9 , &H00    ' generated. Take care that the chip supports all fuse bytes.

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

config pinb.3 = input
Config Rc5 = Pinb.3                'ustawienie pinb.0 jako odbiór sygnału IR
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Disconnect , Prescale = 64

Dim addres As Byte , command As Byte       'deklaracje zmiennych
dim i as byte

Enable Interrupts                  'włączenie przerwań
                                                      }
Pwm1a = 0

Do                                 'poczatek programu

Getrc5(addres , command)           'pobierz adres i komende z pilota
if addres = 0 then
gosub odbior
end if
Loop
End

odbior:
 command = command And &B01111111

If command = 1 Then
 Incr I
  If I = 255 Then
     I = 0
  End If
End If

If command = 2 Then
 Decr I
   If I = 0 Then
      I = 255
   End If
End If

Pwm1a = I
return
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.