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

Обсуждаем контроллеры компании Atmel.
Ответить
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение 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-й бит самопроизвольно устанавливается, рандомно..
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 551
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

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

Добавлено after 1 minute 12 seconds:
Даже если их заземлить, то есть шанс, что одинаковые потенциалы тоже могут вводить компаратор в смущение. Хотя там должен же быть хоть минимальный гистерезис...
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Реклама
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Just_Fluffy писал(а):...Хотя там должен же быть хоть минимальный гистерезис...
Гистерезис не заявлен. Есть только Analog Comparator Input Offset Voltage <40mV у mega8A и <20mV у mega8.
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

Just_Fluffy, если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет.
а если компаратор используется, то на его выводы что-то подключено и навести на низкое сопротивление схемы такую помеху практически невозможно.
а также нет такой хаотической помехи, чтобы на рядом стоящие выводы наводить хаотическую противофазную помеху.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Сообщение shonty »

Starichok51 писал(а):если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет
В случае эксперимента он как раз по умолчанию включен (бит7=0). И ACSR я считывал в ОЗУ сразу после инициализации стёка. Возможно по этому бит флага прерывания и проскакивает, не часто, но бывает.
Может не на выводы наводки, а ещё какие процессы :dont_know:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 551
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

Starichok51 писал(а):если выводы МК болтаются в воздухе - то компаратор не используется и его выход ни на что не влияет.
То, что он не используется - эт понятно. Но как раз его сработка от наводок света Венеры в атмосфере Марса и может давать хаотическое дерганье выхода компаратора. Речь же и шла у shonty про эксперимент.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Реклама
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

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

Добавлено after 3 minutes 10 seconds:
я вот в своих проектах не выключаю компаратор. более того, у меня в некоторых проектах на входах компаратора висят кнопки, которые будут переключать компаратор.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Зависит и от программы и от конкретной схемы (и последующей реализации той схемы в железе).
8)
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

я же сказал, что если программа не использует компаратор, то его включенное состояние ни на что не влияет, от слова "совсем".
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
akl
Друг Кота
Сообщения: 4450
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Кроме тока потребления.
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

ток потребления компаратором влияет при питании от аккумулятора в состоянии полного сна.
у меня сделаны термометры, которые питаются от аккума и там я отключаю компаратор.
после ресета температура показывается 5 секунд и МК отправляется спать.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Сообщение 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)
{
}
}
Модератор
Аватара пользователя
Сообщения: 19060
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение 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);
и выходы будут противофазные.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Встал на лапы
Сообщения: 141
Зарегистрирован: Вс авг 23, 2015 08:14:05

Сообщение Denis82 »

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

или не заставляй меня паять и думать ?
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Сообщение shev1975 »

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

Сообщение roman.com »

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

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

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

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

(нужное подчеркнуть)
:)))
Друг Кота
Аватара пользователя
Сообщения: 6324
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

По простоте своей - не догоняю: а для пищалки МК обязателен? На однои инверторе ЛА3 совсем не кошерно? Там противофаза сама по себе уже есть.
СпойлерВот для выключателя с задержкой в туалет в коридор думаю: мож всамделе МК вкорячить? Раз такая мода пошла... :shock:
Изображение
Друг Кота
Сообщения: 9233
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

для пищалки хватит двух транзисторов.
или даже одного))
Но !
:roll:
Jack_A писал(а):а для пищалки МК обязателен?
МК обязателен.
надо управление с телефона / по интернету.
иначе совсем не кошерно.
:tea:
Грызет канифоль
Аватара пользователя
Сообщения: 287
Зарегистрирован: Чт апр 02, 2009 17:46:04
Откуда: Крым

Сообщение shev1975 »

roman.com, Вы ошибаетесь, в режиме СТС нет такого текста. В Режиме FPWM то ли я не разобрался как выставить нужную мне частоту, то ли не получается.
Jack_A, Возможно захочется реализовать еще какие то режимы, а как проще это сделать если не на МК, тем более у меня их несколько сотен валяется.
Друг Кота
Сообщения: 9233
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Сообщение roman.com »

чтобы просто пищало... таймеры не нужны.
достаточно просто включать и выключать любой порт.

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

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

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

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

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