| Приборная панель | 
| 
				
			 | 
| 
| 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 |  |   Группа: Администраторы Сообщений: 720 
 Статус: 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 | Не жирно ли использовать МК для этого? 
 
 |  
 |  |  |  |