Страница 1 из 2

Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 05:04:26
sanitar_zaz
всем добрый день.сразу оговорюсь,с микроконтроллерами я имею дело чуть более 10 дней как.описываю по порядку:
есть задача МК должен менять вольтаж через ШИМ в соответствии со значениями абсолютного энкодера.задача эта давно всплыла,и когда-то один мой знакомый мне начинал помогать в её реализации.успел нарисовать мне схему,сказать через что прошивать и +\- на этом наши пути разошлись.теперь я решил закрыть задачу,и сел 1 января разбираться в этой сфере.итак,что имею на сегодняшний день:
общая схема
Изображение
дополнена резистором к каждой ноге,связанной с энкодером,и связана через общий плюс,как того требует даташит на энкодер
Изображение

проект в Proteus
Изображение

тут вместо энкодера 8-пиновый переключатель,что по моей идее для отладки хватит,мне только менять состояние пинов и смотреть на показания ШИМ

код писал в microchip studio.собственно был написан уже и обработчик значения пинов,и работа с ШИМ,осталось только написать зависимость значения ШИМ от значения пинов.на работе с ШИМ я подвис на пару дней,пока пытался понять что как работает.но написал,в протеусе работало,включая простейший диммер,если его так можно назвать,ибо я не завязывал там лампочку,а смотрел по осциллографу.
и вот решил я что пора проверить в реальном железе.прошил на реальном com порту через uniprof (шьётся нормально,потом читается из МК-всё на месте)и....ничего.после серии экспериментов по уменьшению кода программы я пришёл к совсем минималлистичному варианту

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

#define F_CPU 8000000UL

#include <avr/io.h>

int i,p[8],tmp,forwarded,enc_pos;

int main(void)	
{

DDRD=0x00;

DDRB&=~(1<<0); //PB0 read
DDRB|=1<<1; //PB1 write
DDRB&=~(1<<5); //PB6 read
DDRB&=~(1<<6); //PB7 read
PORTB |= 1<<1;
}
что,как я понимаю,должно привести к тупо постоянному +5V на OC1A.и ничего.питание я подаю отдельным проводом с юсб порта.тупо ноль на этой ноге.

отсюда у меня три варианта:1)или нельзя пытаться запускать МК не вытащив его из обвязки для прошивки;2)или ему кабзда;3)или я что-то упустил

подскажите пожалуйста куда дальше думать.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 07:38:13
JackSmith
>> шьётся нормально,потом читается из МК-всё на месте
>> 1)или нельзя пытаться запускать МК не вытащив его из обвязки для прошивки;2)или ему кабзда;3)или я что-то упустил
если микроконтроллер нормально прошивается и читается, то он живой. второй вариант отпадает.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 07:50:58
vlasovzloy
Ну конечно надо отключать от обвязки

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 09:03:46
Нефертити
sanitar_zaz, У вас, судя по рисунку монтажа, вход !RESET (вывод 1) МК подтянут через резистор 1к с общему проводу GND, а должен быть подтянут через резистор ~10к к +5В.
Так же, к входу !RESET приделан ещё какой-то резистор на 1к с неизвестным мне назначением.
Наличие конденсаторов 0,1 мкФ между 7 и 8 выводами и между 20 и 22 выводами МК обязательно.
Разбирайтесь с монтажом.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 16:33:09
sanitar_zaz
Нефертити, я так думаю что схема была нарисована вот эта http://www.getchip.net/wp-content/uploa ... scheme.png
нашёл тут http://www.getchip.net/posts/delaem-com ... trollerov/

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

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 17:12:23
Нефертити
Можете попробовать сигнал !RESET через переключатель подключать в одном положении для прошивки МК - к обвязке программатора, в другом положении для запуска прошивки - через резистор 10к к линии +5В.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 19:57:10
sanitar_zaz
Нефертити, а поясните пожалуйста,зачем для запуска подвязывать ресет на плюс?разве не достаточно его в воздухе оставить?я побегал по инету,посмотрел схемы-если я правильно понял то для запуска вообще достаточно подать + и - на соответствующие ноги.или я ошибаюсь?

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 20:13:58
DX168B
RESET подтянут к плюсу внутри чипа резистором с очень большим номиналом (50к или около того). Потому при наличии помех он будет спонтанно перезагружаться. Ставьте на RESET резистор на 5,1к к плюсу и одной проблемой меньше будет.
Конденсаторы на 0,1мкф около ног питания тоже обязательны. Микроконтроллер выполнен по КМОП технологии, значит там внутри полно полумостовых каскадов со сквозными токами и паразитными емкостями. Когда все это клацает на тактовой частоте, просадки в цепях питания становятся дикими, хть и очень короткими. Внешние конденсаторы непосредственно на ногах питания МК нужны для компенсации просадок внутри него.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 21:55:32
Нефертити
[uquote="sanitar_zaz",url="/forum/viewtopic.php?p=4530161#p4530161"]Нефертити, я побегал по инету,посмотрел схемы-если я правильно понял то для запуска вообще достаточно подать[/uquote]
Ну, раз Вы знаете внутреннюю организацию схемы "сброса" в ATmega8, значит, подтяжку !RESET к +5В не делайте.

