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

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

Сообщение ARV »

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

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

Сообщение prinv »

Вот такой код работает вообще без вопросов

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

#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 КБ) 441 скачивание
Никакая контра не уйдёт от нас
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

[uquote="An-SU",url="/forum/viewtopic.php?p=3476051#p3476051"]Вообще Вы правы, поставил себе в цикл просто мигания после 1 секунды как инвертирование порта делай мс, на практике инвертирует лишь через секунд 16...[/uquote]
А что у вас с фьюзом CLKDIV8?
16 сек это 2 сек * 8, а 2 секунды это 1 сек вкл + 1 сек выкл.
Никакая контра не уйдёт от нас
Контактная информация:
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Итак, последние сводки с фронта - у меня не был установлен фьюз на частоту 8 МГц, теперь задержки адекватны, но!
Всё остальное работает по-прежнему, не считая именно самой изменившейся частоты

prinv, почти такой же код у меня и сейчас. Но видимо, дело обстоит в изменении еще каких-либо настроек
А CLKDIV8 разве есть в Атмеге128?
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

[uquote="An-SU",url="/forum/viewtopic.php?p=3476626#p3476626"]А CLKDIV8 разве есть в Атмеге128?[/uquote]
А, ну да, нет :-)

Добавлено after 12 minutes 11 seconds:
Какие сейчас значения фьюзов?
Никакая контра не уйдёт от нас
Контактная информация:
Реклама
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Вообще я до последнего не лазил в фьюзы, боялся :)))
Всё, что есть:

EXTENDED.M103C - 1
EXTENDED.WDTON - 0
HIGH.OCDEN - 0
HIGH.JTAGEN - 1
HIGH.SPIEN - 1
HIGH.EESAVE - 1
HIGH.BOOTSZ - Boot Flash size = 4096 words start address = $F000
HIGH.BOOTRST - 0
HIGH.CKOPT - 0
LOW.BODLEVEL - Brown-out detection level at VCC = 2.7 V
LOW.BODEN - 0
LOW.SUT_CKSEL - Int.RC.Osc. 8 MHz; Start-up time: 6 CK + 0 ms
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

странноватые фьюзы... имхо
An-SU писал(а):EXTENDED.WDTON - 0
т.е. WDT включен аппаратно, а в коде нет ни строчки про него - из-за непрерывно следующих резетов программа может вести себя абсолютно неадекватно
An-SU писал(а):HIGH.SPIEN - 1
прошивка через SPI запрещена ?! и как вы прошиваетесь тогда? по OCD?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение prinv »

[uquote="ARV",url="/forum/viewtopic.php?p=3476791#p3476791"]странноватые фьюзы... имхо
An-SU писал(а):EXTENDED.WDTON - 0
т.е. WDT включен аппаратно, а в коде нет ни строчки про него - из-за непрерывно следующих резетов программа может вести себя абсолютно неадекватно[/uquote]
Для включения таймера этот фьюз нужно включить, а тут наоборот
WDTON

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

Сообщение ARV »

prinv писал(а):Для включения таймера этот фьюз нужно включить, а тут наоборот
фьюз активируется нулем. я не знаю, какая логика в предъявленном нам описании фьюзов. я знаю, что запрограммированный фьюз это ноль, стертый - единичка. т.е. WDT активирован
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение prinv »

Если только биты не с инверсией
Никакая контра не уйдёт от нас
Контактная информация:
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

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

Сообщение prinv »

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

Сообщение ARV »

судя по всему, логика описания фьюзов тут прямая, т.е. 1 означает активность фьюз-функции. что напрягает, имхо.
если на самом деле фьюз-бит прошит нулем, то активирован режим совместимости с 103-ей мегой, а в этом случае таймеры имеют хитрые особенности, что скорее приведет к проблемам, чем к успеху.
к тому же при прямой логике активен JTAG, что приведет к неработоспособности в качестве GPIO-линий соответствующего порта, что так же черевато проблемами впоследствии.
в общем, вангую: путаница полная :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

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

Сообщение ARV »

считайте из МК фьюзы и покажите в виде HEX-числа, что там на самом деле прошито.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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

Вы это имеете в виду?

EXTENDED = 0xFD
HIGH = 0x81
LOW = 0xC4
Вымогатель припоя
Аватара пользователя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь

Сообщение prinv »

Вот такие фьюзы выбраны (см. вложение)
Вложения
fuses.png
(66.56 КБ) 330 скачиваний
Никакая контра не уйдёт от нас
Контактная информация:
Открыл глаза
Сообщения: 72
Зарегистрирован: Пн окт 01, 2018 11:33:59

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

Да, хотя CKOPT у меня уже обнулен
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Сообщение Vlad_RK »

Скажите, в Atmel Studio 7.0 только у меня имитация внешних прерываний не работает?
Настроил INT0 (ATmega16) на прерывание по спаду, сбрасываю пин в порту - реакции студии ноль. В AVR Studio 5.1 это работает.

Пробовал Atmel Studio 6.2, тут еще интереснее, по F11 она просто прогоняет код команда за командой, не обращая внимания на RJMP, RCALL и прочую ерунду. :) Было такое у кого-нибудь?

И еще вопрос, в AVR Studio 5.1, как переключить регистры на отображение в десятичном или двоичном виде?
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн июл 28, 2014 20:23:22

Сообщение Mixail_BM »

Не подскажет мне кто-нибудь, а то я такой ...
программка на atmega8 - суть в чем. При запуске считываются данные с 1 внешней eeprom (2 байта). Они указывают последнюю записанную ячейку на второй внешней eeprom at24c32. До сих пор отрабатывает на ура.
Далее, раз в определенный период (по разному, не меньше пары часов и до суток) записывает данные в следующие ячейки второй eeprom. Соответственно перезаписывает в 1 eeprom 2 байта.
текст в файле. Он ВЫПОЛНЯЕТСЯ.
Теперь к вопросу. Не подскажиет мне, почему он до определенного адреса пишет нормально, а потом бац - и там ниже посмотрите - есть перезапись как копирование на других участках, а потом опять норма. где косяк?
самое удивительное - читает все нормально, на экран выводит тоже, но если просто прочитать данные не друг за другом???
Вложения
запись на память и данные.txt
(2.57 КБ) 347 скачиваний
Ответить

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