Страница 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
TEST_TN13.hex
(203 байт) 92 скачивания
54 байта.

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

Добавлено: Сб мар 26, 2022 07:46:42
ARV
раз никто условия не выполнил, не выполнил и я.

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

Добавлено: Сб мар 26, 2022 10:37:17
>TEHb<
ARV, если порт не переключать на выход, то можно ещё 2 байта срезать. Светодиод будет моргать за счёт внутреннего резистора подтяжки.