| HC-SR04 и tiny13 | 
| 
				
			 | 
| 
| Ramzses | Дата: Среда, 15.01.2014, 15:59 | Сообщение # 1 |  | Группа: Пользователи Сообщений: 9 
 Статус: Offline | Моя первая программа на Bascom. Нужен ультразвуковой датчик который при наличии препятствия в 20см от него через 2минуты включал нагрузку, и после исчезновения препятствия еще 2 минуты оставался включенным. Для начала решил подключить датчик и вместо нагрузки светодиод. Получился вот такой код(ниже) Как и какие ставить фьюзы не знаю. 
 Код $regfile = "attiny13.dat" $crystal = 960000
 $hwstack = 32
 $swstack = 8
 $framesize = 16
 
 Config Portb.1 = Output
 Trigger Alias Portb.1
 Trigger = 0
 
 Config Portb.0 = Input                    ' Echo
 
 Config Portb.4 = Output
 Led Alias Portb.4
 Led = 0
 
 Dim A As Word
 Dim S As Single
 
 Const K = 0.1725
 
 Waitms 50
 
 Do
 
 Trigger = 1
 Waitus 15
 Trigger = 0
 
 Waitus 10
 Pulsein A , Pinb , 0 , 1
 
 S = A * K
 
 If S < 20 Then
 Led = 1
 End If
 
 Waitms 100
 
 Loop
 
 End
 
 |  
 |  |  |  | 
| 
| KoSS_89 | Дата: Среда, 15.01.2014, 23:23 | Сообщение # 2 |  |   Группа: Проверенные Сообщений: 53 
 Статус: Offline | Если изменить строчку $crystal=9600000 на 1200000 то фьюзы ставить ненадо, заводские покатят, но если шьете  прям с баскома то в настройках фьюзов просто уберите делитель на восемь. Но показания будут сильно плавать без внешнего кварца, ибо внутренний генератор сильно гуляет, а это сказываетя на замерах. 
 
 |  
 |  |  |  | 
| 
| Ramzses | Дата: Четверг, 16.01.2014, 13:51 | Сообщение # 3 |  | Группа: Пользователи Сообщений: 9 
 Статус: Offline | Так? 
   
 
 |  
 |  |  |  | 
| 
| Ramzses | Дата: Среда, 29.01.2014, 13:19 | Сообщение # 4 |  | Группа: Пользователи Сообщений: 9 
 Статус: Offline | Нашел похожий исходник. Дописал что нужно. Баском выдает ошибку Error 344 program will overwrite bootloader. Что я написал не так? 
 $regfile = "attiny13.dat"
 $crystal = 9600000
 $hwstack = 0 ' default use 32 for the hardware stack
 $swstack = 0 ' default use 10 for the SW stack
 $framesize = 0
 
 Config Portb.3 = Output 'выход для подключения ноги Trigger
 Trigger Alias Portb.3
 Trigger = 0
 
 Config Portb.4 = Input 'вход для импульса Echo
 
 Config Portb.0 = Output 'конфигурация для подключения светодиода
 Led Alias Portb.0
 Led = 0
 
 Config Portb.1 = Output 'output control pin
 Control Alias Portb.1
 Control = 0
 
 Config Portb.2 = Input 'вход для button
 
 Dim A As Word , A2 As Word 'сюда копируется значение длины сигнала
 Dim M As Word , Em As Eram Word
 Dim I As Byte , T As Word , Tled As Byte
 Const Toff = 50 '250=1min '500 'TIME to OFF
 Const Tmax = 50000
 Const Ton = 50
 
 Enable Interrupts 'enable global ints
 Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
 On Pcint0 Btn 'we jump to this label when one of the pins is changed
 Pcmsk = &B00000100 'enable pcint2 (portb.2)
 
 Config Watchdog = 1024 '8192 '2048
 M = Em : T = Tmax : Tled = 0 : Control = 0 : Led = 0
 Start Watchdog
 
 Do
 Reset Watchdog
 Gosub Test
 A2 = A
 Waitms 100
 Reset Watchdog
 Gosub Test
 Waitms 100
 
 If A < M And A2 < M And A > 0 And A2 > 0 Then
 T = 0 ': Led = 1
 Else
 Incr T ' : Led = 0
 If T > Tmax Then T = Tmax
 End If
 
 If T > Ton Then
 Control = 0
 Else
 Control = 1
 End If
 
 If T < Toff Then
 Control = 1
 Else
 Control = 0
 End If
 
 If T > Ton Then
 If Tled < 9 Then : Led = 1 : Else : Led = 0 : End If ' on
 Else
 If T < Toff Then
 If Tled < 5 Then : Led = 1 : Else : Led = 0 : End If ' last minute
 Else
 If Tled < 1 Then : Led = 1 : Else : Led = 0 : End If ' off
 End If
 End If
 
 Incr Tled : If Tled > 10 Then Tled = 0
 
 Loop
 End
 
 '------------------------------------------------------------------------------------
 Btn:
 For I = 1 To 50
 Toggle Led : Waitms 200 : Reset Watchdog
 Next
 Gosub Test
 'Gifr = 0
 M = A : Shift M , Right , 3 : M = A -m : Em = M : T = Tmax
 'Tled = 0 : Control = 0
 Set Led ': Waitms 2000 : Reset Led : Waitms 1000
 Do : Loop
 Return
 
 '-----------------------------------------------------------------------------------
 Test:
 Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
 Waitus 15
 Trigger = 0
 Waitus 10
 Pulsein A , Pinb , 4 , 1 'ловим импульс высокого уровня
 
 Return
 
 
 
 
 Сообщение отредактировал Ramzses - Среда, 29.01.2014, 13:22 |  
 |  |  |  | 
| 
| GSV | Дата: Среда, 29.01.2014, 16:26 | Сообщение # 5 |  | Группа: Друзья Сообщений: 38 
 Статус: Offline | Не влезает ваша программа в тини13...Памяти маловато,либо код великоватЦитата Ramzses (  ) Баском выдает ошибку Error 344 program will overwrite bootloader  
 
 |  
 |  |  |  | 
| 
| Ramzses | Дата: Среда, 29.01.2014, 17:35 | Сообщение # 6 |  | Группа: Пользователи Сообщений: 9 
 Статус: Offline | Цитата GSV (  ) Не влезает ваша программа в тини13...Памяти маловато,либо код великоватТак и думал!
 
 PS Может гуру программирования подскажут как можно ужать мой программный код ?
 Ниже полностью рабочий код (2.84кб).
 Описание работы:
 1. Нажимаем кнопку после чего по истечении 10сек Запоминаем данные с датчика ( чтобы в будущем при пересечении этого значения включать нагрузку.
 2. Нагрузка работает пока препятствие в зоне, после выхода препятствия нагрузка работает заданный промежуток времени после чего отключется.
 Необходимо:
 Реализовать задержку перед включением нагрузки. Т.е. Препятствие появилось ждем заданное количество секунд после п.2.
 
 $regfile = "attiny13.dat"
 $crystal = 9600000
 $hwstack = 0 ' default use 32 for the hardware stack
 $swstack = 0 ' default use 10 for the SW stack
 $framesize = 0
 
 Config Portb.3 = Output 'выход для подключения ноги Trigger
 Trigger Alias Portb.3
 Trigger = 0
 
 Config Portb.4 = Input 'вход для импульса Echo
 
 Config Portb.0 = Output 'конфигурация для подключения светодиода
 Led Alias Portb.0
 Led = 0
 
 Config Portb.1 = Output 'output control pin
 Control Alias Portb.1
 Control = 0
 
 Config Portb.2 = Input 'вход для button
 
 Dim A As Word , A2 As Word 'сюда копируется значение длины сигнала
 Dim M As Word , Em As Eram Word
 Dim I As Byte , T As Word , Tled As Byte
 Const Toff = 750 '250=1min '500 'TIME to OFF
 Const Tmax = 50000
 
 Enable Interrupts 'enable global ints
 Enable Pcint0 'we enable pcint0 as this has pcint0-pcint7
 On Pcint0 Btn 'we jump to this label when one of the pins is changed
 Pcmsk = &B00000100 'enable pcint2 (portb.2)
 
 Config Watchdog = 1024 '8192 '2048
 M = Em : T = Tmax : Tled = 0 : Control = 0 : Led = 0
 Start Watchdog
 
 Do
 Reset Watchdog
 Gosub Test
 A2 = A
 Waitms 100
 Reset Watchdog
 Gosub Test
 Waitms 100
 
 If A < M And A2 < M And A > 0 And A2 > 0 Then
 T = 0 ': Led = 1
 Else
 Incr T ' : Led = 0
 If T > Tmax Then T = Tmax
 End If
 
 If T < Toff Then
 Control = 1
 Else
 Control = 0
 End If
 
 If T = 0 Then
 If Tled < 9 Then : Led = 1 : Else : Led = 0 : End If ' on
 Else
 If T < Toff Then
 If Tled < 5 Then : Led = 1 : Else : Led = 0 : End If ' last minute
 Else
 If Tled < 1 Then : Led = 1 : Else : Led = 0 : End If ' off
 End If
 End If
 
 Incr Tled : If Tled > 10 Then Tled = 0
 
 Loop
 End
 
 '------------------------------------------------------------------------------------
 Btn:
 For I = 1 To 50
 Toggle Led : Waitms 200 : Reset Watchdog
 Next
 Gosub Test
 'Gifr = 0
 M = A : Shift M , Right , 3 : M = A -m : Em = M : T = Tmax
 'Tled = 0 : Control = 0
 Set Led ': Waitms 2000 : Reset Led : Waitms 1000
 Do : Loop
 Return
 
 '-----------------------------------------------------------------------------------
 Test:
 Trigger = 1 'даем импульс на ногу Portd.4 длительностью 15 мкс
 Waitus 15
 Trigger = 0
 Waitus 10
 Pulsein A , Pinb , 4 , 1 'ловим импульс высокого уровня
 
 Return
 '-----------------------------------------------------------------------------------
 
 
 
 
 Сообщение отредактировал Ramzses - Среда, 29.01.2014, 17:43 |  
 |  |  |  |