Skocz do zawartości

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


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

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.

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ą... 😕

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

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...