Jump to content
Sign in to follow this  
strengerst

Микроконтролер Зависет Attyni13A

Recommended Posts

Написал простенький код для хлопкового переключателя, собрал схему все работает но не долго и каждый раз разное время то 5 то 7 минут а потом ступор на хлопки перестает реагировать. Подскажите в чем может быть причина, такое чувства что память переполняется и он просто зависает. Вот код:

.include "tn13def.inc";
//Переименованные регистра
.def PINT=R24; //R24 переименовуем в VECTORPCINT
.def TIMEA=R25;
.list;
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
exit: rjmp N0;
.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

/*Код установки таймера счетчика*/
TIME0RIN:
ldi R16, 0x00;// Сбрасываем все флаги таймера
out TIFR0, R16;
ldi R16, (1<<OCIE0A);Установка по совпадению с А;
out TIMSK0, R16;
ldi R16, 0xFF; Устанавливаем значение при совпадении с А
out OCR0A, R16;
ldi R16, (1<<CS02)|(0<<CS01)|(1<<CS00);
out TCCR0B, R16;
rjmp start;
/*Основной код начало программы*/
N0:
cli; ЗАПРЕOFTV ГЛОБАЛЬНЫЕ ПРЕРЫВАНИЯ перед установкой параметров
//инициализация стэка.(установка максимально размера ОЗУ);
ldi R17, RAMEND;
out SPL, R17;
//Установка предделителя частоты тактового сигнала Устанавляваем деление на 8 что бы не перегревать процесор.
ldi R16, (1<<CLKPCE)|(0<<CLKPS1)|(0<<CLKPS0);
out CLKPR, R16;
ldi R16, (0<<CLKPCE);
out CLKPR, R16;
////Запрет прерывания от компаратора перед его отключением ;
//Команда сбрасывает значение в 0 регистра ACSR ячейки ACIE;
CBI ACSR, ACIE;
//Отключение компаратора
////Команда устанавливает значение в 1 регистра ACSR ячейки ASD;
SBI ACSR, ACD;
///Выбераем режим срабатывания по PCMSK
ldi R16, (1<<PCIF);
out GIFR, R16; ..Скидываем флаг прерывания если он установлен.
ldi R16, (1<<PCIE);
out GIMSK, R16;
//Выбираем режим срабатывания по нарастающему фронту
ldi R16, (1<<ISC01)|(1<<ISC00);
out MCUCR, R16;
//Выбираем ножку микроконтролера
ldi R16, (1<<PCINT1);
out PCMSK, R16;
//Обнулям занечния наших переменых
CLR ZH;
mov pint, ZH;
mov timea, ZH;

//Устанавливаем работу некоторых ножек порта как на выход.
ldi R16, (1<<DDB4)|(0<<DDB1)|(1<<DDB0);
out DDRB, R16;
//Подключаем подтягивающия резистр к ножке микроконтролера
ldi R16,(1<<PORTB1);
out PORTB, R16;
N1:
//Оключаем работу таймера
ldi R16, (0<<CS02)|(0<<CS01)|(0<<CS00);
out TCCR0B, R16;
sei;//Разрешаем глобальные прерывания
//Скидываем в 0 значение переменых PINT, TIMEA;
mov PINT, ZH;
mov TIMEA, ZH;
// MCUCR ячейки SE-Бит разрешения спящего режима;
// Выбираем режим POWER DOWN, битами SM1 и SM0;
ldi R16, (1<<SE)|(1<<SM1)|(0<<SM0);
out MCUCR, R16;
sleep;
//Отключаем разрешение перехода в спящий режим
ldi R16, (0<<SE);
out MCUCR, R16;
//При первом включении микроконтролера выставлям начальные параметры в метки N0;
start:
wdr; //сбрасываем сторожевой таймер
ldi R16, 0;
//сравнение двух переменных и если они равны то пропуск следующей команды
cpse R16, pint;
rjmp PC+0x02;
rjmp start;
//если сроботало прерывание (поступил перый хлопок pint=1)
ldi R16, 1;
cpse R16, pint;
rjmp PC+0x05; если pint не равно 1 то переходим на 5 позиции в низ.
inc pint; прибавляем 1 что бы больше сюда не заходить.
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
rjmp TIME0RIN;
/*По прошествию 2 секунд после первого прерывания подключаем глобальное прерывание */
ldi R16, 10;
cpse R16, timea;
rjmp PC+0x14;
ldi R16, 2;
cpse R16, PINT;
rjmp PC+0x11;
inc timea;
ldi R16, (1<<PCIF); скидываем флаг прерывания
out GIFR,R16;
ldi R16, (1<<PCIE); потключаем внешнее прерывания PCINT
out GIMSK,R16;
ldi R16, 0x81; скидываем таймер счетчик
out GTCCR, R16;
ldi R16, 0x00; скидываем таймер счетчик
out GTCCR, R16;
ldi R16, 3;
mov PINT, R16;
ldi R16, 0;
mov timea, R16;
nop;
nop;
sei;
/*Уходим в режим sleep если второй хлопок не поступил по прошествию 5 секунд*/
ldi R16, 120;
cpse R16, timea;
rjmp PC+0x07;
ldi R16, 3;
cpse R16, pint;
rjmp PC+0x04;
nop;
nop;
rjmp N1;

/*Если второй хлопок поступил*/
ldi R16, 4;
cpse R16, pint;
rjmp PC+0x08;
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0;
mov timea, R16;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;
/*Выжидаем одну секунду и подключаем внешнее прерывание*/
ldi R16, 10;
cpse R16, timea;
rjmp PC+0x0D;
ldi R16, 5;
cpse pint, R16;
rjmp PC+0x0A;
ldi R16, (1<<PCIF); скидываем флаг прерывания
out GIFR,R16;
ldi R16, (1<<PCIE); потключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;
ldi R16, 0;
mov timea, R16;
/*Если поступил третий хлопок в течении 2сек нечего не включаем и идем спать */
ldi R16, 60;
cpse R16, timea;
rjmp PC+0x05;
ldi R16, 7;
cpse R16, pint;
rjmp PC+0x02;
rjmp N1;
/*Если третий хлопок не поступил в течении 2сек подключаем пин PORTB2 */
ldi R16, 60;
cpse R16, timea;
rjmp PC+0x09;
ldi R16, 6;
cpse R16, pint;
rjmp PC+0x06;
ldi R16, (1<<PORTB4);
in R17, PORTB;
eor R16, R17;
out PORTB,R16;
rjmp N1;
rjmp start;

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Какое внешнее прерывание вы используете на PB1 - INT0 или PCINT1. А то сложно что-то сказать не зная идею.

Во время инициализации вы настраиваете прерывание по восходящему фронту INT0. Прерывания PCINT работают по обоим перепадам (один режим). Обработчик прерывания у вас выбран PCINT

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

Share this post


Link to post
Share on other sites

Вебинар «Практическое использование TrustZone в STM32L5»(10.12.2020)

Приглашаем на вебинар, посвященный экосистеме безопасности и возможностях, которые появились у разработчиков благодаря новой технологии TrustZone в микроконтроллерах STM32L5. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

Ну вот же в коде написано

///Выбераем режим срабатывания по PCMSK
ldi R16, (1<<PCIF);
out GIFR, R16; ..Скидываем флаг прерывания если он установлен.
ldi R16, (1<<PCIE);
out GIMSK, R16;
//Выбираем режим срабатывания по нарастающему фронту
ldi R16, (1<<ISC01)|(1<<ISC00);
out MCUCR, R16;
//Выбираем ножку микроконтролера
ldi R16, (1<<PCINT1);
out PCMSK, R16;

