Страница 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-модулями? если можно, скиньте исходник с комментариями :oops:
ужасно хочется разобраться :beer:

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
да с подобными, спасибо. очень интересный ресурс и как я его пропустил? :dont_know:

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
Скомпилировал, проверил в железе - все мигает. Иначе оно и быть не могло. Получившийся хекс прикладываю.