Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » Автоматическое регулирование PWM. Нужна помощь!


Автоматическое регулирование PWM. Нужна помощь!

Сообщений 1 страница 9 из 9

1

Доброго времени  суток! Товарищи.
Помогите с PWM.
Как можно сделать так,
Например когда на определенной ноге контроллера логический 1, PWM плавно набирал от 0 до 255
И при логическом уровне 0 PWM плавно сбавлял с 255 до 50.

Если есть идеи буду признателен.

0

2

Как-то так:

Код:
If Portx.x = 0 Then
For A = 0 To 255
A = Pwm
Next A
Elseif Portx.x = 1 Then
For A = 255 To 50 Step -1
A = Pwm
Next A
End If

0

3

только в цикл задержку добавить
waitus,ms, столько-то
А лучше - на таймере

0

4

и лучше записать PWM=A

0

5

Огромммммное спасибо. Сегодня попробую.
Позже отпишусь!

0

6

А на основе этого кода?
Нужно чтобы PWM Установился в определенном положении (255 - 7) и оставался на нем пока неизменится уровень на определенной ноге
А после изменения уровня с 7 до 50 и так же оставался в этом положении пока опять неизменится уровень

Код:
Do
 For A = 255 To 1 Step -8
  Pwm0a = A
  Waitms 100
  If A = 7 Then
   Gosub Stp
   Exit Do
  End If
 Next A
Loop
End

0

7

Вот вариант, но работает.
Если есть что то по проще, подскажите

Код:
$regfile = "attiny2313.dat"
$crystal = 4000000

$baud = 9600

Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256
Config Portb.2 = Output
Config Portd.5 = Output
Config Portd.6 = Input
Config Portd.4 = Input
Portd.6 = 1
Portd.4 = 1

Dim A As Byte

Print "Ready to use"

Enable Interrupts



Do

1:
If Pind.6 = 1 Then
For A = 255 To 10 Step -5
Pwm0a = A
Waitms 50
Next A
End If

If Pwm0a = 10 Then
Pwm0a = 10
Goto Pwstop
End If


Loop

Pwstop:
Do

Print "Full speed"
Pwm0a = 10
If Pind.6 = 0 Then
For A = 10 To 200 Step 5
Pwm0A = A
Waitms 50
Next A
End If

If Pwm0a = 200 Then
Goto Pwstop2
End If
Loop

Pwstop2:
Do

Print "Low speed"
Pwm0a = 200
If Pind.6 = 1 Then
Print "Go full speed"
Goto 1
End If

Loop

End

0

8

$regfile = "attiny2313.dat"
'-----
Dim A As Byte
'-----
$crystal = 4000000
$baud = 9600
Config Timer0 = Pwm , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 256
Ddrb = &B00000100 : Ddrd = &B00100000 : Portd = &B01010000
'Enable Interrupts 'íå íóæíî
'-----
Const Delta = 5                         'ïðèðàùåíèå
Const Minl = 10                         'ìèí. çíà÷åíèå
Const _speed = 50                       'ñêîðîñòü èçìåíåíèÿ â ìñ
'-----
Begin:
    A = Minl : Gosub To_hw              'íà÷. óñòàíîâêà
Do
    If Pind.6 = 1 Then
       Gosub To_hw
    Else
       Gosub To_but
    End If
Loop
'-----
To_top:
    If A < 200 Then
       A = A + Delta
    End If
    Goto To_hw
'-----
To_but:
    If A > Minl Then
       A = A - Delta
    End If
To_hw:
    Pwm0a = A : Waitms _speed
Return
'-----

0

9

Отлично!!! Меньше дров  :cool:
Ни то, что у меня.

Благодарю!!!

0


Вы здесь » Программирование ATMEL в BASCOM. » Таймеры, ШИМ и все про них » Автоматическое регулирование PWM. Нужна помощь!