Страница 200 из 304
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср фев 19, 2014 21:28:30
andrshpa
Код Ваш, я и не скрываю, я написал откуда его взял.
Как добавить паузу не понял. Она ведь будет мешать фазовому управлению. Если можно - поподробнее.
И почему забыть про протеус? Вроде один из самых нормальных эмуляторов...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср фев 19, 2014 22:31:54
aleksandr-zh
фазовое управление выполняется таймером по получению сигнала с датчика перехода тока через ноль
для теста сделайте в цикле увеличение переменной яркости от 8 до 0 с паузой в 4-5 сек, потом обратно и посмотрите
код дать не могу - надо ставить bascom и проверять...
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт фев 20, 2014 18:30:34
andrshpa
Сделал вот так. На выходе постоянно 0, на кнопки не реагирует. Что не так?
И еще: таймер1 сконфигурирован с учетом частоты МК 8МГц, как изменить его параметры для частоты 4МГц(Вопрос глупый, но в таймерах не силен)
Код: Выделить всё
If Switch1 = 0 Then
If Level < 8 Then
Incr Level
End If
Waitms 500
End If
If Switch2 = 0 Then
If Level > 0 Then
Decr Level
Else
Level = 0
End If
Waitms 500
End If
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт фев 20, 2014 19:59:36
aleksandr-zh
таймер тут:
http://ugolok-mastera.ru/sborka.htm
в самом низу страницы есть программа, качаете, задаёте частоту работы МК, предделитель и смотрите что получилось в регистрах
а ноги кнопок подтянуты к плюсу питания? или встроенными резисторами, или внешними- от 4 до 100 ком
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт фев 21, 2014 18:52:02
andrshpa
Кнопки подтянуты внутренним резистором
Код: Выделить всё
Portb.0 = 1 ' включим внутренний подтягивающий резистор для ZC
Portb.5 = 1 ' включим внутренний подтягивающий резистор для кнопки 3
Portc.3 = 1 ' включим внутренний подтягивающий резистор для кнопки 2
Portc.2 = 1 ' включим внутренний подтягивающий резистор для кнопки 1
За программу спасибо, но честно говоря мне не совсем понятно как ей пользоваться:
1)Нужно ввести время. Как узнать на сколько сейчас выставлено время в программе(с текущими параметрами таймера и частотой 8 МГц)?
2)Программа дает результат в виде регистров. Как их вводить в bascom?
Извините если вопросы глупые, но в гугле ответы на них найти не смог.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс фев 23, 2014 15:25:19
andrshpa
На один свой вопрос я нашел ответ. Макс. период таймера считается по формуле T=(2^N)*(Prescale/Частота) N = 8 для Т0 и N = 16 для Т1. У меня вышло число 65536.
Как получить такой же результат с частотой 4 МГц?
Решил пересчитать значения Dimmer_delay_w для периода 131072. Вот что вышло. Все равно ничего не работает, на выходе 0.
Код: Выделить всё
If Level = 1 Then Dimmer_delay_w = 123400 ' Тускло горит - 25v
If Level = 2 Then Dimmer_delay_w = 123800 ' 51v
If Level = 3 Then Dimmer_delay_w = 124200 ' 78v
If Level = 4 Then Dimmer_delay_w = 124600 ' 85v
If Level = 5 Then Dimmer_delay_w = 125000 ' 149v
If Level = 6 Then Dimmer_delay_w = 125400 ' 175v
If Level = 7 Then Dimmer_delay_w = 125800 ' 189v
Конечно поставил Dim Dimmer_delay_w As Long и частоту 4МГц фьзами. В чем ошибка,
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн фев 24, 2014 19:41:14
Shershnyov
Подскажите Что я не так написал в коде что моя задержка не работает. Микроконтроллер уже tiny85 ( памяти хватает

)
Повторюсь.
Ультразвуковое реле на HC — SR04
Устройство работает по принципу - появилось препятствие реле замкнулось, и после выхода препятствия из зоны датчика, реле определенное время еще замкнуто. Необходимо реализовать задержку перед включением реле. То есть препятствие появилось прошло определенное время, реле замкнулось, препятствие вышло из зоны датчика, реле определенное время еще замкнуто. В коде реализована функция настройки ( что бы выставить расстояние срабатывания ). Я пробовал добавить еще одну конструкцию которая реализовывала б задержку, но почему то не работает(вероятнее что то упустил или не так написал, проверьте пжлст. Спасибо!
Код: Выделить всё
$regfile = "attiny85.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 > 50 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
Re: BASCOM AVR в вопросах и ответах
Добавлено: Ср фев 26, 2014 11:07:46
koteika
кто-нибудь работал в баском с RF-модулями? если можно, скиньте исходник с комментариями
ужасно хочется разобраться

Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт фев 27, 2014 10:30:04
amv2000
koteika писал(а):кто-нибудь работал в баском с RF-модулями?
С такими?
http://avrproject.ru/publ/vstraivaemyj_ ... /1-1-0-147
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт фев 27, 2014 13:31:55
koteika
да с подобными, спасибо. очень интересный ресурс и как я его пропустил?

Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 06, 2014 02:14:27
domrustika
есть такой код
Код: Выделить всё
If Out_1 = 0 Then
Lcd "Включены" ; "1"
If Out_2 = 0 Then Lcd "2"
If Out_3 = 0 Then Lcd "3"
If Out_4 = 0 Then Lcd "4"
End If
все это происходит в главном цикле, и когда Out_1 = 0 на экране пишется 100 раз Включены1Включены1 Включены1 Включены1 итд.
как написать код что б писало только 1 раз по изменению состояний?
Т.е Текст Включены был всегда, а цифры ставил соответствующие?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 06, 2014 05:57:05
pavel1979
If Out_1 = 0 Then a=1
If Out_2 = 0 Then a=2
If Out_3 = 0 Then a=3
If Out_4 = 0 Then a=4
if a<>b then
locate 1,1
Lcd "Включены"
lcd a
b=a
End If
,то есть информация сменится когда сменится вкл канал,а и в-переменные BYTE
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 06, 2014 13:59:18
domrustika
спасибо, все работает. Не мог бы ты только объяснить что тут делает переменная B какая у нее цель и предназначение и почему она <>?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 06, 2014 14:35:58
vem566
В переменной "b" сидит предыдущее значение "а". При смене "а" оно становится не равно "b", что и вызывает смену индикации. После этого они выравниваются и все повторяется.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт мар 06, 2014 22:27:52
domrustika
Понял, спасибо. Еще есть 2 вопроса-
1. можно ли как то одной командой (ну или двумя)сбросить мк, и заставить его выполнят код сначала?
2. и как перейти в коде допустим
Код: Выделить всё
Config Portd.7 = Output
Led Alias Portd.7
Led = 1
Led = 0
Wait 1
Led = 1
Do
Led = 0
Waitms 100
Led = 1
Waitms 100
Led = 0
Waitms 100
Led = 1
Waitms 100
Loop
End
что надо написать внутри главного цикла что бы выйти из него и перейти ДО цикла допустим до строчки Led = 1? и реально ли это вообще?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 07, 2014 09:23:52
vem566
Конечно реально. Ставишь метку и по команде безусловного перехода Goto переходишь куда хочешь и когда хочешь.
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 07, 2014 13:19:11
domrustika
ну как реализовать то подскажите? я не знаю как это сделать, по этому и написал о помощи. пробовал так не работает
Код: Выделить всё
start2:
Locate 1 , 4
Lcd "Привет!!!"
Lowerline
Locate 2 , 3
Lcd "Друг"
do
if pinb.0 = 0 then goto start2
loop
end
Re: BASCOM AVR в вопросах и ответах
Добавлено: Пт мар 07, 2014 16:31:53
vem566
Пардону просим. Не обратил внимание, что нужно перейти до основного текста.
Тогда кусок, который нужно выполнить оформляется как подпрограмма. Она и выполняется как при первом старте, так и вызывается в любое время. Например:
Goto start2
do
if pinb.0 = 0 then goto start2
loop
end
start2:
Locate 1 , 4
Lcd "Привет!!!"
Lowerline
Locate 2 , 3
Lcd "Друг"
return
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс мар 09, 2014 12:40:40
vem566
Коты! Я впал в панику.
Код:
$regfile = "m8def.dat"
$crystal = 1000000
Config Portb.0 = Output
Do
Portb.0 = 0
Waitms 750
Portb.0 = 1
Waitms 250
Loop
End
Он же на С
#include <mega8.h>
#include <delay.h>
void main(void)
{
PORTB=0x00;
DDRB=0x01;
while (1)
{
PORTB.0=0;
delay_ms(750);
PORTB.0=1;
delay_ms(250);
}
}
Собранный хекс на С работает, а на баскоме - нет.
Есть разумное объяснение? Или глюк баскома?
Re: BASCOM AVR в вопросах и ответах
Добавлено: Вс мар 09, 2014 12:48:40
edm2007
Скомпилировал, проверил в железе - все мигает. Иначе оно и быть не могло. Получившийся хекс прикладываю.