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

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение 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/
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

[uquote="ARV",url="/forum/viewtopic.php?p=4203692#p4203692"]не уверен, что таймер - это хорошее решение. для конкретного случая и описанных условий - да, но стоит только отказаться от нестабильного генератора WDT... и еще вопрос...[/uquote]
Встроенные генераторы прилично плавают по температуре. Особенно генератор WDT.
Сам однажды столкнулся с тем, что железка уходила в ребут по WDT, как только в помещении становилось холоднее.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

Сообщение Карбофос »

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) {
    ;
  }
}
Вложения
1Hz_v2.zip
(5.14 КБ) 96 скачиваний
Последний раз редактировалось Карбофос Пт мар 25, 2022 21:40:48, всего редактировалось 1 раз.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

veso74, тактирование МК должно быть минимум в 4 раза быстрее, нежели клок при последовательном программировании.
при тактовой 128к частота программатора должна быть не больше 32кгц
Такая частота по умолчанию включается на USBAsp джампером LoSpeed. Ну и плюс там можно еще более низкую частоту выставлять - курите параметры дудки.
Единственное, на низких частотах вроде только фузы можно шить.
Т.е. на низкой частоте фузы поправить на нормальный клок. А потом уже на нормальной скорости лить прошивку.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение 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 мс
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Да, и среди хороших моментов метода можно отметить и плохие: при вставке в цикл любого нового элемента логики, индикаторы точности времени становятся крайне неправильными (и нужен другой метод). Поэтому: с таймером: красиво, чисто и с предсказуемыми последствиями. :).
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

veso74 писал(а):Поэтому: с таймером: красиво, чисто и с предсказуемыми последствиями.
ровно до тех пор, пока тактовая частота должна делиться кратно возможностям делителя таймера...

помнится, был у меня проект ультразвукового генератора с плавающей частотой от 25 до 45 кГц с парафазным выходом... интересно, какая сетка частот будет у вас сформирована таймером attiny13?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Mне не пришло бы в голову использовать ATtini13A для этого :). Eсть и другие MCU, напр. NCO в PIC напр. с dF нескольких Hz. А и DDS-чипы очень малобюджетны. Но сам метод, алгоритм, конечно, интересен.
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

себестоимость генератора на attiny13 в ту пору, когда я его делал, была что-то вроде 2$, не считая высоковольтного трансформатора и пьезоизлучателя, т.е. МК, кнопки управления и push-pull каскад на транзисторах для раскачки трансформатора. любопытно было бы поглядеть на себестоимость в вашем случае с DDS или чем-то еще...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение 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
Поколения в схемах разные, каждое в зависимости от использования.
Вложения
ad9833.jpg
(21.21 КБ) 60 скачиваний
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

14 лет назад про такое и не слыхивал... к тому же этот чип без МК - ничто... так что его цена сверху упомянутых сумм.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Поставщик валерьянки для Кота
Сообщения: 1916
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария

Сообщение veso74 »

Ничего не продаю. Цена не имеет значение.
См. затем NCO (Numerically Controlled Oscillator) на PIC (даже в в отн. дешевом PIC16F18426). Но NCO на поколение ниже чем DDS.
Уст. NCO также из нескольких строках. Шаг: несколько Hz, в широком диапазоне частот.
А для многих видов деятельности неприменим (как параметри сигнала), а о PWM не говоря даже.
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

ARV писал(а):более точные измерения показали, что мой код немножко привирает, на самом деле полупериод равен 501,128 мс
Это как раз издержки точности _delay_ms и нет учета времени инверсии бита и джампа в цикле. Я об этом писал.

А по поводу задач - ну каждая задача требует свое решение.
Тут сферический меандр в вакууме. Таймер - лучший и точный.
Если нужно что то с плавной регулировкой - то можно даже программный NCO, если устроит небольшой джиттер. Но там уже нужно сильно-сильно думать, как сдлать аккуратно. Возможно, даже на асме. Если мне не изменяет память - такой генератор делал Леонид Иванович Ридико (leoniv) для какого то из своих магнитофонов, когда кварцевал двигатель ведущего вала.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

таймер, как и любые иные методы, бывает лучшим только в определенных рамках условий и допущений. затевая это соревнование, я предполагал ограничить условия так, чтобы не было гарантированной однозначности решения. генерация 1 гц таймером при тактировании от 9,6 Мгц уже не дает ни выигрыша в размере, ни в точности... но я забыл о "кратном" генераторе ватчдога, и тем перечеркнул свою же идею... только и всего.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1405
Зарегистрирован: Чт фев 19, 2015 12:41:04

Сообщение astrahard »

А как Вы думаете можно ли критерием сделать латентность?
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1925
Зарегистрирован: Чт июл 28, 2016 07:58:37
Откуда: Kyiv, UA

Сообщение GoldenAndy »

ARV, В размере - не даст, наверное - тут надо смотреть. В точности - даст. Ибо в прерывании таймера будет выполняться один и тот же код. А прерывание будет выполняться четко по таймеру. Т.е. выход будет ровно 1 гц, но сдвинут на константное значение тактов от момента возникновения флага прерывания.
Может возникнуть джиттер в 1 такт из-за времени входа в прерывание, но тут я не буду утверждать, я не помню особенности перехода АВРок на вектор прерывания...Вроде бы зависит от того, какая инструкция выполнялась на момент возникновения флага прерывания.
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]
Контактная информация:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Что-то конкурс нечестный какой-то. Задача. Меандр с частотой 1 Гц. Лично я бы сделал на аппаратном таймере, раз такая задача. И тут же переобуваются на ходу. Оказывается, ТС-у таймер неприемлем... Ну так и написал бы сразу в шапке. Таймер неприемлем.
Не пойму тогда цели конкурса...
Контактная информация:
akl
Друг Кота
Сообщения: 4447
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение 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 байта.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18676
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 5750
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж

Сообщение >TEHb< »

ARV, если порт не переключать на выход, то можно ещё 2 байта срезать. Светодиод будет моргать за счёт внутреннего резистора подтяжки.
"Привет!" - соврал он.
Контактная информация:
Ответить

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