Страница 141 из 160

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

Добавлено: Пт окт 05, 2018 09:52:30
An-SU
Реакции никакой.
Проверил - именно на команды, связанные с таймером
:shock:

Добавлено after 33 minutes 11 seconds:
В ходе последних мучений выяснил, что проблема именно в передаче значения как входного параметра - даже с volatile не хочет считывать так, как мне это нужно

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

Добавлено: Пт окт 05, 2018 09:55:10
prinv
Замени вызов функции прямым присвоением регистра.

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

Добавлено: Пт окт 05, 2018 09:58:37
ARV
An-SU писал(а):проблема именно в передаче значения как входного параметра - даже с volatile не хочет считывать так, как мне это нужно
чудеса, да и только!

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

Добавлено: Пт окт 05, 2018 10:14:27
prinv
[uquote="ARV",url="/forum/viewtopic.php?p=3473415#p3473415"]чудеса, да и только![/uquote]
Вот в этом и есть косяк AVR - отладчик стоит неразумных денег.
Я после MSP430 и теперь на STM32 смотрю на эту проблему с недоумением.

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

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

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

Добавлено: Пт окт 05, 2018 10:32:40
prinv
Вот сейчас как раз тот самый случай, когда отладка бы всё прояснила.

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

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

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

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

Добавлено: Пт окт 05, 2018 10:53:40
An-SU
prinv, а не подскажете, каким образом можно записать, чтобы регистр считывал величины переменных?

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

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

Добавлено: Пт окт 05, 2018 11:09:33
ARV
An-SU писал(а):отечественный аналог 128
чевой-чевой?! :shock: :shock: :shock:

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

Добавлено: Пт окт 05, 2018 11:13:58
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, может покажете нам - что вы там делаете? :))

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

Добавлено: Пт окт 05, 2018 12:15:06
An-SU
Не, просто в связи с более подробным описанием таймеров на русском читал методичку для 1887ВЕ7Т.
:)

"Имя_регистра = имя_переменной" - так в моем коде оно так и объявлялось...

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

Добавлено: Сб окт 06, 2018 04:41:34
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);
		}

    }
}

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

Добавлено: Сб окт 06, 2018 07:08:52
ARV
prinv писал(а):Не работало, пока я не сообразил, что в прерывании нужно обнулить счётчик
так вроде ж шла речь про режим СТС, или я опять все перепутал?

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

Добавлено: Сб окт 06, 2018 07:49:56
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);
		}
В общем, проблему так и не получилось повторить

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

Добавлено: Пн окт 08, 2018 09:07:29
An-SU
prinv, уважаемый, спасибо Вам огромное!
На самом деле код заработал у меня еще в пятницу, когда я поставил переназначение OCR сразу со входного параметра функции, а не путано, как у меня было (может, еще что изменил, но оно стало работать)

На данный момент имеется лишь проблема с тем, что изменение частоты при нажатии на кнопку происходит кратковременно, только во время нажатия, словно я использую while
Не подскажете..?

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

Добавлено: Пн окт 08, 2018 09:08:53
prinv
Покажите текущий код

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

Добавлено: Пн окт 08, 2018 09:23:46
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);
    }
}

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

Добавлено: Пн окт 08, 2018 09:26:28
ARV
An-SU писал(а):static void TI_Write(unsigned int Sch)
{
 unsigned int sreg = SREG;
 cli();
 OCR1A=Sch;
SREG=sreg;
}

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

Добавлено: Пн окт 08, 2018 09:33:44
An-SU
ARV, ну удаление особой роли в данном случае не сыграет, повторюсь, я просто ориентировался на:
https://docplayer.ru/59393693-Mikroshem ... dl-to.html 124 страница сверху

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

Добавлено: Пн окт 08, 2018 10:01:53
ARV
у вас творятся чудеса, поэтому все лишнее - безжалостно отсекаем.
у вас кнопки на порту Е - я так понимаю, на общий? где настройка порта Е?