AVR studio в вопросах и ответах
Re: AVR studio в вопросах и ответах
При Вашем _delay_ms(1000) зависает словно нет прерываний
При _delay_ms(10000); работает на первой частоте, не изменяясь
При _delay_ms(10000); работает на первой частоте, не изменяясь
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
Покажите ещё раз текущий вариант кода.
Никакая контра не уйдёт от нас
Re: AVR studio в вопросах и ответах
Ну держите еще раз
Оставлю одну доп частоту тогда
Оставлю одну доп частоту тогда
Код: Выделить всё
#define F_CPU 8000000UL //obyavleniye chastoty CPU mk
#include <avr/io.h> //podklucheniye biblioteki mk
#include <avr/interrupt.h> //podklucheniye biblioteki zaderjek
#include <util/delay.h> //podklucheniye zaderjek
uint16_t Sch=100;
static void ti_in(void)
{
TCCR1A|=0; //регистр управления таймером/счетчиком
TCNT1|=0; //Регистр таймера/счетчика
OCR1A=Sch; //значение сравнения, до 16 бит
TIMSK|=(1<<OCIE1A);
TCCR1B|=(1<<CS12)|(1<<WGM12); //установка делителя, режима работы таймера
}
ISR(TIMER1_COMPA_vect) //функция, выполняемая автоматически, при совпадении числел - счетчика и установленного значения
{
PORTC=~PORTC;
}
static void TI_Write(unsigned int Sch)
{
//unsigned int sreg = SREG;
//cli();
OCR1A=Sch;
//SREG=sreg;
}
int main(void)
{
cli();
DDRC=0xFF;
PORTE = (1<<PE0) | (1<<PE1);
Sch=100; //в реале период / 2
ti_in();
sei();
while (1)
{
if (!(PINE & (1<<PE1)))
{
TI_Write(300);
_delay_ms(100);
}
}
}
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
вот так сделайте - что будет?
Код: Выделить всё
int main(void)
{
DDRC=0xFF;
PORTE = (1<<PE0) | (1<<PE1);
ti_in();
sei();
while (1)
{
OCR1A = 300;
_delau_ms(1000);
OCR1A = 1000;
_delay_ms(1000);
}
}если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
У меня светодиоды постоянно мигают на частоте OCR1A = 1000
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
я просто не могу себе представить, как такое может быть. готов уже подумать самое страшное.
[оффтоп]
был в моей практике случай, когда вот так же помогал одному товарищу отладить его код. что ни посоветую - у него все не получается. почти неделю по вечерам бились, уже и TeamViewer поставили, я сам у него в IDE код собирал - ноль эффекта! пока не выдержал и потребовал поставить Скайп с вебкой, чтобы полюбоваться на его макетную плату... оказалось, у него питание не было подано вообще... не в ту клемму проводок вставил. и работало через пень колоду за счет паразитной запитки через пины ISP-программатора...
[/оффтоп]
[оффтоп]
был в моей практике случай, когда вот так же помогал одному товарищу отладить его код. что ни посоветую - у него все не получается. почти неделю по вечерам бились, уже и TeamViewer поставили, я сам у него в IDE код собирал - ноль эффекта! пока не выдержал и потребовал поставить Скайп с вебкой, чтобы полюбоваться на его макетную плату... оказалось, у него питание не было подано вообще... не в ту клемму проводок вставил. и работало через пень колоду за счет паразитной запитки через пины ISP-программатора...
[/оффтоп]
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
Вот тоже плюсану за то, что что-то где-то не подключено.
Ну нечему в этом коде не работать.
Прошивка-то вообще обновляется?
Ну нечему в этом коде не работать.
Прошивка-то вообще обновляется?
Последний раз редактировалось prinv Пн окт 08, 2018 12:52:23, всего редактировалось 1 раз.
Никакая контра не уйдёт от нас
Re: AVR studio в вопросах и ответах
Что же такое страшное?
Хм... Ну я могу прислать фотографию, если потребуется
А у вас всё работает при сборке моего кода?
Хм... Ну я могу прислать фотографию, если потребуется
А у вас всё работает при сборке моего кода?
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
[uquote="An-SU",url="/forum/viewtopic.php?p=3475973#p3475973"]А у вас всё работает при сборке моего кода?[/uquote]
Дома могу проверить на ATMega16A на Pinboard
Дома могу проверить на ATMega16A на Pinboard
Никакая контра не уйдёт от нас
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
[uquote="An-SU",url="/forum/viewtopic.php?p=3475966#p3475966"]У меня светодиоды постоянно мигают на частоте OCR1A = 1000[/uquote]объясняю, что меня удивляет.
вы пишите, мигает как при OCR1A=1000.
но, во-первых, если оно зависает до начала главного цикла, то OCR1A=100 согласно вашего кода инициализации таймера!
во-вторых, если оно зависает на задержке в главном цикле, то 1 секунду оно обязано было отработать с OCR1A=300 - согласно моему коду!
а вы говорите, что у вас каким-то чудом не 100, не 300, а сразу 1000 - и ничего не меняется! а ведь цикл бесконечный...
вы пишите, мигает как при OCR1A=1000.
но, во-первых, если оно зависает до начала главного цикла, то OCR1A=100 согласно вашего кода инициализации таймера!
во-вторых, если оно зависает на задержке в главном цикле, то 1 секунду оно обязано было отработать с OCR1A=300 - согласно моему коду!
а вы говорите, что у вас каким-то чудом не 100, не 300, а сразу 1000 - и ничего не меняется! а ведь цикл бесконечный...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
ARV, прошу прощения, я ошибся - мигает как на 300, не меняясь
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
оптимизация у вас при компиляции включена или отключена?
если мигает на 300, значит, прерывания работают и обновление OCR1A как минимум однократно происходит.
значит, остается задержка, как узкое место.
если мигает на 300, значит, прерывания работают и обновление OCR1A как минимум однократно происходит.
значит, остается задержка, как узкое место.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
Стоит optimize for size
Ну так прерывания в любом случае происходят, ибо светодиоды мерцают, разве не так?
Ну так прерывания в любом случае происходят, ибо светодиоды мерцают, разве не так?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
прерывания происходят, мне не понятно, как частота этих прерываний может не меняться каждую секунду?! я ведь написал в коде менять частоту каждую секунду!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: AVR studio в вопросах и ответах
Вообще Вы правы, поставил себе в цикл просто мигания после 1 секунды как инвертирование порта делай мс, на практике инвертирует лишь через секунд 16...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: AVR studio в вопросах и ответах
разбирайтесь с тактированием - задержки должны отрабатывать весьма точно, если включена оптимизация и правильно задана частота.
возможно, у вас и ранее все работало правильно, но вы об этом не догадывались...
возможно, у вас и ранее все работало правильно, но вы об этом не догадывались...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
Вот такой код работает вообще без вопросов
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
uint16_t Sch = 1000;
ISR(TIMER1_COMPA_vect) /* Timer/Counter1 Compare Match A */
{
PORTB = ~PORTB;
};
static void ti_ini(uint16_t Sch)
{
// Инициализация Timer1 16bit
TCCR1B = 0; // Остановили таймер
TCCR1A = 0;
TCNT1 = 0; // Начальное значение счётчика таймера
OCR1A = Sch; // Значение сравнения
TIMSK = _BV(OCIE1A);// Разрешаем прерывание при совпадении с А
TCCR1B = _BV(WGM12) | _BV(CS12);
}
static void TI_Write(uint16_t Sch)
{
OCR1A=Sch;
}
int main(void)
{
/* Светодиоды */
DDRB = _BV(PB3); // индикатор прерывания
DDRD = _BV(PD7); // индикатор нажатия клавиши
/* Подтяжка вверх для кнопок */
PORTC = _BV(PC1) | _BV(PC0);
ti_ini(Sch);
sei();
while (1)
{
if (!(PINC & _BV(PC0))) // нажата кнопка PC0
{
PORTD ^= _BV(PD7); // Подтверждение нажатия кнопки
Sch = 5000;
TI_Write(Sch);
_delay_ms(100);
}
if (!(PINC & _BV(PC1))) // нажата кнопка PC1
{
PORTD ^= _BV(PD7); // Подтверждение нажатия кнопки
Sch = 2000;
TI_Write(Sch);
_delay_ms(100);
}
}
}
- Вложения
-
- IMG_20181008_203145_1.png
- Pinboard II
- (190.85 КБ) 426 скачиваний
Никакая контра не уйдёт от нас
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: AVR studio в вопросах и ответах
[uquote="An-SU",url="/forum/viewtopic.php?p=3476051#p3476051"]Вообще Вы правы, поставил себе в цикл просто мигания после 1 секунды как инвертирование порта делай мс, на практике инвертирует лишь через секунд 16...[/uquote]
А что у вас с фьюзом CLKDIV8?
16 сек это 2 сек * 8, а 2 секунды это 1 сек вкл + 1 сек выкл.
А что у вас с фьюзом CLKDIV8?
16 сек это 2 сек * 8, а 2 секунды это 1 сек вкл + 1 сек выкл.
Никакая контра не уйдёт от нас
Re: AVR studio в вопросах и ответах
Итак, последние сводки с фронта - у меня не был установлен фьюз на частоту 8 МГц, теперь задержки адекватны, но!
Всё остальное работает по-прежнему, не считая именно самой изменившейся частоты
prinv, почти такой же код у меня и сейчас. Но видимо, дело обстоит в изменении еще каких-либо настроек
А CLKDIV8 разве есть в Атмеге128?
Всё остальное работает по-прежнему, не считая именно самой изменившейся частоты
prinv, почти такой же код у меня и сейчас. Но видимо, дело обстоит в изменении еще каких-либо настроек
А CLKDIV8 разве есть в Атмеге128?