Соревнование "свободных художников" по мини-хелловорду

Обсуждаем контроллеры компании Atmel.
Ответить
akl
Друг Кота
Сообщения: 4447
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Подтяжку тоже нужно включать.
Реклама
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32

Сообщение Martian »

Соединить выход со входом reset, тогда весь код - задержка и переключение в режим выхода.
Контактная информация:
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1405
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

[quote="ARV",url="/forum/viewtopic.php?p=4203861#p4203861"]ну, вот я и добрался до протеуса...[/quote]
Makefile предоставьте.
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

Раз аппаратный таймер нельзя использовать, значит таймер надо перенести в основной цикл.
На частоте 9,6МГц частота таймера получается 369,235кГц, джиттер составит 1/369,235кГц 2,7083us.
Спойлер

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

#include <avr/io.h>

#define  n_counter  91

union BytByte {
struct {
uint16_t l;
uint8_t m;
unsigned char b0: 1;
} bit;
uint32_t byte;
}__attribute__((packed));

int main(){
static union BytByte myBByte;
	DDRB |= (1<<0);
  while(1){
	myBByte.byte += n_counter;  
	PORTB = myBByte.bit.b0;	
  }
}

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

avr-size firmware.elf
   text    data     bss     dec     hex filename
     68       0       4      72      48 firmware.elf
Добавлено after 43 minutes 13 seconds:
Вот думал, ну как бы судьбу обмануть
Спойлер

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

#include <avr/io.h>

#define  n_counter  35

union BytByte {
struct {
uint16_t h;
uint8_t hm;
unsigned char b0: 1;
} bit;
uint32_t byte;
}__attribute__((packed));

int main(){
//static union BytByte myBByte;
register union BytByte myBByte  asm("r6");
	DDRB |= (1<<0);
  while(1){
	myBByte.byte += n_counter;  
	PORTB = myBByte.bit.b0;	
  }
}

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

avr-size firmware.elf
   text    data     bss     dec     hex filename
     20       0       0      20      14 firmware.elf
9,6МГц 1Гц частота таймера 959.969кГц джиттер составит 1/959.969кГц 1,0417us
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

А с регистром OSСCAL еще никто не предлагал поиграться с целью скорректировать времянки итогового меандра?
Да, это плюс два байта к коду, но точность можно получить выше.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4447
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Раз уж используется тактирование от WDT, проверил возможность использования WDT в качестве интервального таймера.
Зарядил на формирование 0,5 сек. В реале период оказался >1,2 секунды.

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

.ORG $000
START:
GO:
	LDI	ZH,1<<WDTIF|1<<WDTIE|1<<WDCE|0<<WDE|1<<WDP2|1<<WDP0
	OUT	WDTCR,ZH
WAIT_500:
	SBI	DDRB,0

	IN	ZL,WDTCR
	SBRS	ZL,WDTIF
	RJMP	WAIT_500
	SBI	PINB,0
	RJMP	GO
.EXIT
Программное формирование интервала 0,5 сек показало, что частота генератора
WDT ~117300Гц. При задании такой частоты период составил 1'0000'18...1'000'119мкс

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

.equ	Fo=117300	;128000
Проверил работу программы с использованием таймера, подав 5'000'000,(0) от стандарта. Период составил 366300.2мкс, что соответствует частоте 2,730001Гц.

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

.equ	Fo=5000000	;стандарт частоты
Гораздо хуже от встроенного генератора 9,6МГц.
Реклама
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Сообщение Dimon456 »

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

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

#include <avr/io.h>

int main(){

	DDRB |= (1<<0);
  while(1){
asm volatile(
        "ldi 	r24, 0xe2 	\n\t"
		"ldi 	r25, 0xee 	\n\t"
		"ldi 	r26, 0x30 	\n\t"
        "add	r4,r24  	\n\t"
        "adc 	r5,r25		\n\t"
        "adc 	r6,r26		\n\t"
		"adc 	r7,r1		\n\t"
		"adc 	r8,r1		\n\t"
		"adc 	r9,r1		\n\t"

		"mov 	r24,r9		\n\t"
		"andi 	r24,0x01	\n\t"
		"out 	0x18,r24	\n\t"
);
  }
}

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

avr-size firmware.elf
   text    data     bss     dec     hex filename
     28       0       0      28      1c firmware.elf
и сам протеус с hex файлом
gen2.zip
(31.32 КБ) 18 скачиваний
Ответить

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