BASCOM AVR в вопросах и ответах
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Откуда протеусу доверия больше, чем железу ?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Что именно заставило Вас призадуматься? Даже в "авторитетном" протеусе все улетает как положено (это выход и тактирование):

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

Не трудно заметить, что улетает 0b01100100 = 100.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
ВасилийВикторович
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт мар 18, 2010 23:31:57
- Откуда: Домодедово
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Что именно заставило Вас призадуматься? Даже в "авторитетном" протеусе все улетает как положено. Не трудно заметить, что улетает 0b01100100 = 100.
Что улетает все правильно я знаю, устройство которое принимает работать в протеусе не хочет..
Аlex писал(а):Откуда протеусу доверия больше, чем железу ?
Понял, собирать что то похожее все равно надо, подумал я и решил: соберу свое, зачем повторять... По своим граблям оно как то приятнее
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Вы когда в протеусе схему рисовали, учли что управляющему контроллеру детекция перехода через ноль нужна, например? Все это сделали, чтобы проверять там?
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Из статьи :
Попробуйте проверить, дышит ли вообще МК.
В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Попробуйте проверить, дышит ли вообще МК.
-
ВасилийВикторович
- Открыл глаза
- Сообщения: 71
- Зарегистрирован: Чт мар 18, 2010 23:31:57
- Откуда: Домодедово
Re: BASCOM AVR в вопросах и ответах
Аlex писал(а):Из статьи :В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Попробуйте проверить, дышит ли вообще МК.
Попробовал, все ок. Выходит программа у автора рабочая.
Накидал в протеусе два мк, один передает, другой принимает. И та же ерунда, передаю любое четное число а другой мк принимает 255. Передаю нечетное, принимается ноль. Получается протеус глючит ?
UPD:
пока шарился по просторам интернета, нашел пару случаев похожих на мою проблему:
http://www.forbot.pl/forum/topics49/2x-atmega-spi-odbiera-tylko-jedna-watrosc-255-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 вообще пару строчек. Но регулятор мощности из статьи все равно или вкл или выкл, регулироваться в протеусе не хочет.
Так что мне теперь проще свой собрать чем повторять чужой. Всем Спасибо.

-
domrustika
- Грызет канифоль
- Сообщения: 257
- Зарегистрирован: Чт мар 22, 2007 13:50:33
- Откуда: казань
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Ребят подскажите пожалуйста примерный код для реализации сценария-
Мега8 ОДИН РАЗ в сутки дергает ногой и включает реле-------- ждет 1 секунду---------выключает реле. и так каждый день.
надо это сделать без часов реального времени ds1307.
спасибо!
Мега8 ОДИН РАЗ в сутки дергает ногой и включает реле-------- ждет 1 секунду---------выключает реле. и так каждый день.
надо это сделать без часов реального времени ds1307.
спасибо!
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
domrustika писал(а):надо это сделать без часов реального времени
А как будете синхронизироваться с сутками ?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Часы вести все равно нужно. Пусть софтовые, но нужно. И для синхронизации, и для элементарной настройки времени срабатывания. Можно конечно жмакать кнопку нужного момента, и от этого времени уже отсчитывать 24 часа. Но во-первых это жутко неудобно, а во-вторых потеря питания и все начинай сначала.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
domrustika
- Грызет канифоль
- Сообщения: 257
- Зарегистрирован: Чт мар 22, 2007 13:50:33
- Откуда: казань
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Аlex писал(а):А как будете синхронизироваться с сутками ?
думал реализовать просто через команду
wait и переменную +1 через каждую секунду, потом как насчитает 24 часа включать релюшку...
наверно это глупо?)
Re: BASCOM AVR в вопросах и ответах
Почему глупо? Сосчитать 86400 импульсов? Какая разница, какова частота этих импульсов - 1 герц или 1 мегагерц?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
А с чем эта команда синхронизируется ? С Московскими курантами ?domrustika писал(а):думал реализовать просто через команду wait
Я спросил про синхронизацию с реалтайм, а Вы отвечаете про команды и переменные
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Именно так, полностью согласен. Отсчитать 24 часа вообще не проблема. Можно и wait (только о точности можно забыть), но как настроить время срабатывания, например? Говорю, можно просто поставить кнопку и сидеть ждать нужного момента. Потом с этого момента и начинаем отсчитывать время. А может вам не принципиально это? Когда включили, тогда реле и дернули и пошли отсчитывать? Тогда проще, конечно. Но я бы зацепил кварц и запустил бы таймером считаться. Можно даже асинхронным, на часовом кварце...
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Tankor
- Встал на лапы
- Сообщения: 139
- Зарегистрирован: Вт май 03, 2011 10:13:12
- Откуда: Россия, Татарстан
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а): Тогда проще, конечно. Но я бы зацепил кварц и запустил бы таймером считаться. Можно даже асинхронным, на часовом кварце...
Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.
-
domrustika
- Грызет канифоль
- Сообщения: 257
- Зарегистрирован: Чт мар 22, 2007 13:50:33
- Откуда: казань
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.
не могли бы Вы подсказать с кодом как этот подход реализовать?
Re: BASCOM AVR в вопросах и ответах
Гляньте апноту "Atmel AVR134: Real Time Clock (RTC) Using the Asynchronous Timer" вот здесь. Там и исходничек есть.domrustika писал(а):не могли бы Вы подсказать с кодом как этот подход реализовать?
- Из овощей я больше всего люблю пельмени... © Соседский Мальчик
Re: BASCOM AVR в вопросах и ответах
http://bascomavr.3bb.ru/viewtopic.php?id=1132#p12410
Таймер настраивается на асинхронную работу.МК тактируется от внутреннего генератора, а к выводам тактового генератора нужно подключить часовой кварц на 32768 Гц.
Когда все требуемые действия выполнены, МК переводится в спящий режим
Таймеру назначается подпрограмма прерываний где выполняются необходимые действия. В простейшем случае код будет такой.
Таймер настраивается на асинхронную работу.
Код: Выделить всё
Config Timer2 = Timer , Async = On , Prescale = 128 ' Делитель 32768 / 128 / 256 = 1 сек (прерывание TIMER2 = 1 раз в секунду)Когда все требуемые действия выполнены, МК переводится в спящий режим
Код: Выделить всё
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- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Вот пример часов с моего когдатосайта: Асинхронный режим работы таймера. Простейшие часы на микроконтроллере AVR.
Даже ролик когда-то снимал... Ссылка.
Даже ролик когда-то снимал... Ссылка.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
по какой причине usbasp нивидит atmega328p
