BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
andrshpa
Родился
Сообщения: 5
Зарегистрирован: Вт фев 18, 2014 23:49:08

Re: BASCOM AVR в вопросах и ответах

Сообщение andrshpa »

Код Ваш, я и не скрываю, я написал откуда его взял.
Как добавить паузу не понял. Она ведь будет мешать фазовому управлению. Если можно - поподробнее.
И почему забыть про протеус? Вроде один из самых нормальных эмуляторов...
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

фазовое управление выполняется таймером по получению сигнала с датчика перехода тока через ноль
для теста сделайте в цикле увеличение переменной яркости от 8 до 0 с паузой в 4-5 сек, потом обратно и посмотрите
код дать не могу - надо ставить bascom и проверять...
andrshpa
Родился
Сообщения: 5
Зарегистрирован: Вт фев 18, 2014 23:49:08

Re: BASCOM AVR в вопросах и ответах

Сообщение 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
aleksandr-zh
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Re: BASCOM AVR в вопросах и ответах

Сообщение aleksandr-zh »

таймер тут: http://ugolok-mastera.ru/sborka.htm
в самом низу страницы есть программа, качаете, задаёте частоту работы МК, предделитель и смотрите что получилось в регистрах

а ноги кнопок подтянуты к плюсу питания? или встроенными резисторами, или внешними- от 4 до 100 ком
andrshpa
Родился
Сообщения: 5
Зарегистрирован: Вт фев 18, 2014 23:49:08

Re: BASCOM AVR в вопросах и ответах

Сообщение andrshpa »

Кнопки подтянуты внутренним резистором

Код: Выделить всё

Portb.0 = 1                                                 ' включим внутренний подтягивающий резистор для ZC
Portb.5 = 1                                                 ' включим внутренний подтягивающий резистор для кнопки 3
Portc.3 = 1                                                 ' включим внутренний подтягивающий резистор для кнопки 2
Portc.2 = 1                                                 ' включим внутренний подтягивающий резистор для кнопки 1


За программу спасибо, но честно говоря мне не совсем понятно как ей пользоваться:
1)Нужно ввести время. Как узнать на сколько сейчас выставлено время в программе(с текущими параметрами таймера и частотой 8 МГц)?
2)Программа дает результат в виде регистров. Как их вводить в bascom?
Извините если вопросы глупые, но в гугле ответы на них найти не смог.
andrshpa
Родился
Сообщения: 5
Зарегистрирован: Вт фев 18, 2014 23:49:08

Re: BASCOM AVR в вопросах и ответах

Сообщение 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МГц фьзами. В чем ошибка,
Shershnyov
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Чт фев 07, 2013 10:46:46
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение 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
koteika
Встал на лапы
Сообщения: 147
Зарегистрирован: Пт ноя 27, 2009 18:24:25
Откуда: Харьков
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение koteika »

кто-нибудь работал в баском с RF-модулями? если можно, скиньте исходник с комментариями :oops:
ужасно хочется разобраться :beer:
Аватара пользователя
amv2000
Опытный кот
Сообщения: 717
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Re: BASCOM AVR в вопросах и ответах

Сообщение amv2000 »

koteika писал(а):кто-нибудь работал в баском с RF-модулями?

С такими? http://avrproject.ru/publ/vstraivaemyj_ ... /1-1-0-147
koteika
Встал на лапы
Сообщения: 147
Зарегистрирован: Пт ноя 27, 2009 18:24:25
Откуда: Харьков
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение koteika »

да с подобными, спасибо. очень интересный ресурс и как я его пропустил? :dont_know:
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение 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 раз по изменению состояний?
Т.е Текст Включены был всегда, а цифры ставил соответствующие?
pavel1979
Мучитель микросхем
Сообщения: 494
Зарегистрирован: Пн авг 12, 2013 19:07:47
Откуда: башкирия мелеуз

Re: BASCOM AVR в вопросах и ответах

Сообщение 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
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение domrustika »

спасибо, все работает. Не мог бы ты только объяснить что тут делает переменная B какая у нее цель и предназначение и почему она <>?
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: BASCOM AVR в вопросах и ответах

Сообщение vem566 »

В переменной "b" сидит предыдущее значение "а". При смене "а" оно становится не равно "b", что и вызывает смену индикации. После этого они выравниваются и все повторяется.
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение 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? и реально ли это вообще?
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: BASCOM AVR в вопросах и ответах

Сообщение vem566 »

Конечно реально. Ставишь метку и по команде безусловного перехода Goto переходишь куда хочешь и когда хочешь.
domrustika
Грызет канифоль
Сообщения: 257
Зарегистрирован: Чт мар 22, 2007 13:50:33
Откуда: казань
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение domrustika »

ну как реализовать то подскажите? я не знаю как это сделать, по этому и написал о помощи. пробовал так не работает

Код: Выделить всё

start2:
Locate 1 , 4
 Lcd "Привет!!!"
 Lowerline
 Locate 2 , 3
 Lcd "Друг"
do
if pinb.0 = 0 then goto start2
loop
end
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: BASCOM AVR в вопросах и ответах

Сообщение vem566 »

Пардону просим. Не обратил внимание, что нужно перейти до основного текста.
Тогда кусок, который нужно выполнить оформляется как подпрограмма. Она и выполняется как при первом старте, так и вызывается в любое время. Например:

Goto start2
do
if pinb.0 = 0 then goto start2
loop
end

start2:
Locate 1 , 4
Lcd "Привет!!!"
Lowerline
Locate 2 , 3
Lcd "Друг"
return
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

Re: BASCOM AVR в вопросах и ответах

Сообщение 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);
}
}
Собранный хекс на С работает, а на баскоме - нет.
Есть разумное объяснение? Или глюк баскома?
Аватара пользователя
edm2007
Поставщик валерьянки для Кота
Сообщения: 2255
Зарегистрирован: Вт апр 21, 2009 22:24:10
Откуда: Иркутск
Контактная информация:

Re: BASCOM AVR в вопросах и ответах

Сообщение edm2007 »

Скомпилировал, проверил в железе - все мигает. Иначе оно и быть не могло. Получившийся хекс прикладываю.
Вложения
led_blink.hex
(488 байт) 474 скачивания
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Ответить

Вернуться в «AVR»