А вообще работа следующая, когда на ножку микроконтроллера приходит сигнал, которым является хлопок, передающийся через микрофон и усилитель, у нас срабатывает прерывание в котором происходит увлечение на один переменной PINT, в коде везде есть сравнение этой переменой с разными значениями суть которых определяет работу определенного участка кода, заданного значение, где совпадает с переменой PINT. а также значения таймера которые записываются в переменную timea что дает нам возможность производить задержку по времени и учитывать длительность хлопков. Так если хлопнуть три раза значение переменой PINT превысит допустимое и микроконтроллер уснет при это все параметры обнулим и при следующем хлопке счет начнется заново. А если один хлопок, то по истечению промежутка времени у нас в коде

/*Уходим в режим sleep если второй хлопок не поступил по прошествию 5 секунд*/
ldi R16, 120;
cpse R16, timea;
rjmp PC+0x07;
ldi R16, 3;
cpse R16, pint;
rjmp PC+0x04;
nop;
nop;
rjmp N1;

который сравнивает количество прерываний по времени с переменой timea.

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

Вы это сами "изобретали" или "сдернули" откуда-то?

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

Share this post


Link to post
Share on other sites

Снижена цена на AC/DC и DC/DC преобразователи Mornsun в Компэл!

Компэл и компания Mornsun снизили цены на преобразователи AC/DC-преобразователи семейств LS и LDE. По привлекательной цене также предлагаются DC/DC-преобразователи изолированных семейств поколений R2 и R3 различного конструктивного исполнения.

Подробнее

Тогда объясните кто Вас учил использовать безусловные переходы типа rjmp PC+0x.., вместо rjmp {имя метки}. Вроде Вы и метки используете, но категорически отказываетесь их применять при переходах. Кстати, есть еще кучка условных переходов, применение которых позволяет создавать более читабельный и понятный листинг, чем пропуск команды при равенстве регистров.

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

Share this post


Link to post
Share on other sites

Материалы вебинара: «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)»

Вы можете посмотреть видеозапись вебинара «Силовые компоненты Wolfspeed на основе карбида кремния (SiC)», ознакомиться с ответами на вопросы и презентацией, в которой вы найдете много полезных ссылок, в том числе подробнее раскрывающих ответы на вопросы.

Подробнее

Повторяюсь ещё раз

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

Это для прерывания по INT0. Вы же используете прерывание PCINT. PCINT не имеет возможности настройки по фронту/по спаду/по любому перепаду/или по низкому уровню. Эта настройка доступна только для INT0. PCINT может только - по любому перепаду на ноге. То есть когда вы хлопнули один раз вы два раза попали в прерывание (по фронту и по спаду), когда хлопаете 3 раза соответственно 6 раз в прерывание.Если вы хотите инкрементировать только по фронту, то попадая в прерывание проверяйте состояние входа а потом инкрементируйте.

Share this post


Link to post
Share on other sites

Обратите внимание на это место:

.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

Share this post


Link to post
Share on other sites

Повторяюсь ещё раз

//Выбираем режим срабатывания по нарастающему фронту

ldi R16, (1<<ISC01)|(1<<ISC00);

out MCUCR, R16;

Это для прерывания по INT0. Вы же используете прерывание PCINT. PCINT не имеет возможности настройки по фронту/по спаду/по любому перепаду/или по низкому уровню. Эта настройка доступна только для INT0. PCINT может только - по любому перепаду на ноге. То есть когда вы хлопнули один раз вы два раза попали в прерывание (по фронту и по спаду), когда хлопаете 3 раза соответственно 6 раз в прерывание.Если вы хотите инкрементировать только по фронту, то попадая в прерывание проверяйте состояние входа а потом инкрементируйте.

Это правильное замечание но на код оно не влияет так как после первого хлопка у нас срабатывает прерывания по высокому фронту и что бы мы не попадали в прерывания по низкому фронту в коде после первого прерывания отключаются прерывания по PCINT до окончания действия таймера а потом опять подключаем прерывания и ждем второй хлопок. Это исключает возможность двойного попадания в прерывания. Почему PCINT а не INT0 потому что нога отведеная под INT0 расположения микроконтроллера находиться не в удобном для моей схемы места.