Добавлено after 1 hour 37 minutes 49 seconds:
Хочется дополнить.
Вот, для STM32 в "Reference manual" есть упрощённая схема "External reset".
СпойлерИзображение
А для ATmega8 Вы что-то подобное видели?
В противном случае, всё, что Вы увидели в интернете - лишь домыслы.

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 22:35:14
sanitar_zaz
[uquote="Нефертити",url="/forum/viewtopic.php?p=4530175#p4530175"]Ну, раз Вы знаете внутреннюю организацию схемы "сброса" в ATmega8, значит, подтяжку !RESET к +5В не делайте.[/uquote]

процитирую себя-же из первого сообщения
сразу оговорюсь,с микроконтроллерами я имею дело чуть более 10 дней
поэтому если я задаю вопросы-это не с целью повыделываться,а с целью разобраться

[uquote="DX168B",url="/forum/viewtopic.php?p=4530172#p4530172"]Конденсаторы на 0,1мкф около ног питания тоже обязательны[/uquote]
стоит,вон и на схеме есть,я только ёмкось не подписал

Re: Atmega8A не стартует или я туплю?

Добавлено: Сб янв 13, 2024 23:07:00
Нефертити
AVR® Microcontroller Hardware Design Considerations
Для особо одарённых: Изображение

Добавлено after 29 minutes 4 seconds:
[uquote="sanitar_zaz",url="/forum/viewtopic.php?p=4530219#p4530219"]стоит,вон и на схеме есть,я только ёмкось не подписал[/uquote]
Наличие конденсаторов 0,1 мкФ между 7 и 8 выводами и между 20 и 22 выводами МК обязательно.

Re: Atmega8A не стартует или я туплю?

Добавлено: Вс янв 14, 2024 13:02:04
Gennadiy
Измените схему так. Резистор сброса на +Vcc и разверните диод, идущий с СОМ4.

Re: Atmega8A не стартует или я туплю?

Добавлено: Пн янв 15, 2024 23:40:13
Нефертити
[uquote="sanitar_zaz",url="/forum/viewtopic.php?p=4530219#p4530219"]если я задаю вопросы-это не с целью повыделываться,а с целью разобраться

[uquote="DX168B",url="/forum/viewtopic.php?p=4530172#p4530172"]Конденсаторы на 0,1мкф около ног питания тоже обязательны[/uquote]
стоит,вон и на схеме есть,я только ёмкось не подписал[/uquote]

Пока вы запитываете свой МК от импульсного БП, в котором есть хотя-бы 1 CY конденсатор, которым вы привязываете свою схему к внешней среде, потенциал 0 вашей схемы будет близок к 0, простите за тавтологию.
Как только вы перейдёте к автономному/изолированному питанию, все потенциалы начинают странным образом изменяться, и даже простое прикосновение к токоведущей дорожке платы вызывает непредвиденный эффект.
Аналогично и с сигналом !RESET.

Re: Atmega8A не стартует или я туплю?

Добавлено: Вт янв 16, 2024 10:00:30
Ivanoff-iv
может тут без меги, простым параллельным ЦАПом обойтись проще?

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

Re: Atmega8A не стартует или я туплю?

Добавлено: Вт янв 16, 2024 18:39:01
BOB51
Может есть смысл для начала таки подправить сам код?
К примеру:
Спойлер

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

#define F_CPU 8000000UL

#include <avr/io.h>

int i,p[8],tmp,forwarded,enc_pos;

int main(void)   
{

DDRD=0x00;

DDRB&=~(1<<0); //PB0 read
DDRB|=1<<1; //PB1 write
DDRB&=~(1<<5); //PB6 read
DDRB&=~(1<<6); //PB7 read
PORTB |= 1<<1;

while(1){}

}
:roll:

Re: Atmega8A не стартует или я туплю?

Добавлено: Вс янв 21, 2024 02:19:51
sanitar_zaz
всем спасибо,собрал отдельную плату,с подвязкой ресета на + и всё завелось.
BOB51, нет,и без вайла всё взлетело
может тут без меги, простым параллельным ЦАПом обойтись проще?
а как вы будете в цапе делать преобразование значения 8 пинов от энкодера?таблица вот в даташите есть,если что https://www.tme.eu/Document/84bf005d03e ... NS-EAW.pdf

и к тому-же,ещё у меня есть мысль добавить переключение делителя,чтоб один оборот был равен не 360 а 1:3,к примеру.

Re: Atmega8A не стартует или я туплю?

Добавлено: Пн янв 22, 2024 04:39:15
sanitar_zaz
у меня новый вопрос назрел :))

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

#define F_CPU 8000000UL

#include <avr/io.h>


int main(void)	
{
DDRD=0x00;

DDRB&=~(1<<0); //PB0 read
DDRB|=1<<1; //PB1 write
DDRB&=~(1<<5); //PB6 read
DDRB&=~(1<<6); //PB7 read
PORTB |= 0<<1;


TCCR1A = 0b10000010;
TCCR1B = 0b00011001;
ICR1=0x7D0;
OCR1A=0x00;

while (1)
{

if (PINB & (1 << PINB0))
{
 OCR1A=0x7D0;
}
else
{
 OCR1A=0x00;
}

}
}
почему не зависимо от того,есть питание на ноге PB0 или нет-всегда выполняется условие OCR1A=0x7D0; ?
что в протеусе,что в реальном железе подаёт питание на выход PB1 если проверять условие if (PINB & (1 << PINB0))
и на условие else никогда не реагирует(если поменять местами 0х00 и 0x7D0 то соответственно всегда будет 0 на выходе)
зы:если закоментить строку OCR1A=0x7D0; то питание с ноги PB1 пропадает,т.е. дело в проверке условия (PINB & (1 << PINB0))
и да,изменение записи на (!bit_is_clear(PINB,0)) не меняет ничего

Re: Atmega8A не стартует или я туплю?

Добавлено: Пн янв 22, 2024 07:34:47
>TEHb<
Надо поставить резистор от этой ножки к земле.

Re: Atmega8A не стартует или я туплю?

Добавлено: Пн янв 22, 2024 17:36:26
sanitar_zaz
[uquote=">TEHb<",url="/forum/viewtopic.php?p=4533565#p4533565"]Надо поставить резистор от этой ножки к земле.[/uquote]

внезапно.не понял.
вот проект
Изображение

мне что,все 8 ног надо ещё дополнительно резисторами обвязать?

Re: Atmega8A не стартует или я туплю?

Добавлено: Пн янв 22, 2024 17:41:15
Novice user
Можно включить подтяжку к плюсу
PORTB=0x01;