Страница 4 из 9

Re: Генератор из arduino

Добавлено: Вс ноя 10, 2024 20:55:41
shonty
Что-то мне взгрустнулось :) решил проверить, как там в atmege8 с ACSR по дефолту:

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

	in R21, ACSR
	sts var, R21
....
; тут всякие инициализации..
....
....
	lds R21, var
	rcall PRINT_REGISTR
	rcall OUT_HEX_0
Вот что получилось:

Изображение

5-й бит N/A

Чуда не произошло :dont_know: :)

Добавлено after 31 minute 47 seconds:
ps: Почему-то иногда 4-й бит самопроизвольно устанавливается, рандомно..

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 01:19:29
Just_Fluffy
shonty, все по честному
Bit 4 – ACI: Analog Comparator Interrupt Flag
если выводы МК болтаются в воздухе - то компаратор ловит наводки и кидается туда-сюда рандомно

Добавлено after 1 minute 12 seconds:
Даже если их заземлить, то есть шанс, что одинаковые потенциалы тоже могут вводить компаратор в смущение. Хотя там должен же быть хоть минимальный гистерезис...

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 04:36:53
akl
Just_Fluffy писал(а):...Хотя там должен же быть хоть минимальный гистерезис...
Гистерезис не заявлен. Есть только Analog Comparator Input Offset Voltage <40mV у mega8A и <20mV у mega8.

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 10:26:37
Starichok51
Just_Fluffy, если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет.
а если компаратор используется, то на его выводы что-то подключено и навести на низкое сопротивление схемы такую помеху практически невозможно.
а также нет такой хаотической помехи, чтобы на рядом стоящие выводы наводить хаотическую противофазную помеху.

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 11:21:38
shonty
Starichok51 писал(а):если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет
В случае эксперимента он как раз по умолчанию включен (бит7=0). И ACSR я считывал в ОЗУ сразу после инициализации стёка. Возможно по этому бит флага прерывания и проскакивает, не часто, но бывает.
Может не на выводы наводки, а ещё какие процессы :dont_know:

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 11:56:22
Just_Fluffy
Starichok51 писал(а):если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет.
То, что он не используется - эт понятно. Но как раз его сработка от наводок света Венеры в атмосфере Марса и может давать хаотическое дерганье выхода компаратора. Речь же и шла у shonty про эксперимент.

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 12:36:55
Starichok51
ну и пусть его выход дергается - остальные биты остались выключены, и дергание ни на что не влияет.

Добавлено after 3 minutes 10 seconds:
я вот в своих проектах не выключаю компаратор. более того, у меня в некоторых проектах на входах компаратора висят кнопки, которые будут переключать компаратор.

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 12:48:43
BOB51
Зависит и от программы и от конкретной схемы (и последующей реализации той схемы в железе).
8)

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 13:16:46
Starichok51
я же сказал, что если программа не использует компаратор, то его включенное состояние ни на что не влияет, от слова "совсем".

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 13:43:44
akl
Кроме тока потребления.

Re: Генератор из arduino

Добавлено: Пн ноя 11, 2024 16:10:10
Starichok51
ток потребления компаратором влияет при питании от аккумулятора в состоянии полного сна.
у меня сделаны термометры, которые питаются от аккума и там я отключаю компаратор.
после ресета температура показывается 5 секунд и МК отправляется спать.

Re: Генератор из arduino

Добавлено: Вт авг 05, 2025 16:10:11
shev1975
Привет, нужен генератор на частоту 25.3 кГц, сваял на аттини25, при помощи визарда CVAVR настроил СТС на частоту вдвое больше, выбрал переключение по совпадению. Но не понял как получить противофазный сигнал на двух выходах OC0A и OC0B. Думал что можно настроить при инициализации один вывод в 1, а второй в 0, но фокус не удался.
Подскажите какой режим лучше использовать для моей цели? Или как получить противофазный сигнал? Сильно глубоко разбираться не охота, друг попросил ультразвуковую пищалку сделать, да и забуду я все это, но отмазаться не получается.
Спойлер#include <tiny25.h>

