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

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

Добавлено: Вт июн 01, 2010 08:54:11
warrior2031
Отлаживаю программу в AVR studio 4 и возникла такая ситуация.

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

Рассматриваю сейчас часть программы где просто динамическая индикация идет.

Когда я симулирую её в Proteus, то там начинаются глюки в зависимости от частоты на которой работает процессор. Там некие биты указываются, отвечающие за эту самую частоту. Почему так может быть, что на intRC=1MHz всё работает более или менее, а на 4MHz уже отображает на дисплее не то.

И даже когда, вроде, отображается нормально происходит следующий момент. Вот в программе последовательно активизируется четыре разряда индикации. В AVR studio всё как и написано в программе происходит. Но в Proteus он может перескакивать разяды.

Может это быть связано со сторожевым таймером?

Почему так может быть? В чем может быть ошибка?

Контроллер - atmega8.

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

Добавлено: Вт июн 01, 2010 09:41:29
Meteor
Мне кажется этот вопрос надо перенаправить в тему по консервусу. Не было у меня лично ни каких бед, пока не попробовал этот злополучный продукт. И нет сейчас никаких бед, потому как больше не употребляю.

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

Добавлено: Вт июн 01, 2010 10:09:41
warrior2031
Спасибо за быстрый ответ.

А в чем Вы бы предложили схему смоделировать для AVR?

Или это всё же не совсем правильно и надо проверять на железе?

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

Добавлено: Вт июн 01, 2010 10:31:54
Pooher
Только "ЖЕЛЕЗО"!

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

Добавлено: Вт июн 01, 2010 10:38:42
Meteor
Pooher, а голову к железу? :shock:

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

Добавлено: Вт июн 01, 2010 10:59:08
Pooher
Ну, это если имеется :)))

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

Добавлено: Вт июн 01, 2010 11:06:58
ARV
уж что-что, а динамическую индикацию протеус нормально позволяет отладить - не надо катить на него бочку в этом вопросе :) вот WDT он так и не умеет нормально эмулировать (во всяком случае в известной мне версии)...

просто где-то в программе есть ошибка.

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

Добавлено: Вт июн 01, 2010 11:10:36
GP1
и все же ...
"Истина в железе" :beer:

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

Добавлено: Вт июн 01, 2010 11:20:19
ARV
истина где-то там...

просто когда в железе не заработало - не так-то уж и просто найти место в программе, которое не дает работать :)

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

Добавлено: Вт июн 01, 2010 11:25:57
GP1
Согласен на все 100%

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

Добавлено: Вт июн 01, 2010 11:44:37
warrior2031
ARV писал(а):уж что-что, а динамическую индикацию протеус нормально позволяет отладить - не надо катить на него бочку в этом вопросе :) вот WDT он так и не умеет нормально эмулировать (во всяком случае в известной мне версии)...

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

В AVR Studio я проверял полностью эту подпрограмму - все по порядку идет, WDT не срабатывает.

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

Добавлено: Вт июн 01, 2010 11:45:56
Meteor
А прерывания не "мешают"? Или совсем не используете?

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

Добавлено: Ср июн 02, 2010 07:45:43
warrior2031
В общей программе у меня есть одно внешнее прерывание. Но сбивается и без него.

Не понимаю, почему это зависит от частоты внутреннего RC генератора. Например, при повышении частоты может пропасть точка на индикаторе или начинает светиться сегмент G у индикатора, хотя на порту единицы на этой линии нет. Т.е. ко всему ещё и индикатор как бы "глючит". В порту все правильно, а на нем появляется всякое нехорошее.

Просто если это будет реализовано до конечного устройства, то будет использован индикатор со встроенными регистрами. Динамической индикации как таковой не будет. Будет просто запись в буфер как бы. Но мне в общем и целом хотелось бы посмотреть на работу программы, поэтому сделал динамическую.

Кстати, если уж на то пошло. А как бы мне проверить обрабатывается ли внешнее прерывание?
Я настроил их на прерывания по INT0 по нарастающему фронту, например. Правильно понимаю, если я единицу запишу в AVR Studio на int0 в дебаге, то он должен на обработчик вн. прерывания перейти?

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

Добавлено: Ср июн 02, 2010 08:23:16
tuco2009
Пришло время мне сделать проект на С. Помогите пожалуйста организовать передачу данных 8-10 регистров и участка памяти в 16 байт из ассемблерной части в сишную и наоборот. Как это организовать?
Можно, конечно, по прямой адресации в памяти, но меня учили (еще на Турбо С и MASM) и говорили, что это нехорошо, мало ли что, когда сишному компилятору захочется поменять адрес своей переменной, а тут я, с прямой адресацией... Есть ли другие способы?

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

Добавлено: Ср июн 02, 2010 08:40:58
tuco2009
Блин, сам прочитал и не понял что написал :))) Короче говоря есть готовая программа на ASM , в нее надо вставить пересчет формулы на Си. Формула довольно сложная и использует много переменных, которые получены из портов в программе на АСМ. Вариант с перекомпиляцией формулы в АСМ даже рассматривать не хочу, поскольку она будет немного меняться от прошивки к прошивке, и естественно, каждый раз ее пересматривать....сами понимаете...
Поэтому вижу выход:
1. Сделать прогу на си (самого си кода будет 5-6%)
2. Оставить все как есть в ASM, и добавить Си (не вижу как это практически реализовать, под AVR Studio)

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

Добавлено: Ср июн 02, 2010 11:53:42
ARV
первый вариант

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

Добавлено: Ср июн 02, 2010 22:21:44
tuco2009
Нашел немного инфы. В СAVR есть спецификация -х assembler-with-cpp. При этом код выглядит следующим образом:

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

#include <avr/io.h> ; Note [1]
work = 16 ; Note [2]
tmp = 17
.....
main:
rcall ioinit
1:
rjmp 1b ; Note [6]
.global TIMER0_OVF_vect ; Note [7]
TIMER0_OVF_vect:
ldi inttmp, 256 - tmconst + fuzz
out _SFR_IO_ADDR(TCNT0), inttmp ; Note [8]
in intsav, _SFR_IO_ADDR(SREG) ; Note [9]
sbic _SFR_IO_ADDR(PORTD), SQUARE
rjmp 1f
sbi _SFR_IO_ADDR(PORTD), SQUARE
rjmp 2f
1: cbi _SFR_IO_ADDR(PORTD), SQUARE
Очень похоже на АСМ с Си, а не наоборот, думаю, этот вариант мне подойдет, попробую, по крайней мере...

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

Добавлено: Пт июн 04, 2010 07:55:29
ibiza11
вроде бы это асм. правда первая строчка немного смущает.я не пробовал использовать # вместо "." а сейчас нет возможности проверить.

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

Добавлено: Пт июн 04, 2010 08:19:05
ARV
ibiza11 писал(а):вроде бы это асм. правда первая строчка немного смущает.я не пробовал использовать # вместо "." а сейчас нет возможности проверить.
вроде бы это не CVAVR, а WinAVR, и, судя по всему, именно ассемблер. синтаксис текста характерен именно для ассемблерных модулей WinAVR, а так же опции с большим количеством дефисов - это в GCC принято (а для CVAVR вообще команданя строка определена где-нибудь?)

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

Добавлено: Чт июн 17, 2010 21:37:28
Shurf
Решил помигать светодиодом так:

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

//tiny2313
#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>   
int main (void) 
{
	DDRD  = 0x01;
   	for(;;)
	{ 
		PORTD += 1;
		_delay_ms(1000);
	}
   return 1;
}
При этом компилятор AVRStudio сказал:

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

Device: attiny2313

Program:      86 bytes (4.2% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)
Тогда я решил применить свои программерские навывки и написал так:

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

//tiny2313
#define F_CPU 4000000UL
#include <avr/io.h>
#include <util/delay.h>   
int main (void) 
{
	int count = 1;
	DDRD  = 0x01;
   	for(;;)
	{ 
		count++;
		if (count>=100) count=1;
		PORTD += 1;
		_delay_ms(10*count);
	}
   return 1;
}
На что компилятор показал свои компиляторские навыки:

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

AVR Memory Usage
----------------
Device: attiny2313

Program:    3668 bytes (179.1% Full)
(.text + .data + .bootloader)

Data:        264 bytes (206.3% Full)
(.data + .bss + .noinit)
Вот сижу и думаю - откуда?
Если убрать count++ то код опять становится маленьким.
Вот сижу и думаю - как грамотно сделать инкремент в программировании для МК? Что вообще не так?