У тебя это где? И потом, я в кн смотрел, и настроил все как надо, а написано там так:
#include <avr/signal.h>
INTERRUPT(прерывание)
{
//Пользовательский код
}
где перерывание -- идентификатор, передающийся в в качестве параметров макросу INTERRUPT, ну типа SIG_ADC, SIG_COMPARATOR. А в моем случае походу SIG_OUTPUT_COMPARE0
А все регистры по настройке СV настроил аналогично тому что я описал выше. Вот така тут беда
_________________ А кота своего я назвал квадратом...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Работает такой вариант. Но странно, когда я обявил еще так:
ISR(SIG_OUTPUT_COMPARE0)
{
PORTA = 80;
}
то ничего не происходило, а ведь в iom162.h обявлено так:
/* Timer/Counter0 Compare Match */
#define TIMER0_COMP_vect _VECTOR(16)
#define SIG_OUTPUT_COMPARE0 _VECTOR(16)
Это ж одно и тоже, только функция ISR. Почемуже новая версия неподдерживает измененные функции предиидущей
Гон немного играешся пол дня пока до тебя донесут, что так уже незаписываеться....
И такой малюсенький вопросик: Что за предупреждение такое при компиляции "5.c:26:2: warning: no newline at end of file"?, кручу мучу убрать его немогу
_________________ А кота своего я назвал квадратом...
Опять попал на гиморой, кокогото..... глобально обьявленая переменная N нехочеть работать. Експерементальный код такой:
#include <avr/io.h>
#include <avr/interrupt.h>
int N=0;
ISR(TIMER0_COMP_vect)
{
N=TCNT1;
TCNT0=0;
N=0;
}
int main(void)
{
DDRA=0xFF;
PORTA=0xFF;
TCCR0=0x01;//Set timer0
OCR0=0x5F;
TIMSK=0x01;
sei();
while(1)
{
asm volatile ("nop");
volatile N=N+1;
asm volatile ("nop");
asm volatile ("nop");
}
}
Она гадина в цикле ни с нуля считает (просматривал в AVR4). Да и в прерывании, ей почемуто ничего неприсваиваеться. И при компиляции выскакивают такие сообщения:
5.c:25: warning: type defaults to 'int' in declaration of 'N'
Тоесть компилятор незнает что N имеет тип integer, хотя обявлено вроде нормально.
Что бы это могло быть????? Может я уже нетак ее обьявляю???
И еще вопросик: неимел ли кто-то дело с функцией dtostrf, которая определена в файле stdlib.h, а тоникак заставить ее работать немогу
_________________ А кота своего я назвал квадратом...
При обработке перерывания регист состояния SREG запрещает все перерывания, когда выходит из подпрограммы обработки перерывания, то автоматически разрешаються глобальные перерывания. Регистр SREG по известным данным не где не сохраняеться. Вопрос: Можно ли в подпрограме обработки перерывания запретить общие перерывания, когда произрйдет выход из подпрограмы? Что бы когда вышел, а общие прерывания запрещены???
_________________ А кота своего я назвал квадратом...
Это называется функция в Си. Запретить бессмысленно так как компилятор сам ставит инструкцию RETI по завершению функции.
Вот если функцию не выполнять до конца а выскочить из нее безусловным переходом типа GOTO МЕТКА - тогда бы RETI не выполнилось. но по-моему CVAVR не позволяет покинуть функцию по GOTO.
Но ведь можно наверно в функции вставить АСМ вставку для перехода на какое то место программы ? Може получится вот так хитро выскочить из функции не доделав ее.
В асме есть две команды ret и reti. Превая выход без разрешения общих перерываний другая с. Вообщем. Записал так
asm("ret");
и все. Но опять прикол с этим WinAVR, прыгает оно вообще на середину функции, которая стоит еще перед главной
_________________ А кота своего я назвал квадратом...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения