Обсуждаем контроллеры компании Atmel.
Ответить

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

Сб янв 13, 2024 05:04:26

всем добрый день.сразу оговорюсь,с микроконтроллерами я имею дело чуть более 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

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

если микроконтроллер нормально прошивается и читается, то он живой. второй вариант отпадает.

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

Сб янв 13, 2024 07:50:58

Ну конечно надо отключать от обвязки

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

Сб янв 13, 2024 09:03:46

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

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

Сб янв 13, 2024 16:33:09

Нефертити, я так думаю что схема была нарисована вот эта 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В.
Последний раз редактировалось Нефертити Вс янв 14, 2024 01:21:21, всего редактировалось 1 раз.

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

Сб янв 13, 2024 19:57:10

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

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

Сб янв 13, 2024 20:13:58

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

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

Сб янв 13, 2024 21:55:32

Нефертити, я побегал по инету,посмотрел схемы-если я правильно понял то для запуска вообще достаточно подать

Ну, раз Вы знаете внутреннюю организацию схемы "сброса" в ATmega8, значит, подтяжку !RESET к +5В не делайте.

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

А для ATmega8 Вы что-то подобное видели?
В противном случае, всё, что Вы увидели в интернете - лишь домыслы.
Вложения
Безымянный.png
STM32 External reset
(27.57 KiB) Скачиваний: 65
Последний раз редактировалось Нефертити Вс янв 14, 2024 01:21:34, всего редактировалось 1 раз.

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

Сб янв 13, 2024 22:35:14

Ну, раз Вы знаете внутреннюю организацию схемы "сброса" в ATmega8, значит, подтяжку !RESET к +5В не делайте.


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


поэтому если я задаю вопросы-это не с целью повыделываться,а с целью разобраться

Конденсаторы на 0,1мкф около ног питания тоже обязательны

стоит,вон и на схеме есть,я только ёмкось не подписал

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

Сб янв 13, 2024 23:07:00

AVR® Microcontroller Hardware Design Considerations
Для особо одарённых: Изображение

Добавлено after 29 minutes 4 seconds:
стоит,вон и на схеме есть,я только ёмкось не подписал

Наличие конденсаторов 0,1 мкФ между 7 и 8 выводами и между 20 и 22 выводами МК обязательно.
Вложения
Безымянный.png
(9.15 KiB) Скачиваний: 400

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

Вс янв 14, 2024 13:02:04

Измените схему так. Резистор сброса на +Vcc и разверните диод, идущий с СОМ4.
Вложения
3cellbsctx.jpg
(116.59 KiB) Скачиваний: 50

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

Пн янв 15, 2024 23:40:13

если я задаю вопросы-это не с целью повыделываться,а с целью разобраться

Конденсаторы на 0,1мкф около ног питания тоже обязательны

стоит,вон и на схеме есть,я только ёмкось не подписал


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

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

Вт янв 16, 2024 10:00:30

может тут без меги, простым параллельным ЦАПом обойтись проще?

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

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

Вт янв 16, 2024 18:39:01

Может есть смысл для начала таки подправить сам код?
К примеру:
Спойлер
Код:
#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

всем спасибо,собрал отдельную плату,с подвязкой ресета на + и всё завелось.
BOB51, нет,и без вайла всё взлетело

может тут без меги, простым параллельным ЦАПом обойтись проще?


а как вы будете в цапе делать преобразование значения 8 пинов от энкодера?таблица вот в даташите есть,если что https://www.tme.eu/Document/84bf005d03e ... NS-EAW.pdf

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

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

Пн янв 22, 2024 04:39:15

у меня новый вопрос назрел :))

Код:
#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

Надо поставить резистор от этой ножки к земле.

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

Пн янв 22, 2024 17:36:26

Надо поставить резистор от этой ножки к земле.


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

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

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

Пн янв 22, 2024 17:41:15

Можно включить подтяжку к плюсу
PORTB=0x01;
Ответить