Страница 1 из 2
У atmega8 бывают иногда сбои
Добавлено: Пн ноя 16, 2015 05:09:16
kk042fjv
Добрый день!
Подскажите, у atmega8 бывают иногда сбои, может это быть из-за питания или что то в программе, так как параллельно её стоит один мотор и ШИМ с AVR управляет вторым мотором. Запитано все от блока 24В.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 05:58:50
Vladlog
На это можно ответить только ознакомившись с программой и схемой включения, причем - лучше с разводкой платы, так как бывают и там подводные камни. Только это, как правило, занимает много времени, но может у кого-то и будет свободное время.
А на то, что имеем, можно сказать, что бывают сбои и при некачественном питании, и, естественно, при кривом ПО.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 06:12:18
kk042fjv
Код: Выделить всё
#include <mega8.h> //частота 4МГц
#include <delay.h>
unsigned char blinkFlag = 0;
unsigned char blinkFlag1 = 0;
unsigned char blinkFlag2 = 0;
void blink() {
PORTB.0=1;
delay_ms(111);
PORTB.0=0;
delay_ms(111);
}
void blink1(){
PORTB.0=1;
delay_ms(100);
PORTB.0=0;
delay_ms(100);
}
void blink2(){
PORTB.0=1;
delay_ms(312);
PORTB.0=0;
delay_ms(312);
}
void main(void)
{
int data;
float V;
PORTB=0x00;
DDRB=0x0D;
PORTC=0x04;
DDRC=0x00;
TCCR1A=0x21;
TCCR1B=0x0C;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0xA6;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x40;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x85;
delay_ms(10000);
OCR1BL=0xFA;
TCCR2=0x6E;
delay_ms(45000);
while (1)
{
if (PINC.2==1)
{
delay_ms(20);
ADMUX=0;
ADCSRA |= 0x40;
data = ADCW;
V =data*0.0048828;
if (V < 3.1)
{
OCR1BL=0xEB;
TCCR2=0x6E;
blinkFlag = 0;
blinkFlag1 = 0;
blinkFlag2 = 1;
}
else if (V >= 3.1)
{
if (V > 4.65)
{
TCCR2=0x00;
OCR1BL=0xEB;
blinkFlag = 1;
blinkFlag1 = 0;
blinkFlag2 = 0;
}
else if (V < 4.35)
{
TCCR2=0x00;
OCR1BL=0xCC;
blinkFlag = 0;
blinkFlag1 = 1;
blinkFlag2 = 0;
}
}
}
if (PINC.2==0)
{
TCCR2=0x00;
OCR1BL=0xC0;
blinkFlag = 0;
blinkFlag1 = 0;
blinkFlag2 = 0;
}
if(blinkFlag)
blink();
if (blinkFlag1)
blink1();
if (blinkFlag2)
blink2();
};
}
Был случай когда переключатель
был выключен. Все должно быть выключено кроме OCR1BL=0xC0;
Но у меня все началось сначала, как будто кто то перегрузил
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 06:37:18
Vladlog
А зачем столько лишних операций с флагами? Можно же сделать сразу:
Код: Выделить всё
while (1)
{
if (PINC.2==1)
{
delay_ms(20);
ADMUX=0;
ADCSRA |= 0x40;
data = ADCW;
V =data*0.0048828;
if (V < 3.1)
{
OCR1BL=0xEB;
TCCR2=0x6E;
blink2();
}
else if (V >= 3.1)
{
TCCR2=0x00;
if (V > 4.65)
{
OCR1BL=0xEB;
blink();
}
else if (V < 4.35)
{
OCR1BL=0xCC;
blink1();
}
}
}
if (PINC.2==0)
{
TCCR2=0x00;
OCR1BL=0xC0;
}
};
}
Или это только часть кода и флаги будут использоваться в других блоках?
P.S.: Я с Си знаком поверхностно, серьезных вещей на нем не писал. В основном Delphi и для контроллеров - Ассемблер, так что, может что-то и не так понял из кода, но в принципе, криминала не увидел.
А фьюзы правильно выставлены? В частности, сторожевой таймер не включен?
Схема питания не показана.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 06:44:26
Alexeyslav
Это конечно скорей всего даже не по питанию произошло, а наводка на вывод сброса. Надо тщательно просмотреть разводку платы и экранировать от внешних полей.
И еще, я бы убрал арифметику с плавающей запятой из программы - лучше посчитать константы приведя их к целым числам это сделает компилятор один раз при компиляции программы а не контроллер каждый раз выполняя тяжёлые операции умножения и сравнения.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 06:52:48
kk042fjv
"Vladlog"

Фьюзы выставлял таким образом.
В коде я конечно хочу лишнее убрать, попробуем и с вашим вариантом поработать.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 06:54:20
Vladlog
Все может быть, по этому и говорил, что надо смотреть и схему. По поводу арифметики согласен все 100.

С If-ами тоже надо оптимизировать. Если V<3.1, то вторая проверка не нужна, ясно же, что если V не меньше 3.1, значит точно больше или равно.

Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:01:48
kk042fjv
Надо тщательно просмотреть разводку платы и экранировать от внешних полей.
Плату пока еще не разводил, все спаяно на макетке (все вкуче).
И еще, я бы убрал арифметику с плавающей запятой из программы - лучше посчитать константы приведя их к целым числам
Не совсем понял про арифметику? тут смысл такой: на АЦП приходит сигнал с датчика температуры (К1019ЧТ1) и AVR управляет подачей топлива и моторами. Все работает как нужно, но иногда происходит сбой какой-то
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:04:18
kk042fjv
"Vladlog"
С If-ми был такой вариант, потом зачем то переделал, получается зря
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:11:29
kk042fjv

питание вот так паял
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:12:30
Vladlog
kk042fjv писал(а):Фьюзы выставлял таким образом.
В этой программе установленный флаг не означает установку бита в 0? А то выходит, что сторожевой таймер включен и систематически перезагружает контроллер.
Это все хорошо, но на самой плате, совсем рядом, практически на ногах питания контроллера, есть доп. конденсатор?
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:19:22
kk042fjv
Если я поставлю галочку где WTDON, то сторожевой таймер отключится?
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:21:52
kk042fjv
на самой плате, совсем рядом, практически на ногах питания контроллера, есть доп. конденсатор?
Конденсатора нету, т.е. между 7 и 8 выводом поставить конденсатор?
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:28:54
Vladlog
kk042fjv писал(а):галочку где WTDON, то сторожевой таймер отключится?
Я не зря спросил про программу. Посмотрите к ней инструкцию, как она выставляет биты. Сам бит, судя по даташиту, должен быть установлен в 1.
kk042fjv писал(а):поставить конденсатор?
Да.
Это одна из Ваших первых разработок на контроллерах?
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 07:35:38
kk042fjv
Это одна из Ваших первых разработок на контроллерах?
Да. Контроллеры изучаю недавно, изучаю самостоятельно по урокам на
http://avr-start.ru/
А такая программа чтоб сам себе поставил ТЗ и выполнил то это первая программа, но она работает как мне надо.
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 10:00:44
Victor_P.
Vladlog писал(а):Я не зря спросил про программу. Посмотрите к ней инструкцию, как она выставляет биты.
Там же на скриншоте все прекрасно видно. Птица = 0, т.е. бит включен. Так что собака там вырублена, и судя по коду, програмно она тоже не запущена.
А если есть подозрения на наводки на ногу сброса, то ему можно внешнюю цепь сброса приспособить из резистора на Vpp и кондера на Gnd.
Re: У atmega8 бывают иногда сбои
Добавлено: Пн ноя 16, 2015 11:17:45
kk042fjv
Сделал я пару экспериментов:
1) выставил фьюз, поставил птицу на WDTON, команду обнуления не стал ставить, программа даже двух минут не работала, сбрасывался микроконтроллер.
2) вернул фьюз на место, подключил питание к другому источнику питания гонял минут 20 ни одного сбоя не произошло
Re: Мелкие вопросы по питанию.
Добавлено: Пн ноя 16, 2015 11:24:38
kk042fjv
А если есть подозрения на наводки на ногу сброса, то ему можно внешнюю цепь сброса приспособить из резистора на Vpp и кондера на Gnd
Это таким образом?
Re: У atmega8 бывают иногда сбои
Добавлено: Пн ноя 16, 2015 11:37:54
Victor_P.
ага
Re: У atmega8 бывают иногда сбои
Добавлено: Пн ноя 16, 2015 11:59:33
kk042fjv
Все равно произошел сброс и от второго источника