void main(void)
{

#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=1
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (1<<PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 8000,000 kHz
// Mode: CTC top=OCR0A
// OC0A output: Toggle on compare match
// OC0B output: Toggle on compare match
// Timer Period: 9,875 us
// Output Pulse(s):
// OC0A Period: 0,01975 ms Width: 9,875 us
// OC0B Period: 0,01975 ms Width: 9,875 us
TCCR0A=(0<<COM0A1) | (1<<COM0A0) | (0<<COM0B1) | (1<<COM0B0) | (1<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x4E;
OCR0B=0x4E;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Timer1 Overflow Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
PLLCSR=(0<<PCKE) | (0<<PLLE) | (0<<PLOCK);

TCCR1=(0<<CTC1) | (0<<PWM1A) | (0<<COM1A1) | (0<<COM1A0) | (0<<CS13) | (0<<CS12) | (0<<CS11) | (0<<CS10);
GTCCR=(0<<TSM) | (0<<PWM1B) | (0<<COM1B1) | (0<<COM1B0) | (0<<PSR1) | (0<<PSR0);
TCNT1=0x00;
OCR1A=0x00;
OCR1B=0x00;
OCR1C=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<<OCIE1A) | (0<<OCIE1B) | (0<<OCIE0A) | (0<<OCIE0B) | (0<<TOIE1) | (0<<TOIE0);

// External Interrupt(s) initialization
// INT0: Off
// Interrupt on any change on pins PCINT0-5: Off
GIMSK=(0<<INT0) | (0<<PCIE);
MCUCR=(0<<ISC01) | (0<<ISC00);

// USI initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC);

// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIS1) | (0<<ACIS0);
ADCSRB=(0<<ACME);
// Digital input buffer on AIN0: On
// Digital input buffer on AIN1: On
DIDR0=(0<<AIN0D) | (0<<AIN1D);

// ADC initialization
// ADC disabled
ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);

while (1)
{
}
}

Re: Генератор из arduino

Добавлено: Вт авг 05, 2025 17:04:28
Starichok51
строку
TCCR0A=(0<<COM0A1) | (1<<COM0A0) | (0<<COM0B1) | (1<<COM0B0) | (1<<WGM01) | (0<<WGM00);
заменить на
TCCR0A=(0<<COM0A1) | (1<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (0<<WGM00);
и выходы будут противофазные.

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 06:55:02
Denis82
взять что-то типа STM32G051C6T6 за 80р на али
там тебе и пару полноценных DAC и куча другой переферии
по DAC-ку stm-ок куча инфы, даже на русском

или не заставляй меня паять и думать ?

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 10:41:45
shev1975
Starichok51, это "Clear OC0B on compare match", т.е. сброс в 0 при совпадении. Выход должен как то устанавливаться, иначе он всегда будет в 0. С ШИМом я еще не разбирался, там есть как я понял возможность сделать выводы противофазными, но не понял (из своих экспериментов) достижима ли нужная мне частота, получалось все время на порядок ниже. В крайнем случае можно инвертором инвертировать :))
Denis82, Али труднодоступно, в Крым они на прямую не доставляют. СТМ не знакомая зараза в отличии от АВР, еще плюсом АВРки под ногами валяются, несколько сотен 25 тинек есть. Думать и паять всегда приветствуется, но сейчас такой период, что не удобно все это (жилище разрушено строителями), а друг наседает и отказать нельзя, да и задача весьма простая, частота + возможно пульсации.

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 11:03:13
roman.com
shev1975 писал(а):это "Clear OC0B on compare match", т.е. сброс в 0 при совпадении. Выход должен как то устанавливаться, иначе он всегда будет в 0.
если цитируете... то цитируйте до конца))

-"сброс при совпадении и установка при обновлении".
можно в противофазе.
-"установка при совпадении и сброс при обновлении".
Screenshot_1.jpg
(25.79 КБ) 68 скачиваний
:tea:

p.s.
странные у нас крымчане... никогда не читают до конца))

" Крым наш временно навсегда ! "

(нужное подчеркнуть)
:)))

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 11:28:15
Jack_A
По простоте своей - не догоняю: а для пищалки МК обязателен? На однои инверторе ЛА3 совсем не кошерно? Там противофаза сама по себе уже есть.
СпойлерВот для выключателя с задержкой в туалет в коридор думаю: мож всамделе МК вкорячить? Раз такая мода пошла... :shock:

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 11:32:57
roman.com
для пищалки хватит двух транзисторов.
или даже одного))
Но !
:roll:
Jack_A писал(а):а для пищалки МК обязателен?
МК обязателен.
надо управление с телефона / по интернету.
иначе совсем не кошерно.
:tea:

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 14:05:47
shev1975
roman.com, Вы ошибаетесь, в режиме СТС нет такого текста. В Режиме FPWM то ли я не разобрался как выставить нужную мне частоту, то ли не получается.
Jack_A, Возможно захочется реализовать еще какие то режимы, а как проще это сделать если не на МК, тем более у меня их несколько сотен валяется.

Re: Генератор из arduino

Добавлено: Ср авг 06, 2025 15:01:10
roman.com
чтобы просто пищало... таймеры не нужны.
достаточно просто включать и выключать любой порт.

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

_1:
PORTC.0=1;            // вкл.
delay_ms(1);
PORTC.0=0;            // выкл.
delay_ms(1);
goto _1;         // > _1
:tea:

зачем режим СТС... это переключение пина при переполнение таймера.
он скучный... там только частоту менять можно.
:sleep:

лучше режим FPWM...
там можно:
-менять частоту (ICR).
-менять скважность (OCR).
и всё независимо.
:)
будут дополнительные вау-эффекты))
:music: