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

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32:14

Сообщение 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)или я что-то упустил

подскажите пожалуйста куда дальше думать.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 355
Зарегистрирован: Ср мар 09, 2016 08:07:41

Сообщение JackSmith »

>> шьётся нормально,потом читается из МК-всё на месте
>> 1)или нельзя пытаться запускать МК не вытащив его из обвязки для прошивки;2)или ему кабзда;3)или я что-то упустил
если микроконтроллер нормально прошивается и читается, то он живой. второй вариант отпадает.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20137
Зарегистрирован: Чт янв 26, 2012 16:44:29
Откуда: Таксимо

Сообщение vlasovzloy »

Ну конечно надо отключать от обвязки
Мои поставщики запчастей с отличной репутацией
texnomag.ru
radioremont.com
pl-1.org
4ip.info
elitan.ru
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Ср дек 06, 2023 23:51:29
Откуда: 48

Сообщение Нефертити »

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

Сообщение sanitar_zaz »

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

т.е. вся суть проблемы получается в том что нельзя на рабочей плате держать обвязку для прошивки?мухи отдельно,котлеты отдельно?
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Ср дек 06, 2023 23:51:29
Откуда: 48

Сообщение Нефертити »

Можете попробовать сигнал !RESET через переключатель подключать в одном положении для прошивки МК - к обвязке программатора, в другом положении для запуска прошивки - через резистор 10к к линии +5В.
Последний раз редактировалось Нефертити Вс янв 14, 2024 01:21:21, всего редактировалось 1 раз.
Относись к людям так, как хочешь, чтобы они относились к тебе.
Реклама
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32:14

Сообщение sanitar_zaz »

Нефертити, а поясните пожалуйста,зачем для запуска подвязывать ресет на плюс?разве не достаточно его в воздухе оставить?я побегал по инету,посмотрел схемы-если я правильно понял то для запуска вообще достаточно подать + и - на соответствующие ноги.или я ошибаюсь?
Друг Кота
Аватара пользователя
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)

Сообщение DX168B »

RESET подтянут к плюсу внутри чипа резистором с очень большим номиналом (50к или около того). Потому при наличии помех он будет спонтанно перезагружаться. Ставьте на RESET резистор на 5,1к к плюсу и одной проблемой меньше будет.
Конденсаторы на 0,1мкф около ног питания тоже обязательны. Микроконтроллер выполнен по КМОП технологии, значит там внутри полно полумостовых каскадов со сквозными токами и паразитными емкостями. Когда все это клацает на тактовой частоте, просадки в цепях питания становятся дикими, хть и очень короткими. Внешние конденсаторы непосредственно на ногах питания МК нужны для компенсации просадок внутри него.
Последний раз редактировалось DX168B Сб янв 13, 2024 20:18:05, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Ср дек 06, 2023 23:51:29
Откуда: 48

Сообщение Нефертити »

[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 Вы что-то подобное видели?
В противном случае, всё, что Вы увидели в интернете - лишь домыслы.
Последний раз редактировалось Нефертити Вс янв 14, 2024 01:21:34, всего редактировалось 1 раз.
Относись к людям так, как хочешь, чтобы они относились к тебе.
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32: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]
стоит,вон и на схеме есть,я только ёмкось не подписал
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Ср дек 06, 2023 23:51:29
Откуда: 48

Сообщение Нефертити »

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 выводами МК обязательно.
Относись к людям так, как хочешь, чтобы они относились к тебе.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Чт июн 17, 2010 07:40:31
Откуда: Россия

Сообщение Gennadiy »

Измените схему так. Резистор сброса на +Vcc и разверните диод, идущий с СОМ4.
Вложения
3cellbsctx.jpg
(116.59 КБ) 82 скачивания
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Ср дек 06, 2023 23:51:29
Откуда: 48

Сообщение Нефертити »

[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.
Относись к людям так, как хочешь, чтобы они относились к тебе.
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

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

А по ресету - тоже в воздухе по неопытности оставлял, теперь притягиваю... т.к. срабатывает и от наводок и от сырости
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Аватара пользователя
Сообщения: 15697
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение 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:
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32:14

Сообщение sanitar_zaz »

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

и к тому-же,ещё у меня есть мысль добавить переключение делителя,чтоб один оборот был равен не 360 а 1:3,к примеру.
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32:14

Сообщение 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)) не меняет ничего
Друг Кота
Аватара пользователя
Сообщения: 5819
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж

Сообщение >TEHb< »

Надо поставить резистор от этой ножки к земле.
Усложнять просто. Упрощать сложно.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 37
Зарегистрирован: Сб янв 13, 2024 04:32:14

Сообщение sanitar_zaz »

[uquote=">TEHb<",url="/forum/viewtopic.php?p=4533565#p4533565"]Надо поставить резистор от этой ножки к земле.[/uquote]

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

мне что,все 8 ног надо ещё дополнительно резисторами обвязать?
Мудрый кот
Сообщения: 1712
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Сообщение Novice user »

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

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