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

Обсуждаем контроллеры компании Atmel.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

_Vasilij_ писал(а):Вам написать или помочь разобраться ?

Конечно лучше написать всю прогу, если не затруднит. Буду очень признателен. По готовой проге мне легче потом понять что к чему когда придется изменять настройки, или добавлять дополнительные порты в работу.

_Vasilij_ писал(а):Если делать не для моргания диодов, то так же рекомендовал бы кварц повесить и портам кнопок не забыть физическую подтяжку сделать...схему не видел, но и затворы надеюсь подтянуты.

Физическая подтяжка кнопок есть, и с силовой базой все в порядке.
Аватара пользователя
vem566
Друг Кота
Сообщения: 4732
Зарегистрирован: Вс янв 24, 2010 13:14:02
Откуда: Омск

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

Сообщение vem566 »

Так что программа должна делать? Как выглядит режим работы выходов?
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

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

Сообщение _Vasilij_ »

алгоритм тогда давайте с цифрами, как должны выходные порты работать, какое у них время открыто-закрыто, какой коридор и какой шаг регулирования при нажатии на кнопку.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

_Vasilij_ писал(а):алгоритм тогда давайте с цифрами, как должны выходные порты работать, какое у них время открыто-закрыто, какой коридор и какой шаг регулирования при нажатии на кнопку.


Алгоритм примерно таков.
Включили Portd.2 на 100 микросек, максимум до 1 милисек, (шаг регулировки + - 50 микросек).
Отключили Portd.2, затем идет пауза минимум 2 милисек (шаг регулировки + - 2 милисек)
Включили Porta.0 на 1 микросек, максимум 10 микросек, (шаг регулировки + - 1 микросек)
Отключили Porta.0 , пауза 50 микросек без регулировки.
Затем все повторяется.
При нажатии на кнопку Udarz:
Включили Portd.1 на 100 микросек, максимум до 1 милисек, (шаг регулировки + - 50 микросек).
Отключили Portd.1,
При нажатии на кнопку Razrjdz:
Включили Portс.2 на 1 микросек, максимум 10 микросек, (шаг регулировки + - 1 микросек)
Отключили Portс.2

Вроде бы ничего не забыл, какие кнопки как обозначаются описано в предыдущем посте.
Аватара пользователя
Lavad
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб апр 20, 2013 22:56:52

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

Сообщение Lavad »

По-моему, не в том направлении смотрите. Забудьте о программе на время.
Что значит "... и с силовой базой все в порядке"? Имеются "защитные" резисторы затвор-земля? Если имеются, то каковы их номиналы? Небось, килоомы? Каково подключение полевиков? Если мостовое, то очень велик шанс их жечь, если даже на миниатюрное время оба плеча включены одновременно. Используете драйвер для полевиков или, на худой конец, комплементарный повторитель? Вы хотите коммутировать мощные полевики на микросекунды, но об их емкостях Вам "учитель" Ваш не говорил?
Полевики взрываются, но Вы настолько уверены в виновности программы, что о схеме позабыли! Вы бы схему представили для начала.
О человеке говорят не потоки изрыгаемых слов, а его дела и поступки.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Lavad писал(а): Вы хотите коммутировать мощные полевики на микросекунды, но об их емкостях Вам "учитель" Ваш не говорил?


Lavad, со схемой включения силовых полевиков все в порядке, и соответствующие драйвера применяются. Я пробовал даже в ручном режиме коммутировать через них 500 вольт на отрезок медной шины, длительность открытого состояния полевика равнялась 150 нан. Все срабатывало как и положено. Изначально вопрос был поднят о том что, когда прога работает на автомате, и силовой полевик открылся, и в это время я нажимаю какую либо кнопку для изменения параметра. Задержка от дребезга контактов имеет намного большее значение чем допустимо быть полевику в открытом состоянии. Стечение этих обстоятельств и губит ключи.
Аватара пользователя
Lavad
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб апр 20, 2013 22:56:52

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

Сообщение Lavad »

