AVR studio в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

Реакции никакой.
Проверил - именно на команды, связанные с таймером
:shock:

Добавлено after 33 minutes 11 seconds:
В ходе последних мучений выяснил, что проблема именно в передаче значения как входного параметра - даже с volatile не хочет считывать так, как мне это нужно
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

Замени вызов функции прямым присвоением регистра.
Никакая контра не уйдёт от нас
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

An-SU писал(а):проблема именно в передаче значения как входного параметра - даже с volatile не хочет считывать так, как мне это нужно
чудеса, да и только!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

[uquote="ARV",url="/forum/viewtopic.php?p=3473415#p3473415"]чудеса, да и только![/uquote]
Вот в этом и есть косяк AVR - отладчик стоит неразумных денег.
Я после MSP430 и теперь на STM32 смотрю на эту проблему с недоумением.
Никакая контра не уйдёт от нас
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

[uquote="prinv",url="/forum/viewtopic.php?p=3473424#p3473424"]Я после MSP430 и теперь на STM32 смотрю на эту проблему с недоумением.[/uquote]вот только давайте без вот этого вот!
для AVR в том их понимании, как у большинства любителей, вообще нет необходимости в отладчиках! если не симулятор студии, то уж протеус точно покрывает все потребности разработчика. для особо гениальных, конечно, потребуется нечто большее - тогда пусть и платят. разбаловались отладчиками, даже наподумать сил не оставили...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

Вот сейчас как раз тот самый случай, когда отладка бы всё прояснила.
Никакая контра не уйдёт от нас
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

сейчас как раз тот случай, чтобы повыкидывать из кода лишние манипуляции с SREG, бесконечные cli()-sei(), повсеместные volatile, разобраться с алгоритмом управления таймером и сделать так, что бы заработало с пол-пинка. а отладчик тут окажет медвежью услугу.

Добавлено after 51 second:
хотя при желании можно воспользоваться симулятором студии или (для ШИМ-а предпочтительнее) протеусом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

prinv, а не подскажете, каким образом можно записать, чтобы регистр считывал величины переменных?

ARV, команды с SREG и cli()-sei() я брал из технического описания для микросхемы (отечественный аналог 128), где приводился следующий отрывок кода как правильный для изменения регистров таймера. volatile накидывал до кучи, пытаясь оживить программу, да
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

An-SU писал(а):отечественный аналог 128
чевой-чевой?! :shock: :shock: :shock:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

[uquote="An-SU",url="/forum/viewtopic.php?p=3473447#p3473447"]prinv, а не подскажете, каким образом можно записать, чтобы регистр считывал величины переменных?[/uquote]

Имя_регистра = имя_переменной

Добавлено after 1 minute 5 seconds:
[uquote="ARV",url="/forum/viewtopic.php?p=3473461#p3473461"]чевой-чевой?! :shock: :shock: :shock:[/uquote]
Вот тут тоже кофе поперхнулся. 1887ВЕ7Т, 1887ВЕ8Т используете?
An-Su, может покажете нам - что вы там делаете? :))
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

Не, просто в связи с более подробным описанием таймеров на русском читал методичку для 1887ВЕ7Т.
:)

"Имя_регистра = имя_переменной" - так в моем коде оно так и объявлялось...
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

Да, просто вместо вызова функции присвойте значение регистру.

Добавлено after 8 hours 50 minutes 48 seconds:
Сделал на ATMega16A.
Не работало, пока я не сообразил, что в прерывании нужно обнулить счётчик.

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

#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

uint16_t Sch = 10000;

ISR(TIMER1_COMPA_vect) /* Timer/Counter1 Compare Match A */
{
	PORTB ^= _BV(PB3);
	/* Не забываем обнулить счётчик!!! */
	TCNT1 = 0;
};

void ti_ini(uint16_t temp)
{
	// Инициализация Timer1 16bit
	TCCR1B = 0;			// Остановили таймер
	TCCR1A = 0;			// Обычный режим
	TCNT1 = 0;			// Начальное значение счётчика таймера
	OCR1A = temp;		// Значение сравнения
	TIMSK = _BV(OCIE1A);// Разрешаем прерывание при совпадении с А
	TCCR1B = _BV(CS11) | _BV(CS10); // Запуск таймера, предделитель CLK/64
}

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 /= 2;
			ti_ini(Sch);
			_delay_ms(100);
			
		}
		if (!(PINC & _BV(PC1))) // нажата кнопка PC1
		{
			PORTD ^= _BV(PD7);
			Sch *= 2;
			ti_ini(Sch);
			_delay_ms(100);
		}

    }
}
Никакая контра не уйдёт от нас
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

prinv писал(а):Не работало, пока я не сообразил, что в прерывании нужно обнулить счётчик
так вроде ж шла речь про режим СТС, или я опять все перепутал?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

И в режиме CTC тоже всё работает

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

ISR(TIMER1_COMPA_vect) /* Timer/Counter1 Compare Match A */
{
	PORTB ^= _BV(PB3);
};

void ti_ini(uint16_t temp)
{
	// Инициализация Timer1 16bit
	TCCR1B = 0;			// Остановили таймер
	TCCR1A = 0;			
	TCNT1 = 0;			// Начальное значение счётчика таймера
	OCR1A = temp;		// Значение сравнения
	TIMSK = _BV(OCIE1A);// Разрешаем прерывание при совпадении с А
	TCCR1B = _BV(WGM12) | _BV(CS11) | _BV(CS10); // Запуск таймера в режиме CTC, предделитель CLK/64
}
Добавлено after 11 minutes 32 seconds:
Работает и в случае простого присваивания OCR1A = Sch;

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

		if (!(PINC & _BV(PC0))) // нажата кнопка PC0
		{
			PORTD ^= _BV(PD7);
			Sch /= 2;
			OCR1A = Sch;
//			ti_ini(Sch);
			_delay_ms(100);
			
		}
		if (!(PINC & _BV(PC1))) // нажата кнопка PC1
		{
			PORTD ^= _BV(PD7);
			Sch *= 2;
			OCR1A = Sch;
// 			ti_ini(Sch);
			_delay_ms(100);
		}
В общем, проблему так и не получилось повторить
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

prinv, уважаемый, спасибо Вам огромное!
На самом деле код заработал у меня еще в пятницу, когда я поставил переназначение OCR сразу со входного параметра функции, а не путано, как у меня было (может, еще что изменил, но оно стало работать)

На данный момент имеется лишь проблема с тем, что изменение частоты при нажатии на кнопку происходит кратковременно, только во время нажатия, словно я использую while
Не подскажете..?
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

Покажите текущий код
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

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

#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
#include <stdio.h>

unsigned int Sch;

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;
   Sch=100; //в реале период / 2
   ti_in();
   sei();

    while (1)
    {
      if (!(PINE &= (1<<PE1)))
       TI_Write(300);

      if (!(PINE &= (1<<PE0)))
       TI_Write(1000);
    }
}
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

An-SU писал(а):static void TI_Write(unsigned int Sch)
{
 unsigned int sreg = SREG;
 cli();
 OCR1A=Sch;
SREG=sreg;
}
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Сообщение An-SU »

ARV, ну удаление особой роли в данном случае не сыграет, повторюсь, я просто ориентировался на:
https://docplayer.ru/59393693-Mikroshem ... dl-to.html 124 страница сверху
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

у вас творятся чудеса, поэтому все лишнее - безжалостно отсекаем.
у вас кнопки на порту Е - я так понимаю, на общий? где настройка порта Е?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «AVR»