Страница 248 из 304

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

Добавлено: Пн мар 14, 2016 17:58:20
Аlex
Откуда протеусу доверия больше, чем железу ?

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

Добавлено: Пн мар 14, 2016 18:01:01
edm2007
Что именно заставило Вас призадуматься? Даже в "авторитетном" протеусе все улетает как положено (это выход и тактирование):

Изображение

Не трудно заметить, что улетает 0b01100100 = 100.

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

Добавлено: Пн мар 14, 2016 18:06:52
ВасилийВикторович
edm2007 писал(а):Что именно заставило Вас призадуматься? Даже в "авторитетном" протеусе все улетает как положено. Не трудно заметить, что улетает 0b01100100 = 100.
Что улетает все правильно я знаю, устройство которое принимает работать в протеусе не хочет..
Аlex писал(а):Откуда протеусу доверия больше, чем железу ?
Понял, собирать что то похожее все равно надо, подумал я и решил: соберу свое, зачем повторять... По своим граблям оно как то приятнее :)))

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

Добавлено: Пн мар 14, 2016 18:16:55
edm2007
Вы когда в протеусе схему рисовали, учли что управляющему контроллеру детекция перехода через ноль нужна, например? Все это сделали, чтобы проверять там?

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

Добавлено: Пн мар 14, 2016 18:22:57
Аlex
Из статьи :
В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Попробуйте проверить, дышит ли вообще МК.

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

Добавлено: Пн мар 14, 2016 18:40:01
ВасилийВикторович
Аlex писал(а):Из статьи :
В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Попробуйте проверить, дышит ли вообще МК.
Попробовал, все ок. Выходит программа у автора рабочая.

Накидал в протеусе два мк, один передает, другой принимает. И та же ерунда, передаю любое четное число а другой мк принимает 255. Передаю нечетное, принимается ноль. Получается протеус глючит ?

UPD:
пока шарился по просторам интернета, нашел пару случаев похожих на мою проблему:
http://www.forbot.pl/forum/topics49/2x- ... vt8988.htm
http://bascomavr.3bb.ru/viewtopic.php?id=455
Там тоже получается при приеме или ноль, или 255. Решения так и не нашел пока.
Завтра утром попробую в железе, может что то прояснится.
UPD:
Научился я наконец то правильно принимать данные по spi. Код для софтового spi примерно такой:
Спойлер

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

$regfile = "m8def.dat"                                      ' specify the used micro

$crystal = 8000000                                          ' used crystal frequency
Dim A As Byte


Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portd.0 , Db7 = Portd.1
Cursor Off
Initlcd
Cls
'define the constants used by the SPI slave

Const _softslavespi_port = Portd                           ' we used portD

Const _softslavespi_pin = Pind                             'we use the PIND register for reading

Const _softslavespi_ddr = Ddrd                             ' data direction of port D



Const _softslavespi_clock = 5                               'pD.5 is used for the CLOCK

Const _softslavespi_miso = 3                               'pD.3 is MISO

Const _softslavespi_mosi = 4                               'pd.4 is MOSI

Const _softslavespi_ss = 2                                 ' pd.2 is SS

'while you may choose all pins you must use the INT0 pin for the SS

'for the 2313 this is pin 2



'PD.3(7),  MISO  must be output

'PD.4(8),  MOSI

'Pd.5(9) , Clock

'PD.2(6),  SS /INT0



'define the spi slave lib

$lib "spislave.lbx"

'sepcify wich routine to use

$external _spisoftslave



'we use the int0 interrupt to detect that our slave is addressed

On Int0 Isr_sspi Nosave

'we enable the int0 interrupt

Enable Int0

'we configure the INT0 interrupt to trigger when a falling edge is detected

Config Int0 = Falling

'finally we enabled interrupts

Enable Interrupts



'

Dim _ssspdr As Byte                                         ' this is out SPI SLAVE SPDR register

Dim _ssspif As Bit                                         ' SPI interrupt revceive bit

Dim Bsend As Byte , I As Byte , B As Byte                   ' some other demo variables



_ssspdr = 0                                                 ' we send a 0 the first time the master sends data

Do

  If _ssspif = 1 Then
  Locate 1 , 1
  Lcd "received: " ; _ssspdr ; " "

  Reset _ssspif

  _ssspdr = _ssspdr + 1                                   ' we send this the next time

  End If

Loop

End
А для железного spi вообще пару строчек. Но регулятор мощности из статьи все равно или вкл или выкл, регулироваться в протеусе не хочет.
Так что мне теперь проще свой собрать чем повторять чужой. Всем Спасибо. :beer:

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

Добавлено: Ср мар 16, 2016 16:26:08
domrustika
Ребят подскажите пожалуйста примерный код для реализации сценария-

Мега8 ОДИН РАЗ в сутки дергает ногой и включает реле-------- ждет 1 секунду---------выключает реле. и так каждый день.

надо это сделать без часов реального времени ds1307.

спасибо! :)

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

Добавлено: Ср мар 16, 2016 16:38:53
Аlex
domrustika писал(а): надо это сделать без часов реального времени
А как будете синхронизироваться с сутками ?

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

Добавлено: Ср мар 16, 2016 16:41:29
edm2007
Часы вести все равно нужно. Пусть софтовые, но нужно. И для синхронизации, и для элементарной настройки времени срабатывания. Можно конечно жмакать кнопку нужного момента, и от этого времени уже отсчитывать 24 часа. Но во-первых это жутко неудобно, а во-вторых потеря питания и все начинай сначала.

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

Добавлено: Ср мар 16, 2016 21:49:21
domrustika
Аlex писал(а): А как будете синхронизироваться с сутками ?
думал реализовать просто через команду
wait и переменную +1 через каждую секунду, потом как насчитает 24 часа включать релюшку...
наверно это глупо?)

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

Добавлено: Ср мар 16, 2016 21:56:53
vem566
Почему глупо? Сосчитать 86400 импульсов? Какая разница, какова частота этих импульсов - 1 герц или 1 мегагерц?

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

Добавлено: Ср мар 16, 2016 22:26:25
Аlex
domrustika писал(а):думал реализовать просто через команду wait
А с чем эта команда синхронизируется ? С Московскими курантами ? :)
Я спросил про синхронизацию с реалтайм, а Вы отвечаете про команды и переменные :)

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

Добавлено: Чт мар 17, 2016 03:39:14
edm2007
Именно так, полностью согласен. Отсчитать 24 часа вообще не проблема. Можно и wait (только о точности можно забыть), но как настроить время срабатывания, например? Говорю, можно просто поставить кнопку и сидеть ждать нужного момента. Потом с этого момента и начинаем отсчитывать время. А может вам не принципиально это? Когда включили, тогда реле и дернули и пошли отсчитывать? Тогда проще, конечно. Но я бы зацепил кварц и запустил бы таймером считаться. Можно даже асинхронным, на часовом кварце...

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

Добавлено: Чт мар 17, 2016 06:25:31
Tankor
edm2007 писал(а): Тогда проще, конечно. Но я бы зацепил кварц и запустил бы таймером считаться. Можно даже асинхронным, на часовом кварце...
Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.

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

Добавлено: Чт мар 17, 2016 20:56:12
domrustika
edm2007 писал(а): Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.
не могли бы Вы подсказать с кодом как этот подход реализовать?

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

Добавлено: Чт мар 17, 2016 20:59:48
Аlex

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

Добавлено: Пт мар 18, 2016 00:30:44
L.O.D
domrustika писал(а):не могли бы Вы подсказать с кодом как этот подход реализовать?
Гляньте апноту "Atmel AVR134: Real Time Clock (RTC) Using the Asynchronous Timer" вот здесь. Там и исходничек есть.

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

Добавлено: Пт мар 18, 2016 10:25:44
Мурик
http://bascomavr.3bb.ru/viewtopic.php?id=1132#p12410

Таймер настраивается на асинхронную работу.

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

Config Timer2 = Timer , Async = On , Prescale = 128       ' Делитель 32768 / 128 / 256 = 1 сек (прерывание TIMER2 = 1 раз в секунду)
МК тактируется от внутреннего генератора, а к выводам тактового генератора нужно подключить часовой кварц на 32768 Гц.
Когда все требуемые действия выполнены, МК переводится в спящий режим

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

Powersave
Таймеру назначается подпрограмма прерываний где выполняются необходимые действия. В простейшем случае код будет такой.

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

$regfile = "m8def.dat"
$crystal = 1000000     ' Тактовая частота 1 МГц.
$hwstack = 64
$swstack = 64
$framesize = 64

Config Timer2 = Timer , Async = On , Prescale = 128         ' Делитель 32768 / 128 / 256 = 1 сек (прерывание TIMER2 = 1 раз в секунду)
On Timer2 T2
Enable Timer2
' Разрешаем прерывания.
Enable Interrupts

Do
' Выполняем нужные действия,
' и когда выполнили, отправляем МК в спячку (ток потребления около 1 мка).
Powersave
' МК будет просыпаться после каждого прерывания от таймера Timer2.
Loop

T2:
' Подпрограмма прерываний от таймера Timer2.
Return

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

Добавлено: Пт мар 18, 2016 12:50:05
edm2007
Вот пример часов с моего когдатосайта: Асинхронный режим работы таймера. Простейшие часы на микроконтроллере AVR. :tea:

Даже ролик когда-то снимал... Ссылка.

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

Добавлено: Сб мар 19, 2016 14:47:13
sam725
по какой причине usbasp нивидит atmega328p