Вадим, Вы упорно прячете схему (хотя бы часть ее - между МК и полевиками), дело Ваше!
Всю помощь, которую Вы получите здесь, будет "на вскидку". И далее, на вскидку, в основной программе выставляете МИКРОсекундные задержки, не учитывая время прохода всей программы. При частоте 8 Мгц такт равен 125 наносек. Даже если принять крайне минимальный случай, что...:
- на обработку каждой команды процессор потеряет только 1 такт (а в основной программе 16 команд)
- не нажимаются кнопки,
- Waitus строго выдерживает выставленные паузы,
то пока закончится проход всей программы, набежит еще, минимум, 2 МИКРОсек. Плюс, имеется пара WAIT-ов с МИЛЛИсекундными ожиданиями. Вот и считайте, сколько времени будут открыты/закрыты полевики. О микросекундах тут и речи быть не может.
Как уже выше сказали, для ТАКИХ точных отсчетов понадобится таймер.

"Не глядя", прошелся по коду... По-моему, многовато лишних телодвижений. При нажатии пары кнопок обрабатываются одни и те же переменные (выставляемые паузы). Попробуйте заРЕМить Waitus в основной программе, проверьте. Хорошо бы проверять не на полевиках :)
Спойлер

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

$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

Dim Sac As Integer
Dim Pac As Integer
Dim Nac As Integer

Config PORTC.2 = Output
Config PORTD.1 = Output
Config PORTD.2 = Output
Config PORTA.0 = Output
Config PORTB.0 = Input
Config PORTA.1 = Input
Config PORTA.2 = Input
Config PORTA.3 = Input
Config PORTA.4 = Input
Config PORTA.5 = Input
Config PORTC.0 = Input
Config PORTD.7 = Input

PORTA.1 = 1
PORTA.2 = 1
PORTA.3 = 1
PORTA.4 = 1
PORTA.5 = 1
PORTB.0 = 1
PORTC.0 = 1
PORTD.7 = 1

Razrjd Alias PORTB.0
Sa Alias PORTA.1
Sc Alias PORTA.2
Pa Alias PORTA.3
Pc Alias PORTA.4
Udar Alias PORTA.5
Na Alias PORTC.0
Nc Alias PORTD.7

Sac = 2
Pac = 2
Nac = 2

Do
  Set PORTD.2
  Waitus Nac
  Reset PORTD.2
  Waitms Pac
  Set PORTA.0
  Waitus Sac
  Reset PORTA.0
  Waitms Pac

  Debounce Razrjd , 0 , Razrjdz
  Debounce Sa , 0 , Saz
  Debounce Sc , 0 , Scz
  Debounce Pa , 0 , Paz
  Debounce Pc , 0 , Pcz
  Debounce Udar , 0 , Udarz
  Debounce Na , 0 , Naz
  Debounce Nc , 0 , Ncz
Loop
End

Naz:
  Nac = Nac + 2
Return

Ncz:
  If Nac = 2 Then
    Return
    Else
    Nac = Nac - 2
  End If
Return

Saz:
  Sac = Sac + 2
Return

Scz:
  If Sac = 2 Then
    Return
    Else
    Sac = Sac - 2
  End If
Return

Paz:
  Pac = Pac + 2
Return

Pcz:
  If Pac = 2 Then
    Return
    Else
    Pac = Pac - 2
  End If
Return

Udarz:
  Set PORTD.1
  Waitus Nac
  Reset PORTD.1
Return

Razrjdz:
  Set PORTC.2
  Waitus Sac
  Reset PORTC.2
Return

TIP писал(а):...в ручном режиме... длительность открытого состояния полевика равнялась 150 нан.

Лично мне уже интересно, как можно состыковать понятия "ручной" и временную нановыдержку. Поделитесь опытом :).
О человеке говорят не потоки изрыгаемых слов, а его дела и поступки.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Lavad писал(а):Вадим, Вы упорно прячете схему (хотя бы часть ее - между МК и полевиками), дело Ваше!

Да не прячу я схему, просто где нибудь нарисованной нету, в голове держу. Схема проста, с выхода МК на драйвер МС34152Р, с драйвера через сопрот 20 ом на затвор полевика. На полевике... затвор - исток стоят, сопрот 1 ком и стабилитрон 18 вольт. Можно садить затвор на землю транзюком КТ973А.
Lavad писал(а):Как уже выше сказали, для ТАКИХ точных отсчетов понадобится таймер.

Вот поэтому я и прошу помощи у знающих людей, время поджимает.
Lavad писал(а):Лично мне уже интересно, как можно состыковать понятия "ручной" и временную нановыдержку. Поделитесь опытом :).

Извиняюсь, просто я так выразился, конечно же отсчет ведет МК
За прогу большое спасибо! Вечерком погоняю в протеусе, проверю.
Аватара пользователя
Lavad
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб апр 20, 2013 22:56:52

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

Сообщение Lavad »

Нарисовать схему (хотя бы для себя) уже давно должны были, как только появилась задумка. Ладно, пара деталек, но с микросхемами и кучей других навесных элементов... (вот тут уже и не понимаю - работать по памяти).
Куча вариантов для этого. Начиная от простейших программ (типа sPlan и, на худой конец, виндовый Паинт), и заканчивая банальным скриншотом. Этим... Протеусом не пользуюсь, но наверняка подсовываете ему схему для работы. Вот ее и можно скриншотить :).
Что касается "прячем/не прячем"... Схема не помешала бы на данный момент: у Вас схема в голове, а у потенциальных "помощников" перед глазами только сырой код, который НЕ К ЧЕМУ привязать. Да и описания работы, по сути, пара слов. Вам задали много вопросов, но почти никакого ответа. Какую помощь хотите получить?
Например:
Нажали кнопку Sa, перескочили на подпрограмму Saz, увеличили выдержку на 2 мксек. А кнопкой Sc возвращаете выдержку в исходное значение. И так же остальные кнопки.

У меня после этого только мысли, как сказал vem566, - это набор команд.

_Vasilij_ дал ссылку, изучите этот урок. Все лучше это, чем ничего. К Вашей проблеме относится раздел "Таймеры и счетчики", а еще точнее - "Прерывания по таймеру". Но лучше прочесть все.
[Лично мне этот сайт не нравится - очень много недосказанностей! Хоть автор (WidCat) тех переводов и утверждает, что вносил свои уточнения... (видел я оригинал тех уроков...). Английским не владею, но даже тупой машинный перевод говорит об обратном. Можно было внести намного больше подробностей, объяснений и, тем более, комментариев!]

Не за что благодарить - с программой не произошло никаких кардинальных изменений.
TIP писал(а):...На полевике... затвор - исток стоят, сопрот 1 ком и стабилитрон 18 вольт. Можно садить затвор на землю транзюком КТ973А....

1кОм - многовато для защиты. В случае подвешенного затвора этот резистор должен надежно запирать полевик! Изучите даташит на используемый полевик. Там речь идет о десятках и сотнях Ом на затворе.
Стабилитрон, это, конечно, хорошо, но надеяться не стОит. Тем более, если стоит обычный, маломощный.
А "Можно садить затвор..."... Когда сажать? Когда полевик уже на небесах? Или, хуже всего, когда защелкнулся и стал неуправляемым? Быстродействие всей схемы, управления полевых и биполярных транзисторов тоже надо учитывать.
Вы поигрались светодиодами, и решили теми же приемами "боксировать" с другой весовой категорией? :)

P.S. Ознакомьтесь со статьей Коновалова. Вам она пригодится.

И, напоследок, не знаю, чему научили Вас друзья, но позвольте еще один маленький советик:
В подобных критических схемах, где даже малейшее совпадение по времени в работе двух взаимоисключающих выходов приводит к краху, дублируйте в коде команды закрытия/открытия. Да, код раздувается, но перед Вами выбор: или сжечь схему, или пожертвовать размером кода.
Например, нужно вывод А включить, а вывод В выключить. В команде, где думаете включить вывод А, сначала отключите вывод В, а потом только включайте А. И наоборот. Помните, что как бы ни были быстры процессоры, любой временнОй интервал конечен. Быстродействующая схема (а у Вас счет идет на микросекунды) спросить или пожаловаться уже не успеет.
О человеке говорят не потоки изрыгаемых слов, а его дела и поступки.
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Lavad писал(а):Протеусом не пользуюсь, но наверняка подсовываете ему схему для работы. Вот ее и можно скриншотить :).

Вот этой и пользуюсь для проверки, силовая схема тут непричем.
Вложения
Протеус.jpg
(108.22 КБ) 353 скачивания
Аватара пользователя
Lavad
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Сб апр 20, 2013 22:56:52

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

Сообщение Lavad »

TIP писал(а):...силовая схема тут непричем.

Что ж... Если, только "научившись" программировать, уже отделяете схему от программы, храните свой ноу-хау, и покрепче!
О человеке говорят не потоки изрыгаемых слов, а его дела и поступки.
Yod
Родился
Сообщения: 2
Зарегистрирован: Вт июн 28, 2011 15:45:49

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

Сообщение Yod »

Lavad писал(а):Схема не помешала бы на данный момент


Так TIP же озвучил её. Тут и рисовать то нечего. А в проге я так понял что надо управлять
длительностями импульсов и пауз, при этом что б нажатия на кнопки не влияли на сам процесс
а только изменяли с нужным шагом эти параметры.

схема.GIF
(4.51 КБ) 540 скачиваний
TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

Yod писал(а): А в проге я так понял что надо управлять
длительностями импульсов и пауз, при этом что б нажатия на кнопки не влияли на сам процесс
а только изменяли с нужным шагом эти параметры.

Совершенно верно.
_Vasilij_
Встал на лапы
Сообщения: 124
Зарегистрирован: Пт янв 25, 2013 02:48:32

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

Сообщение _Vasilij_ »

пока вроде как-то так думается, но не проверено...блок select case надо бы в основной цикл переместить, да уж интервалы очень махонькие, боюсь i где-то перескочить может без отработки. И с ударом и разрядом что-то придумать надо, может на таймер0 их повесить, может кто чего еще поправит-подскажет, а то я уже путаюсь в этих nac, pac...и не понимаю, почему они фигурируют и в тех портах и в этих, но регулировка шага +- одними и теми же переменными.

Спойлер

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

$regfile = "m16def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32

config timer1 = timer, prescale = 1 ' шаг таймера 0,000000125 с.  (1/8000000)*1 , цифры отсюда - частота 8Мгц делитель 1, таймер1 16-ти битный т.е. максимум счет до 65535
on ovf1  _port ' при переполнении таймера уходим на метку _port

config timer0 = timer, prescale = 8


dim i as byte ' вспомогательная переменная
Dim T1 as word  'для отсчета таймера

Dim Sac As word
Dim Pac As word
Dim Nac As word

dim nac2 as word
dim sac2 as word

nac2 =2
sac2 = 2

Config PORTC.2 = Output
Config PORTD.1 = Output
Config PORTD.2 = Output
Config PORTA.0 = Output
Config PORTB.0 = Input
Config PORTA.1 = Input
Config PORTA.2 = Input
Config PORTA.3 = Input
Config PORTA.4 = Input
Config PORTA.5 = Input
Config PORTC.0 = Input
Config PORTD.7 = Input

PORTA.1 = 1
PORTA.2 = 1
PORTA.3 = 1
PORTA.4 = 1
PORTA.5 = 1
PORTB.0 = 1
PORTC.0 = 1
PORTD.7 = 1

Razrjd Alias PORTB.0
Sa Alias PORTA.1
Sc Alias PORTA.2
Pa Alias PORTA.3
Pc Alias PORTA.4
Udar Alias PORTA.5
Na Alias PORTC.0
Nc Alias PORTD.7

Sac = 65527 ' 8 шагов тамера = 1мксек
Pac = 49535 ' 16000 шагов = 2мсек
Nac = 65455 ' (65535-80) 80 шагов таймера = 80 * 0,000000125 = 100мксек

Enable Interrupts  'разрешаем прерывания
Enable Ovf0   'разрешаем прерывание по переполнению таймера0

t0=Pac

Do





  Debounce Razrjd , 0 , Razrjdz
  Debounce Sa , 0 , Saz
  Debounce Sc , 0 , Scz
  Debounce Pa , 0 , Paz
  Debounce Pc , 0 , Pcz
  Debounce Udar , 0 , Udarz
  Debounce Na , 0 , Naz
  Debounce Nc , 0 , Ncz
Loop
End

Naz:
  Nac = Nac - 400 ' 400 шагов таймера - 50 мксек
  nac2 = nac2+2
Return

Ncz:
  If Nac > 65455 Then
    Nac = 65455
    nac2 = 2
   Else
    Nac = Nac +400
    nac2 = nac2-2
 End If
Return

Saz:
  Sac = Sac - 8
  sac2 = sac2+2
Return

Scz:
  If Sac > 65527 Then
     sac = 65527
     sac2=2
    Else
    Sac = Sac +8
    sac2=sac2-2
  End If

Return

Paz:
  Pac = Pac -16000
Return

Pcz:
  If Pac > 49535 Then
    pac = 49535
    Else
    Pac = Pac + 16000
  End If
Return

Udarz:
  Set PORTD.1
  Waitus Nac2
  Reset PORTD.1
Return

Razrjdz:
  Set PORTC.2
  Waitus Sac2
  Reset PORTC.2
Return

_port:

timer1 = T1
incr I

if I>3 then I=0

select case I
 
 case 0:
    Reset PORTA.0
    T1= 65136 ' пауза на 50 мксек


 case 1:
   Set PORTD.2
   T1 = Nac
 
 case 2:
    Reset PORTD.2
   T1 = Pac
 Case 3:
     Set PORTA.0
     T1= Sac


end select



return


TIP
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июл 03, 2011 06:27:35

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

Сообщение TIP »

_Vasilij_ писал(а):пока вроде как-то так думается, но не проверено...

_Vasilij_ , большое спасибо за помощь. Тут винда слетела, кое как всунул новую, настроюсь, проверю и по изучаю ваше творение. Потом отпишусь что получилось.
Radan
Мучитель микросхем
Сообщения: 465
Зарегистрирован: Ср июн 21, 2006 08:24:32
Откуда: Лисичанск
Контактная информация:

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

Сообщение Radan »

У кого есть опыт работы с WS2811/WS2812 ?
Аватара пользователя
Kill17
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс май 30, 2010 20:27:33
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Kill17 »

День добрый!

Ищу ответ на свой вопрос.

Написал загрузчик для Меги48, все прекрасно работает, кроме одного, если в проге были использованы прерывания, то все идет лесом. Выглядит примерно так. Залил прогу через бут - прерывания не работают, поменял фьюзы на старт с 0000 адреса, все работает.
Бут работает так - стартуем с бута, если пин = 0, то переходим на старт основной программы командой GOTO _reset. если нет, то уходим в программу бута.

Как победить эту проблему, за основу брал прогу которая в семплах лежит.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

Мяууу всем котам.
Пришел вас помучить :)

Имеется задачка:
Включать светодиод, замыкая кнопку и на плюс, и на минус.
Т.е. и то, и др. должно включать LED.

Собственно вопрос:
Как в таком случае решить подтяжку пина и код обработки нажатия кнопки?
Сейчас у меня включается LED (portb.0) кнопкой (pinb.4) замыканием на минус.
Могу переписать под управление плюсом. А вот сделать и то, и др.че-то не соображу.

Как задать pinb.4 Z-состояние и при pin any change включать led?
Может кто даст справку, ткнет носом :)
Прерывания int0, int1 не использую.

Спасибо :beer:
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Можно АЦП припахать.
Аватара пользователя
KOTик
Встал на лапы
Сообщения: 148
Зарегистрирован: Пн июн 07, 2010 16:16:57
Контактная информация:

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

Сообщение KOTик »

zero648 писал(а):Можно АЦП припахать.

АЦП занят другим процессом :)

Есть еще варианты?
Ответить

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