Соревнование "свободных художников" по мини-хелловорду
Re: Соревнование "свободных художников" по мини-хелловорду
Подтяжку тоже нужно включать.
- Реклама
Re: Соревнование "свободных художников" по мини-хелловорду
Соединить выход со входом reset, тогда весь код - задержка и переключение в режим выхода.
Re: Соревнование "свободных художников" по мини-хелловорду
[quote="ARV",url="/forum/viewtopic.php?p=4203861#p4203861"]ну, вот я и добрался до протеуса...[/quote]
Makefile предоставьте.
Makefile предоставьте.
Re: Соревнование "свободных художников" по мини-хелловорду
Раз аппаратный таймер нельзя использовать, значит таймер надо перенести в основной цикл.
На частоте 9,6МГц частота таймера получается 369,235кГц, джиттер составит 1/369,235кГц 2,7083us.
Добавлено after 43 minutes 13 seconds:
Вот думал, ну как бы судьбу обмануть9,6МГц 1Гц частота таймера 959.969кГц джиттер составит 1/959.969кГц 1,0417us
На частоте 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Вот думал, ну как бы судьбу обмануть
Спойлер
Код: Выделить всё
#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- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Соревнование "свободных художников" по мини-хелловорду
А с регистром OSСCAL еще никто не предлагал поиграться с целью скорректировать времянки итогового меандра?
Да, это плюс два байта к коду, но точность можно получить выше.
Да, это плюс два байта к коду, но точность можно получить выше.
I am DX168B and this is my favourite forum on internet!
- Реклама
Re: Соревнование "свободных художников" по мини-хелловорду
Раз уж используется тактирование от WDT, проверил возможность использования WDT в качестве интервального таймера.
Зарядил на формирование 0,5 сек. В реале период оказался >1,2 секунды.
Программное формирование интервала 0,5 сек показало, что частота генератора
WDT ~117300Гц. При задании такой частоты период составил 1'0000'18...1'000'119мкс
Проверил работу программы с использованием таймера, подав 5'000'000,(0) от стандарта. Период составил 366300.2мкс, что соответствует частоте 2,730001Гц.
Гораздо хуже от встроенного генератора 9,6МГц.
Зарядил на формирование 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
WDT ~117300Гц. При задании такой частоты период составил 1'0000'18...1'000'119мкс
Код: Выделить всё
.equ Fo=117300 ;128000Код: Выделить всё
.equ Fo=5000000 ;стандарт частотыRe: Соревнование "свободных художников" по мини-хелловорду
Ни знаю что там в реале, речь шла про протеус, и вот насколько точно можно было бы сделать в протеусе и сам протеус с hex файлом
Спойлер
Код: Выделить всё
#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

