Re: BASCOM AVR в вопросах и ответах
Добавлено: Пн мар 14, 2016 17:58:20
Откуда протеусу доверия больше, чем железу ?
Здесь можно немножко помяукать :)
https://radiokot.ru:443/forum/

Что улетает все правильно я знаю, устройство которое принимает работать в протеусе не хочет..edm2007 писал(а):Что именно заставило Вас призадуматься? Даже в "авторитетном" протеусе все улетает как положено. Не трудно заметить, что улетает 0b01100100 = 100.
Понял, собирать что то похожее все равно надо, подумал я и решил: соберу свое, зачем повторять... По своим граблям оно как то приятнееАlex писал(а):Откуда протеусу доверия больше, чем железу ?
Попробуйте проверить, дышит ли вообще МК.В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Попробовал, все ок. Выходит программа у автора рабочая.Аlex писал(а):Из статьи :Попробуйте проверить, дышит ли вообще МК.В качестве бонуса возможна настройка отправки обратно на управляющий МК статуса - это один байт у которого нулевой бит будет выставлен в 1 в случае отсутствия переменного напряжения в течении более 1 сек (обрыв провода питания).
Код: Выделить всё
$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А как будете синхронизироваться с сутками ?domrustika писал(а): надо это сделать без часов реального времени
думал реализовать просто через командуАlex писал(а): А как будете синхронизироваться с сутками ?
А с чем эта команда синхронизируется ? С Московскими курантами ?domrustika писал(а):думал реализовать просто через команду wait
Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.edm2007 писал(а): Тогда проще, конечно. Но я бы зацепил кварц и запустил бы таймером считаться. Можно даже асинхронным, на часовом кварце...
не могли бы Вы подсказать с кодом как этот подход реализовать?edm2007 писал(а): Полностью поддерживаю данный подход. Он экономичен, поскольку можно почти всегда спать. Исполнение в коде проще и т.д.
Гляньте апноту "Atmel AVR134: Real Time Clock (RTC) Using the Asynchronous Timer" вот здесь. Там и исходничек есть.domrustika писал(а):не могли бы Вы подсказать с кодом как этот подход реализовать?
Код: Выделить всё
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