[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
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
Так? 
Прикрепления: 9587320.jpg (57.6 Kb)


 
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...Памяти маловато,либо код великоват smile


 
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
 
  • Страница 1 из 1
  • 1
Поиск: