Страница 3 из 4
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 16:00:38
veso74
А в 128 kHz (9,6 MHz / 1024) мой ATtiny13A запрограмировался, нормально мигает 1Hz, но отказывается принимать посл. запись. Верно, было несколько красных предупреждений ... Теперь фьюзы для медленной скорости? Необходим программатор высокого напряжения?
---
Эта конструкция помогла - несколько резисторов, в другая схема, код и в Serial ... и все в порядке с ATtiny13A:
Restauration des fuses AVR ATtiny avec un Arduino
https://o0tad0o.wordpress.com/2013/05/1 ... n-arduino/
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 17:21:15
DX168B
[uquote="ARV",url="/forum/viewtopic.php?p=4203692#p4203692"]не уверен, что таймер - это хорошее решение. для конкретного случая и описанных условий - да, но стоит только отказаться от нестабильного генератора WDT... и еще вопрос...[/uquote]
Встроенные генераторы прилично плавают по температуре. Особенно генератор WDT.
Сам однажды столкнулся с тем, что железка уходила в ребут по WDT, как только в помещении становилось холоднее.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 17:34:39
Карбофос
ARV писал(а):получить меандр 1,2 Гц или 2,73
В этом варианте можно задавать значение полупериода в миллисекундах, от 1 до 65535 мсек.
(2048 + 64) / ((182 + 2) * max(1, 1)/min(1, 1)) = 11,5
Спойлер
Код: Выделить всё
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/boot.h>
#define OUTPIN_MASK _BV(PB3)
#define HALF_PERIOD 500 // 500 ms, 1 Hz
// Timer/Counter Compare Match A
// Every 1 ms
ISR(TIM0_COMPA_vect)
{
static uint16_t cntr = 0;
if(++cntr >= HALF_PERIOD) {
PINB |= OUTPIN_MASK;
cntr = 0;
}
}
int main(void)
{
uint8_t prescaler = 0;
uint8_t f_low = boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS);
uint8_t f_cksel = ~(FUSE_CKSEL0 & FUSE_CKSEL1) & f_low;
switch(f_cksel) {
case (uint8_t)~(FUSE_CKSEL0 & FUSE_CKSEL1): // Internal 128 kHz Oscillator
// Fcpu clkIO/2 = 64 kHz
prescaler = _BV(CLKPS0);
// T = (64*(0+1)) / 64000 Hz = 1 ms
OCR0A = 0;
break;
case (uint8_t)~FUSE_CKSEL1: // 9.6 MHz
// Fcpu clkIO/2 = 4.8 MHz
prescaler = _BV(CLKPS0);
// continue in 4.8 MHz section
case (uint8_t)~FUSE_CKSEL0: // 4.8 MHz
// T = (64*(74+1)) / 4800000 Hz = 1 ms
OCR0A = 74;
break;
}
// prescaler
if(prescaler) {
CLKPR = _BV(CLKPCE);
CLKPR = prescaler;
}
// Timer0 CTC mode 2, Toggle OC0A on Compare Match
TCCR0A = _BV(COM0A0) | _BV(WGM01);
// Timer0 clkIO/64
TCCR0B = _BV(CS01) | _BV(CS00);
// Timer/Counter0 Output Compare Match A Interrupt Enable
TIMSK0 = _BV(OCIE0A);
// output
DDRB |= OUTPIN_MASK;
// enable interrupts
sei();
while(1) {
;
}
}
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 17:41:45
GoldenAndy
veso74, тактирование МК должно быть минимум в 4 раза быстрее, нежели клок при последовательном программировании.
при тактовой 128к частота программатора должна быть не больше 32кгц
Такая частота по умолчанию включается на USBAsp джампером LoSpeed. Ну и плюс там можно еще более низкую частоту выставлять - курите параметры дудки.
Единственное, на низких частотах вроде только фузы можно шить.
Т.е. на низкой частоте фузы поправить на нормальный клок. А потом уже на нормальной скорости лить прошивку.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 20:26:25
ARV
ну, вот я и добрался до протеуса...
мой код:
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRB |= 1;
while(1){
_delay_ms(500);
PINB |= 1;
}
}
размер:
AVR Memory Usage
----------------
Device: attiny13
Program: 18 bytes (1.8% Full)
(.text + .data + .bootloader)
Data: 0 bytes (0.0% Full)
(.data + .bss + .noinit)
насколько я смог в протеусе посмотреть, длительность полупериода ровно 500 мс. до идей
GoldenAndy было 24 байта...
в отличие от варианта на таймере мой вариант очень неплохо отрабатывает практически любую тактовую частоту без необходимости править хоть что-либо в коде, при этом размер получается почти идеальный.
Добавлено after 6 minutes 53 seconds:
более точные измерения показали, что мой код немножко привирает, на самом деле полупериод равен 501,128 мс
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 20:31:08
veso74
Да, и среди хороших моментов метода можно отметить и плохие: при вставке в цикл любого нового элемента логики, индикаторы точности времени становятся крайне неправильными (и нужен другой метод). Поэтому: с таймером: красиво, чисто и с предсказуемыми последствиями.

.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 20:43:09
ARV
veso74 писал(а):Поэтому: с таймером: красиво, чисто и с предсказуемыми последствиями.
ровно до тех пор, пока тактовая частота должна делиться кратно возможностям делителя таймера...
помнится, был у меня проект ультразвукового генератора с плавающей частотой от 25 до 45 кГц с парафазным выходом... интересно, какая сетка частот будет у вас сформирована таймером attiny13?
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 20:48:51
veso74
Mне не пришло бы в голову использовать ATtini13A для этого

. Eсть и другие MCU, напр. NCO в PIC напр. с dF нескольких Hz. А и DDS-чипы очень малобюджетны. Но сам метод, алгоритм, конечно, интересен.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 20:53:24
ARV
себестоимость генератора на attiny13 в ту пору, когда я его делал, была что-то вроде 2$, не считая высоковольтного трансформатора и пьезоизлучателя, т.е. МК, кнопки управления и push-pull каскад на транзисторах для раскачки трансформатора. любопытно было бы поглядеть на себестоимость в вашем случае с DDS или чем-то еще...
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 21:05:26
veso74
Оффтоп: AD9833 весь модуль был 1,29$ (сейчас вероятно в два раза дороже, но для меня как хобби: цена почти не имеет значения),
Код: Выделить всё
0 MHz to 12.5 MHz output frequency range
with a 25 MHz clock rate, resolution of 0.1 Hz can be achieved;
with a 1 MHz clock rate, the AD9833 can be tuned to 0.004 Hz resolution
и
Код: Выделить всё
Sinusoidal, triangular, and square wave outputs
Поколения в схемах разные, каждое в зависимости от использования.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 21:17:28
ARV
14 лет назад про такое и не слыхивал... к тому же этот чип без МК - ничто... так что его цена сверху упомянутых сумм.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 21:22:28
veso74
Ничего не продаю. Цена не имеет значение.
См. затем NCO (Numerically Controlled Oscillator) на PIC (даже в в отн. дешевом PIC16F18426). Но NCO на поколение ниже чем DDS.
Уст. NCO также из нескольких строках. Шаг: несколько Hz, в широком диапазоне частот.
А для многих видов деятельности неприменим (как параметри сигнала), а о PWM не говоря даже.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 22:12:20
GoldenAndy
ARV писал(а):более точные измерения показали, что мой код немножко привирает, на самом деле полупериод равен 501,128 мс
Это как раз издержки точности _delay_ms и нет учета времени инверсии бита и джампа в цикле. Я об этом писал.
А по поводу задач - ну каждая задача требует свое решение.
Тут сферический меандр в вакууме. Таймер - лучший и точный.
Если нужно что то с плавной регулировкой - то можно даже программный NCO, если устроит небольшой джиттер. Но там уже нужно сильно-сильно думать, как сдлать аккуратно. Возможно, даже на асме. Если мне не изменяет память - такой генератор делал Леонид Иванович Ридико (leoniv) для какого то из своих магнитофонов, когда кварцевал двигатель ведущего вала.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 23:01:28
ARV
таймер, как и любые иные методы, бывает лучшим только в определенных рамках условий и допущений. затевая это соревнование, я предполагал ограничить условия так, чтобы не было гарантированной однозначности решения. генерация 1 гц таймером при тактировании от 9,6 Мгц уже не дает ни выигрыша в размере, ни в точности... но я забыл о "кратном" генераторе ватчдога, и тем перечеркнул свою же идею... только и всего.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 23:07:22
astrahard
А как Вы думаете можно ли критерием сделать латентность?
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 23:39:26
GoldenAndy
ARV, В размере - не даст, наверное - тут надо смотреть. В точности - даст. Ибо в прерывании таймера будет выполняться один и тот же код. А прерывание будет выполняться четко по таймеру. Т.е. выход будет ровно 1 гц, но сдвинут на константное значение тактов от момента возникновения флага прерывания.
Может возникнуть джиттер в 1 такт из-за времени входа в прерывание, но тут я не буду утверждать, я не помню особенности перехода АВРок на вектор прерывания...Вроде бы зависит от того, какая инструкция выполнялась на момент возникновения флага прерывания.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Пт мар 25, 2022 23:45:11
Demiurg
Что-то конкурс нечестный какой-то. Задача. Меандр с частотой 1 Гц. Лично я бы сделал на аппаратном таймере, раз такая задача. И тут же переобуваются на ходу. Оказывается, ТС-у таймер неприемлем... Ну так и написал бы сразу в шапке. Таймер неприемлем.
Не пойму тогда цели конкурса...
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Сб мар 26, 2022 03:06:20
akl
[uquote="ARV",url="/forum/viewtopic.php?p=4203861#p4203861"]ну, вот я и добрался до протеуса...[/uquote]свои же условия не выполнены. [uquote="ARV",url="/forum/viewtopic.php?p=4203668#p4203668"]... низачот - нет коэффициента.
лирическое отступление: вот по-русски же написал, и все грамотные, всё поняли...[/uquote]
GoldenAndy писал(а):...зависит от того, какая инструкция выполнялась на момент возникновения флага прерывания.
Такая зависимость есть и устраняется SLEEP.
Для примера, генерация упомянутого здесь меандра частотой 2,73Гц с погрешностью в 6-м знаке после запятой.
Спойлер
Код: Выделить всё
;26.03.2022
.INCLUDE "tn13def.inc"
;.INCLUDE "tn13Adef.inc"
.equ Fo=9600000
;.equ Fo=1200000
.equ Fout=273 ; задаваемая частота на выходе *100
.CSEG
.ORG $000
RESET:
RJMP START
.ORG $006
T0_COMPA:
SBIW YL,1
BRCS COMPA_OUT
BRNE PC+2
OUT OCR0A,R17 ; длительность последнего интервала в полупериоде
RETI
COMPA_OUT:
SBI PINB,0
RET
;*******************
START:
SBI DDRB,0
GO:
LDI R17,(50*Fo/Fout-(50*Fo/Fout/128-1)*128-1)
LDI YH,HIGH(50*Fo/Fout/128-1)
LDI YL,LOW(50*Fo/Fout/128-1)
LDI R16,1<<SE
OUT MCUCR,R16
LDI R16,128-1
OUT OCR0A,R16
LDI R16,1<<WGM01
OUT TCCR0A,R16
LDI R16,1<<OCIE0A
OUT TIMSK0,R16
OUT TIFR0,R16
LDI R16,1<<CS00
OUT TCCR0B,R16
SEI
WAIT_05P:
SLEEP
BRIE WAIT_05P
RJMP GO
.EXIT
54 байта.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Сб мар 26, 2022 07:46:42
ARV
раз никто условия не выполнил, не выполнил и я.
Re: Соревнование "свободных художников" по мини-хелловорду
Добавлено: Сб мар 26, 2022 10:37:17
>TEHb<
ARV, если порт не переключать на выход, то можно ещё 2 байта срезать. Светодиод будет моргать за счёт внутреннего резистора подтяжки.