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

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

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

Сообщение prinv »

Как-то больно мудро опрашиваете клавиатуру
Попробуйте

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

if (!(PINE &= (1<<PE1)))
заменить на

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

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

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

Сообщение ARV »

кстати, да - глаз замылился уже :) не заметил &=
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение prinv »

Как реализована подтяжка кнопок? Внешними резисторами?
Если нет, то её нужно включить

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

PORTE = (1<<PE0) | (1<<PE1);
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

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

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

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

Сообщение prinv »

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

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

Сообщение ARV »

prinv писал(а):Я кажется нашёл косяк.
У вас и глобальная переменная, и параметр функции имеют одно имя - Sch
по идее, это не косяк: по правилу экранирования локальная переменная (параметр) экранирует глобальную, т.е. внутри функции видна именно переменная-параметр.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение prinv »

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

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

Сообщение ARV »

ну так не должно влиять...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
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>

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

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

      if (!(PINE & (1<<PE0)))
       TI_Write(1000);
    }
}
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

А если вот так переписать?

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

void TI_Write(unsigned int Sch1)
{
 OCR1A=Sch1;
}
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

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

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

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

Сообщение ARV »

а давайте-ка уточним, что вы вкладываете в понятие "не работает" программа? вы как ОЖИДАЕТЕ увидеть её работу?
период мигания у вас НЕ МЕНЯЕТСЯ, так как у вас не режим СТС, а просто счет таймера. при каком бы значении не происходило сравнение OCR1A с TCNT, период между этими событиями только в момент нажатия кнопки будет иным, что легко не заметить, а все прочее время - тем же самым, как определено предделителем таймера :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Сообщение prinv »

[uquote="ARV",url="/forum/viewtopic.php?p=3475881#p3475881"]не режим СТС[/uquote]
Почему не CTC? Только WGM12 установлен.
Я бы только поменял всё на безусловное присваивание

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

void ti_in(void)
{
   TCCR1B = 0; // И ПЕРВОЙ СТРОЧКОЙ ЭТО БЫ ДОБАВИЛ
   TCCR1A=0;   //регистр управления таймером/счетчиком
   TCNT1=0;   //Регистр таймера/счетчика
   OCR1A=Sch;   //значение сравнения, до 16 бит
   TIMSK=(1<<OCIE1A);
   TCCR1B=(1<<CS12)|(1<<WGM12);   //установка делителя, режима работы таймера
}
Последний раз редактировалось prinv Пн окт 08, 2018 10:40:28, всего редактировалось 2 раза.
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

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

Да, как раз в СТС именно и сравнивается счетчик с OCR.

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

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

Сообщение ARV »

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

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

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

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

Я бы только поменял всё на безусловное присваивание
Не влияет :dont_know:
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

А так?

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

    while (1)
    {
      uint8_t Value;
      Value = PINE;
      if (!(Value & (1<<PE1)))
       OCR1A=300;

      if (!(Value & (1<<PE0)))
       OCR1A=1000;
    }
Никакая контра не уйдёт от нас
An-SU
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

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

prinv, аналогично

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

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

Сообщение ARV »

без кнопок-то хоть разная частота может быть вами получена?

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

OCR1A = 300;
_delau_ms(1000);
OCR1A = 1000;
_delay_ms(1000);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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