[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Приборная панель
spaceДата: Пятница, 05.04.2013, 17:49 | Сообщение # 1
Группа: Проверенные
Сообщений: 42

Статус: Offline
Всем привет=) Может и справлюсь сам, но как обычно сидеть несколько дней в поисках решения проблемы я не очень щас хочу. Ну к сути вообщем. 
   Сделал для приборной панели светодиодную подсветку. На плате имеется схема на мощных мосфетах и мк ATtiny13(пока заменой служит мега 16 подсоединенная проводками к плате) плавного включения подсветки состоящая из двух каналов(стрелки шкалы). Так вот плавное включение через шим в баскоме организовать достаточно просто, что я для начала и сделал. Сначала разгораются стрелки, затем шкалы. Но цели поставил иные.
1. Регулировка яркости обоих каналов за счет одной кнопки.
2. Запись данных о последней настроенной яркости в eeprom мк.
3. Последовательное включение каналов, разделенное задержкой. То есть, когда первый канал разгорелся до половины, должен начать разгораться второй канал и в  результате, оба дойти до настроенной яркости. На данный момент сначала разгорается первый канал, затем начинает разгораться второй канал.

Любой помощи буду рад)) Результаты того что уже готово выкладываю ниже.


 
spaceДата: Пятница, 05.04.2013, 17:52 | Сообщение # 2
Группа: Проверенные
Сообщений: 42

Статус: Offline
Программа:

Код
$regfile = "m16def.dat"
$crystal = 16000000

'$hwstack = 25
'$swstack = 25
'$framesize = 25

Config Debounce = 10

Config Portd.5 = Output                    'ШИМ А
Config Portd.4 = Output                    'ШИМ В

Set Porta.2 : On1 Alias Pina.2                    'Замок зажигания
Set Porta.0 : On2 Alias Pina.0                    'Габариты
Set Porta.7 : S Alias Pina.7

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

Dim A As Byte , B As Byte

A = 21 : B = 10

1:
Do

Debounce On1 , 0 , Pwmon , Sub
Debounce On1 , 1 , Pwmoff , Sub

Loop

End

Pwmon:
While Pwm1b < 255
Debounce On1 , 1 , Pwmoff , Sub
Waitms A
Incr Pwm1b
Wend

While Pwm1a < 255
Debounce On1 , 1 , Pwmoff , Sub
Waitms A
Incr Pwm1a
Wend
Debounce On1 , 0 , 1 , Sub
Return

Pwmoff:
While Pwm1a > 0
Debounce On1 , 0 , Pwmon , Sub
Waitms B
Decr Pwm1a
Wend

While Pwm1b > 0
Debounce On1 , 0 , Pwmon , Sub
Waitms B
Decr Pwm1b
Wend
Debounce On1 , 1 , 1 , Sub
Return

Видео работы:


Фото:




Прикрепления: 9893709.jpg (177.4 Kb) · 0800504.jpg (164.9 Kb) · 3354899.jpg (164.4 Kb)




Сообщение отредактировал space - Пятница, 05.04.2013, 17:52
 
spaceДата: Суббота, 06.04.2013, 20:05 | Сообщение # 3
Группа: Проверенные
Сообщений: 42

Статус: Offline
Ну вот, куча потраченного времени и добрался до результата)) Каналы  включаются сразу оба, это еще предстоит изменить, а так то что нужно, все сделал. Подробные коменты в видео, извините, если что, но диктор из меня ни какой=)


И код, кому интересно=)

Код
$regfile = "m16def.dat"
$crystal = 16000000

Config Debounce = 20

Config Portd.5 = Output                    'ШИМ А
Config Portd.4 = Output                    'ШИМ В

Set Porta.2 : On1 Alias Pina.2                    'Замок зажигания
Set Porta.0 : On2 Alias Pina.0                    'Габариты

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

Dim B As Byte
Dim A As Integer , Aa As Integer
Dim Ae As Eram Integer
A = Ae

Do
Pwm1a = 40 : Pwm1b = 40
Loop Until On1 = 0
For Aa = 40 To A
Pwm1b = Aa : Pwm1a = Aa : Waitms 25
Next

'*******************************************************************************
B = A
Do
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : B = B + 1 : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Loop Until B = 140
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
Pwm1b = 60 : Pwm1a = 60 : Waitms 150
Pwm1b = 100 : Pwm1a = 100 : Waitms 150
Loop Until On2 = 1
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : B = B - 1 : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Loop Until B = 40
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
Pwm1b = 60 : Pwm1a = 60 : Waitms 150
Pwm1b = 100 : Pwm1a = 100 : Waitms 150
Loop Until On2 = 1
'*******************************************************************************

Save:
Writeeeprom A , Ae
Return

Pwmoff:
For Aa = A To 40 Step -1
Pwm1b = Aa : Pwm1a = Aa : Waitms 25
Next
Return




Сообщение отредактировал space - Суббота, 06.04.2013, 20:07
 
spaceДата: Суббота, 06.04.2013, 20:24 | Сообщение # 4
Группа: Проверенные
Сообщений: 42

Статус: Offline
Ну вот и готова, разделение работы каналов заняло буквально 5 минут. Добавил пару циклов for.. to .. next



Код
$regfile = "m16def.dat"
$crystal = 16000000

'$hwstack = 25
'$swstack = 25
'$framesize = 25

Config Debounce = 20

Config Portd.5 = Output                    'ШИМ А
Config Portd.4 = Output                    'ШИМ В

Set Porta.2 : On1 Alias Pina.2                    'Замок зажигания
Set Porta.0 : On2 Alias Pina.0                    'Габариты
Set Porta.7 : S Alias Pina.7

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

Dim B As Byte
Dim A As Integer , Aa As Integer
Dim Ae As Eram Integer
A = Ae

Do
Pwm1a = 40 : Pwm1b = 40
Loop Until On1 = 0
For Aa = 40 To A
Pwm1b = Aa : Waitms 25
Next
For Aa = 40 To A
Pwm1a = Aa : Waitms 25
Next
'*******************************************************************************
B = A
Do
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : B = B + 1 : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Loop Until B = 140
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
Pwm1b = 60 : Pwm1a = 60 : Waitms 150
Pwm1b = 100 : Pwm1a = 100 : Waitms 150
Loop Until On2 = 1
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : B = B - 1 : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Loop Until B = 40
'*******************************************************************************
Do
Debounce On1 , 1 , Pwmoff
Pwm1b = 60 : Pwm1a = 60 : Waitms 150
Pwm1b = 100 : Pwm1a = 100 : Waitms 150
Loop Until On2 = 1
'*******************************************************************************

Save:
Writeeeprom A , Ae
Return

Pwmoff:
For Aa = A To 40 Step -1
Pwm1a = Aa : Waitms 25
Next
For Aa = A To 40 Step -1
Pwm1b = Aa : Waitms 25
Next
Return




Сообщение отредактировал space - Суббота, 06.04.2013, 20:24
 
vvw76Дата: Понедельник, 08.04.2013, 08:33 | Сообщение # 5
Группа: Пользователи
Сообщений: 1

Статус: Offline
space, заинтересовала ваша разработка, поэтому сразу пару вопросов  happy
Яркость подсветки для шкалы и стрелки регулируется в ручную, т.е. можно выставить любую яркость? И интересует как организовано питание схемы. Через простую кренку или чтото посложнее?


 
spaceДата: Понедельник, 08.04.2013, 17:59 | Сообщение # 6
Группа: Проверенные
Сообщений: 42

Статус: Offline
все подробные коменты в видео http://avrproject.ru/forum/4-153-1917-16-1365264311
яркость регулируется одновременно для обоих каналов в диапазоне шима от 0 до 255. В программа выставлял диапазон от 40 до 140, так как это крайние значения минимальной и максимальной яркости для меги 16 при частоте 16МГц, ниже 40 или выше 140 делать диапазон нет смысла, так как разницы по яркости не видно.

Питание схемы организованно за счет делителя напряжения, который состоит из стабилитрона на 5.1В и резистора 2.2кОм.


 
spaceДата: Понедельник, 08.04.2013, 18:06 | Сообщение # 7
Группа: Проверенные
Сообщений: 42

Статус: Offline
И упрощенная версия программы. Мало того что удалось уменьшить объём занимаемой памяти в мк, так еще и можно выставлять в программе длительность  для плавного включения или гашения подсветки. Программа работает на ATmega16, на частоте внутреннего RC генератор 4МГц.
Фьюзы, которые необходимо зашить в мк:
SUT0, SUT1
CKSEL2, CKSEL3
BOOTSZ0, BOOTSZ1
CKORT
SPIEN
Байты кофигурации: http://avr.roboforum.ru/calc.html?part=ATmega16
0xC3 - LOW
0xC9 - HIGH

Код
$regfile = "m16def.dat"

Config Debounce = 20

Config Portd.5 = Output                    'ШИМ А
Config Portd.4 = Output                    'ШИМ В

Set Porta.2 : On1 Alias Pina.2                    'Замок зажигания
Set Porta.0 : On2 Alias Pina.0

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

Dim A As Byte , B As Byte , Aa As Byte
Dim T0 As Byte , T1 As Byte , T2 As Byte
Dim Ae As Eram Byte

A = Ae : B = A
T0 = 25 : T1 = 10 : T2 = 77

Do : Loop Until On1 = 0

While Pwm1b < A
Aa = Pwm1b : Waitms T1 : Incr Pwm1b
Wend
While Pwm1a < A
Aa = Pwm1a : Waitms T0 : Incr Pwm1a
Wend

Contrast:

While B < 215
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : Incr B : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Wend

While On2 = 0
Pwm1b = 60 : Pwm1a = 60 : Waitms T2
Pwm1b = 100 : Pwm1a = 100 : Waitms T2
Wend

While B > 0
Debounce On1 , 1 , Pwmoff
If On2 = 0 Then : Decr B : End If
Pwm1a = B : Pwm1b = B
A = Pwm1a : A = Pwm1b
Gosub Save
Wend

While On2 = 0
Pwm1b = 60 : Pwm1a = 60 : Waitms T2
Pwm1b = 100 : Pwm1a = 100 : Waitms T2
Wend

Do
If B = 0 Then : Goto Contrast : End If
Loop Until B > 0

Return
End

Pwmoff:

While Pwm1a > 5
Waitms T1 : Decr Pwm1a
Wend

While Pwm1b > 5
Waitms T0 : Decr Pwm1b
Wend

Return

Save:
Writeeeprom A , Ae
Return





Сообщение отредактировал space - Понедельник, 08.04.2013, 18:24
 
spaceДата: Понедельник, 08.04.2013, 22:53 | Сообщение # 8
Группа: Проверенные
Сообщений: 42

Статус: Offline
Так  версия программы под ATtiny13
В настройках шима Prescale = 8 меньше восьми лучше не ставить. При гашение или розжиге подсветки происходит маленькая вспышка, причину я так и не нашел в самой программе, может быть связанно с рабочей частотой мк.

Фьюзы на внутренний RC генератор 4,8МГц:
SUT0, SUT1
CSKEL1
SPIEN


Код
$regfile = "attiny13.dat"

$hwstack = 50
$swstack = 50
$framesize = 50

Config Debounce = 30

Config Portb.0 = Output                    'ШИМ А
Config Portb.1 = Output                    'ШИМ В

Set Portb.3 : On1 Alias Pinb.3                    'Замок зажигания
Set Portb.4 : On2 Alias Pinb.4

Config Timer0 = Pwm , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8

Dim A As Byte , B As Byte , Aa As Byte
Dim T0 As Byte , T1 As Byte , T2 As Byte
Dim Ae As Eram Byte

A = Ae : B = A
T0 = 15 : T1 = 15 : T2 = 77

22:
Do : Loop Until On1 = 0

While Pwm0b < A
Aa = Pwm0b : Waitms T1 : Incr Pwm0b
Wend
While Pwm0a < A
Aa = Pwm0a : Waitms T0 : Incr Pwm0a
Wend

Contrast:

While B < 255
If On2 = 0 Then : Incr B : End If
Pwm0a = B : Pwm0b = B
A = Pwm0a : A = Pwm0b
Gosub Save
Debounce On1 , 1 , Pwmoff
Wend

While On2 = 0
Pwm0b = 60 : Pwm0a = 60 : Waitms T2
Pwm0b = 100 : Pwm0a = 100 : Waitms T2
Wend

While B > 0
If On2 = 0 Then : Decr B : End If
Pwm0a = B : Pwm0b = B
A = Pwm0a : A = Pwm0b
Gosub Save
Debounce On1 , 1 , Pwmoff
Wend

While On2 = 0
Pwm0b = 60 : Pwm0a = 60 : Waitms T2
Pwm0b = 100 : Pwm0a = 100 : Waitms T2
Wend

Do
If B = 0 Then : Goto Contrast : End If
Loop Until B > 0

Return
End

Pwmoff:
Do
While Pwm0a > 0
Waitms T1 : Decr Pwm0a
Wend

While Pwm0b > 0
Waitms T0 : Decr Pwm0b
Wend
Loop Until On1 = 0
Goto 22

Save:
Writeeeprom A , Ae
Debounce On1 , 1 , Pwmoff
Return




Сообщение отредактировал space - Понедельник, 08.04.2013, 22:53
 
exersizzeДата: Среда, 10.04.2013, 23:11 | Сообщение # 9
Группа: Администраторы
Сообщений: 723

Статус: Offline
space, классно получилось
По поводу непредвиденной вспышки, попробуй поднять частоту работы контроллера.
Посмотрел, у тини13 нет режима работы от внешнего кварца?? О_о


 
spaceДата: Пятница, 26.04.2013, 19:49 | Сообщение # 10
Группа: Проверенные
Сообщений: 42

Статус: Offline
спасибо=) блин не заметил твоего сообщения=)
Да уже убрал=) там в программе был где то маленький косяк, уже не помню)
Посмотрел твою последнюю статейку, как раз по этой же тема, прога выглядит по проще чем я написал, поэтом думаю взять на вооружению твою программку.

Нет, тинька13 работает только от внутреннего RC.


 
spaceДата: Понедельник, 10.03.2014, 10:30 | Сообщение # 11
Группа: Проверенные
Сообщений: 42

Статус: Offline
Переписал программу, правда на CodeVisionAVR, потому что Bascom не позволяет написать так много и уместить все в тиньке 13((  Но зато разобрался с CV, программу написал за 5 дней)


 
AntonkozirevДата: Понедельник, 08.08.2016, 22:58 | Сообщение # 12
Группа: Пользователи
Сообщений: 5

Статус: Offline
Не жирно ли использовать МК для этого?

 
  • Страница 1 из 1
  • 1
Поиск: