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

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

Сообщение andrshpa »

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

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

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

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

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

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

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

Сообщение andrshpa »

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

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

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


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

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

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

Сообщение koteika »

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

Сообщение amv2000 »

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

Сообщение koteika »

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

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

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

Сообщение domrustika »

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

Сообщение vem566 »

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

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

Сообщение vem566 »

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

Сообщение domrustika »

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

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

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

Сообщение vem566 »

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

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

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

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

Сообщение edm2007 »

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

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