Приборная панель
|
|
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 Видео работы:
Фото:
Сообщение отредактировал 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, заинтересовала ваша разработка, поэтому сразу пару вопросов Яркость подсветки для шкалы и стрелки регулируется в ручную, т.е. можно выставить любую яркость? И интересует как организовано питание схемы. Через простую кренку или чтото посложнее?
|
|
| |
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
| Не жирно ли использовать МК для этого?
|
|
| |