//если сроботало прерывание (поступил перый хлопок pint=1)
ldi R16, 1;
cpse R16, pint;
rjmp PC+0x05; если pint не равно 1 то переходим на 5 позиции в низ.
inc pint; прибавляем 1 что бы больше сюда не заходить.
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
rjmp TIME0RIN;/*Если второй хлопок поступил*/
ldi R16, 4;
cpse R16, pint;
rjmp PC+0x08;
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
inc pint;
ldi R16, 0;
mov timea, R16;
ldi R16, 0x00; скидываем таймер счетчик
out TCNT0, R16;

Обратите внимание на это место:

.org 2
/*Код прерывания по выводам PCINT*/
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
.org 6
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;

Учту ваше замечание и попробую переделать. Вот так вроде бы должно быть

.include "tn13def.inc";
//Переименованные регистра
.def PINT=R24; //R24 переименовуем в VECTORPCINT
.def TIMEA=R25;
.list;
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
rjmp N0; Reset Handler
rjmp N0 ; IRQ0 Handler
rjmp PCINT0Z ; PCINT0 Handler
rjmp N0 ; Timer0 Overflow Handler
rjmp N0; EEPROM Ready Handler
rjmp N0; Analog Comparator Handler
rjmp TIM0_COMPA ; Timer0 CompareA Handler
rjmp N0; Timer0 CompareB Handler
rjmp N0; Watchdog Interrupt Handler
rjmp N0; ADC Conversion Handler


/*Код прерывания по выводам PCINT*/
PCINT0Z:
in R20, SREG;
inc PINT;
out SREG, R20;
reti;
/*Код прерывания по совпадению с таймером значения А*/
TIM0_COMPA:
in R20, SREG;
INC TIMEA;
out SREG, R20;
reti;


/*Код установки таймера счетчика*/
TIME0RIN:
ldi R16, 0x00;// Сбрасываем все флаги таймера
out TIFR0, R16;
ldi R16, (1<<OCIE0A);Установка по совпадению с А;
out TIMSK0, R16;
ldi R16, 0xFF; Устанавливаем значение при совпадении с А
out OCR0A, R16;
ldi R16, (1<<CS02)|(0<<CS01)|(1<<CS00);
out TCCR0B, R16;
rjmp start;
/*Основной код начало программы*/

N0:
cli; ЗАПРЕOFTV ГЛОБАЛЬНЫЕ ПРЕРЫВАНИЯ перед установкой параметров
//инициализация стэка.(установка максимально размера ОЗУ);
ldi R17, RAMEND;
out SPL, R17;

Edited by strengerst

Share this post


Link to post
Share on other sites

На какой частоте работает МK, если 1,2 то с момента первого фронта до отключения прерывания проходит 24 мкСек. И как насчёт импульсных помех. Да и по поводу предыдущих моих цитат вашего кода. Если кусок кода просто есть и не выполняет ничего то не лучше ли его выкинуть отредактировав. Чтоб читающие ваш код не спотыкались об уже оговорённое. Какое питание у вашего Мк (имею в виду стабилизатор линейный/импульсный) У меня были случаи зависания МК при линейном стабилизаторе( атмега8 и тини13 даже wdr не помагал), менял на импульсный и проблема исчезала.

Share this post


Link to post
Share on other sites

Здравствуйте, хотелось бы сразу отбросить аппаратные вопросы.

1. У вас стоит конденсатор между выводами питания контроллера (непосредственно около них, а не где-нибудь за 20 см)? Если нет, то причина зависания может быть именно в этом.

2. У вас контроллер управляет мощной нагрузкой, которая питается от того же источника питания что и контроллер? Если да, то тогда следует развязать питание при помощи диода и электролитического конденсатора, я имею ввиду возможные просадки напряжения при включении мощной нагрузки, которые могут приводить к зависанию контроллера.

Share this post


Link to post
Share on other sites

