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
| Цитата Ramzses ( ) Баском выдает ошибку Error 344 program will overwrite bootloader Не влезает ваша программа в тини13...Памяти маловато,либо код великоват
|
|
| |
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 |
|
| |