На какой частоте работает МK, если 1,2 то с момента первого фронта до отключения прерывания проходит 24 мкСек. И как насчёт импульсных помех. Да и по поводу предыдущих моих цитат вашего кода. Если кусок кода просто есть и не выполняет ничего то не лучше ли его выкинуть отредактировав. Чтоб читающие ваш код не спотыкались об уже оговорённое. Какое питание у вашего Мк (имею в виду стабилизатор линейный/импульсный) У меня были случаи зависания МК при линейном стабилизаторе( атмега8 и тини13 даже wdr не помагал), менял на импульсный и проблема исчезала.

В настройках fuses стоит 9,6MHz и также fuses ставлю СLKDIV8 что в суме дает нам частоту 9,6/8=1,2 MHz Как вы вычислили 24 мкСек ? очень интересно. Питание от линейного стабилизатора точнее микросхемы 7805. Вот схема подключения http://savepic.ru/9527162.htm

Стоит попробовать от импульсного запитать, но все схемы с импульсным питанием такие громоздкие :(

Здравствуйте, хотелось бы сразу отбросить аппаратные вопросы.

1. У вас стоит конденсатор между выводами питания контроллера (непосредственно около них, а не где-нибудь за 20 см)? Если нет, то причина зависания может быть именно в этом.

2. У вас контроллер управляет мощной нагрузкой, которая питается от того же источника питания что и контроллер? Если да, то тогда следует развязать питание при помощи диода и электролитического конденсатора, я имею ввиду возможные просадки напряжения при включении мощной нагрузки, которые могут приводить к зависанию контроллера.

1. С7 на 0,1 мкф стоит возле микроконтроллера при запитывании от 7805.

2. Контролер управляет симистором. через который проходит нагрузка которая питается от другова источника. Вот схема http://savepic.ru/9527162.htm

Edited by strengerst

Share this post


Link to post
Share on other sites

Почему питание МК идет через резистор? Ляп?

Ограничение по току. В даташите max 200mA , но я ограничил до 50mA. 5/100=0.05А.

Share this post


Link to post
Share on other sites

Так в том то и проблема, что ограничивать ток по питанию не нужно (микроконтроллер сам возьмет столько, сколько ему нужно), а вот ограничивать ток по выходам (например по выходу контроллера, который управляет симистором) нужно. В результате у вас получается что при открывании симистора (предположим что вам необходим ток 20 мА) Происходит просадка напряжения до 3 вольт, в результате контроллер начинает глючить (причем проблема именно не в том что напряжение опускается до 3 вольт, контроллер и при 3 вольтах может работать, а в самом факте просадок, когда во время просадки при записи информации в регистры, она может быть повреждена или возникающий перепад может спровоцировать срабатывание внешнего прерывания).

Share this post


Link to post
Share on other sites

Так в том то и проблема, что ограничивать ток по питанию не нужно (микроконтроллер сам возьмет столько, сколько ему нужно), а вот ограничивать ток по выходам (например по выходу контроллера, который управляет симистором) нужно. В результате у вас получается что при открывании симистора (предположим что вам необходим ток 20 мА) Происходит просадка напряжения до 3 вольт, в результате контроллер начинает глючить (причем проблема именно не в том что напряжение опускается до 3 вольт, контроллер и при 3 вольтах может работать, а в самом факте просадок, когда во время просадки при записи информации в регистры, она может быть повреждена или возникающий перепад может спровоцировать срабатывание внешнего прерывания).

Хорошое замечание я и не думал о просадки напряжения при открытие. Надеюсь это поможет устранить глюки. Меня смущал тот факт что сама микра работала исправно в начале. а лишь через промежуток времени зависало попробую переделать схему.

Так правильно будет? http://savepic.ru/9537168.png

Вариант управления симистором http://www.microchip...pport/dimm.html

Очень полезная статья спасибо как раз в тему.

Edited by strengerst

Share this post


Link to post
Share on other sites

Как вы вычислили 24 мкСек ?

Кинул ваш код в AVRStudio и посмотрел. С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек

Share this post


Link to post
Share on other sites

Большое всем спасибо за уделенное время и внимание, Буду переделывать схему под эту http://savepic.ru/9537168.png что из этого выйдет отпишусь.

Как вы вычислили 24 мкСек ?

Кинул ваш код в AVRStudio и посмотрел. С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек

Та вроде 24 мкСек хватает прежде чем сработает прерывания по спаду.Но лучше всего в обработчике прерываний отключать наверное так:

/*Код прерывания по выводам PCINT*/
PCINT0Z:
ldi R16, (0<<PCIE); отключаем внешнее прерывания PCINT
out GIMSK,R16;
in R20, SREG;
inc PINT;
out SREG, R20;
reti;

Спасибо за замечание очень пригодились.

Edited by strengerst

Share this post


Link to post
Share on other sites

...Но лучше всего в обработчике прерываний отключать наверное так:

Зачем?

С момента первого фронта до отключения прерывания проходит 29 тактов. на частоте 1,2 это и будет 24 мкСек, А при таком отключении прерывания это будет почти моментально.

Хочу попробовать так подключить получиться ? http://savepic.ru/9638274.png

Edited by strengerst

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • @Гар , не в обиду, но если вам аргументированно указывают на выявленные недостатки ,  нелишним будет проверить и устранить их, а не вступать в полемику.
    • 4160 все же наверное, полную я не делал, а по частям 4160 по даташиту работает до 96 КГц без шаманства. 1896 схема из Эвалюшн-борда, изначально описание я нашел в https://wifi-hotspot.zp.ua/dm/index.html «ПРЕДВАРИТЕЛЬНЫЙ УСИЛИТЕЛЬ «С ПРЕТЕНЗИЕЙ НА...»
    • @Серж Вамп , пишите "Kraynyaya st." или "Krajnyaya st." - иностранцы всё равно не понимают разницу и одинаково коряво произнесут название, а наши почтальоны по адресам с китайских посылок уже приноровились понимать что это значит.
    • Нормальный родственник, семья сестры моей жены, вполне нормальный, да и домик 2 этажа 900 метров квадратных, поэтому с названием улицы  интерпретация не нужна... как бы хоть и крайняя, но пока следующую улицу не нарежут, выкорчевав деревья напротив. Пока остаётся вариант Kraynyaya, завтра закажу, сегодня поиск пока вариантов
    • Бистабильные реле и МК засыпающий в промежутках без регулирования и абсолютно никаких помех. Если питать регулятор от отдельной обмотки, то никаких артефактов не наблюдал, осциллограф более широкополосный, чем несколько мегагерц, показывает форму импульсов MCLK в ЦАПе например.
    • Добрый день Хочу поведать о своих проблемах с прошивкой :WH1602_M8_IR_NEC V9,1  Компилирую AVR STUDIO 4 по Вашей инструкции со своим User set Компиляция проходит нормально И самом низу читаем: ошибок 0 предупреждений 5 Рядом желтые кружки. Четыре из них:C:\WH1602_M8_IR_NEC\HD44780_driver.asm(291): warning: Register r18 already defined by the .DEF directive  и один :C:\WH1602_M8_IR_NEC\HD44780_driver.asm(388): предупреждение:. cseg. db рассогласование-заполнение нулевого байта . Беру новый hex и прошиваю. В итоге: при сканировании все хорошо все станции ловятся правда с надписью НЕИЗВЕСТНЫЙ канал, стерео работает,громкость регулируется,пульт настраивается и работает нормально,но как только переключу на считывание записаных станций в норме только первая по списку(у меня Дорожное радио  87,5 мгц),нажимаю CH+ и начинается фигня; казябры и несуществующие частоты( таких в списке частот точно нет) Я уже собирал приемник с этой прошивкой для деревни правда там было зашито только 4 станции и все работает по сей день нормально никаких претензий. А сейчас у меня записано 33 станции. Я в программировании 0.В приложении моя папка которую я компилирую HD44780_driver.asm I2C_hard_driver.asm m8def.inc User_set.asm WH1602_M8_IR_NEC.asm

  • Линейный актуатор IP54, 2-20 дюймов, 400N, 12 В, 25 мм/сек

×
×
  • Create New...