Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Atmega8 программирование

Страниц (3): « 1 [2] 3 »
 

16. Billi - 06 Января, 2016 - 14:54:11 - перейти к сообщению
[quote=Петр Киселев][/quote] В том-то и дело, что моё устройство будет делать когда дверь закроется? А она (дверь) закроется. Программа то работает некоторое время и после закрытия двери. Придётся городить одновибратор с перезапуском, а это лишняя" логика".
17. killgur - 06 Января, 2016 - 15:15:03 - перейти к сообщению
Billi пишет:
Петр Киселев пишет:
В том-то и дело, что моё устройство будет делать когда дверь закроется? А она (дверь) закроется. Программа то работает некоторое время и после закрытия двери. Придётся городить одновибратор с перезапуском, а это лишняя" логика".



Петр дело говорит, у микроконтроллера есть "ресет" вот его и нажимайте а программа помигает и закончится и бесконечный цикл тогда не нужен программа кончилась до следующего рестарта (тут можно и в спячку уйти кстати).
18. Billi - 06 Января, 2016 - 15:45:21 - перейти к сообщению
Как вариант, с Reset. Ну а для будущего развития для меня(это не последняя же разработка) какие строчки надо добавить в код программы для опроса ноги порта, какие библиотеки добавить.
19. killgur - 06 Января, 2016 - 16:09:11 - перейти к сообщению
Billi пишет:
Как вариант, с Reset. Ну а для будущего развития для меня(это не последняя же разработка) какие строчки надо добавить в код программы для опроса ноги порта, какие библиотеки добавить.


Вам сюда http://easyelectronics.ru/avr-uc...-si-chast-1.html

и пока не стало поздно переходите с CodeVisionAVR на AVR студию
20. Billi - 07 Января, 2016 - 11:00:17 - перейти к сообщению
Охотно приму во внимание совет по переходу. Но сейчас, уже 90% девайса готово, помогите с таким "не удобным" компилятором. Написание новой программы в новом компиляторе отодвинет финал еще на месяц.
21. Billi - 08 Января, 2016 - 21:54:57 - перейти к сообщению
Идея с Reset вдохновила: на время работы программы PORTC.3 поддерживает ресет в единице. Даже если дверка закрывается. С помощью диодов- резисторов схема"или". Конечно хотелось изящней но и так вроде работает. Пока на бумаге, завтра проверю.
22. Billi - 09 Января, 2016 - 19:26:41 - перейти к сообщению
Работает. Поскольку форум не для новичков гибридную схему не выкладываю. Мне гордиться нечем.
23. Antenna88 - 22 Мая, 2016 - 02:38:53 - перейти к сообщению
НЕ СТАНУ СОЗДАВАТЬ НОВУЮ ТЕМУ. Один вопросик плиз. Имеется три вещи - макет.плата, 2 серво, Атмега8 (DIP28). И еще скачал готовую программу (приведена чуть ниже)
Нужно чтоб все это заработало. Атмегу8 прошил. Вопрос - 1) куда подключать белый(оранжевый) провода обоих сервоприводов (название ножки МК) ?? (в схемах которые нахожу в сети не могу разобраться . Замешательство Ламер )
2) правильно ли догадываюсь для питания нужны же два отдельных источника - один для МК другой для серво ?? И в частности нужно ли куда нибудь подключать ножку RESET ??
Кроме этого скудного набора штучек (МК, серво и батарейка) нужно ли еще что либо (в обязательном порядке) (резисторы и т.п.) ?? Не хотелось бы сжечь МК и серво.
Благодарен.

Вот программа :

#include <avr/io.h>
#include <avr/interrupt.h> //подгружаем прерывание
volatile unsigned int Danie_1Servo = 0,Danie_2Servo = 0,Sot = 0;
ISR (TIMER1_COMPA_vect) //формируем угол здвига 1 сервопривода
{
PORTA &=~(1<<0); // завершаем импульса для 1 сервопривода
OCR1A = Danie_1Servo;
}
ISR (TIMER1_COMPB_vect) // формируем угол здвига 2 сервопривода
{
PORTA &=~(1<<1); // завершаем импульса для 2 сервопривода
OCR1B = Danie_2Servo;
}
ISR(TIMER1_OVF_vect) //формеруем 20мс. 50гц
{
PORTA |=(1<<0); //начяло импульса для 1 сервопривода
PORTA |=(1<<1); //начяло импульса для 2 сервопривода
Sot++;
}
//*******************//
//*******************//
int main(void)
{
DDRA |=(1<<0)|(1<<1);
ICR1 = 5000; //формеруем 20мс. для 16Мгц.
OCR1A = 150;
OCR1B = 150;
TCCR1B |= (1 << ICES1)|(1<<CS10)|(1<<CS11)|(1<<WGM12)|(1<<WGM13); //пределитель 64,старший бит режим FastPWM (сброс при совпадении)
TCCR1A |=(1<<WGM11); // младшие бит режим FastPWM
TIMSK |=(1<<TOIE1)|(1<<OCIE1A)|(1<<OCIE1B); // разрешаем работу прерываниям

asm( sei );
//===========//
while(1)
{
if ( Sot == 100)
{
Danie_1Servo = 500; // данные для 1 сервопривода
}
if ( Sot == 200)
{
Danie_1Servo = 150; // данные для 1 сервопривода
Sot = 0;
}
asm( nop );
24. Петр Киселев - 22 Мая, 2016 - 08:54:55 - перейти к сообщению
Antenna88, хочу поделиться своим небольшим опытом в работе с сервами. Если они в работе постоянно, то через некоторое время начинают греться. Питание для них лучше делать отдельное, например, 3 батарейки по 1,5 В или 4 акка по 1,2 В. Если серв 3 и более, то только так. Отдельный источник потребовался у нас и при работе с блютузом.
По "резет" и коду, лучше дождаться комментариев наших мэтров -killgur и Роботова. Я сто лет тому назад пробовал поставить к "резет" R/C цепочку, но ничего не получилось.
25. Роботов - 22 Мая, 2016 - 20:44:52 - перейти к сообщению
Antenna88:
1.
Antenna88 пишет:
правильно ли догадываюсь для питания нужны же два отдельных источника - один для МК другой для серво ??
Желательно, но не обязательно. Причем для МК желательно стабилизированное питание.
2.
Antenna88 пишет:
И в частности нужно ли куда нибудь подключать ножку RESET ??
Не обязательно. Но можно подтянуть к питанию резистором 5-10 кОм. Хуже не будет.
3.
Antenna88 пишет:
Кроме этого скудного набора штучек (МК, серво и батарейка) нужно ли еще что либо (в обязательном порядке) (резисторы и т.п.) ??

По питанию емкости надо ставить. Электролит и керамику. Если питание МК не превысит 5,5 В, то не сгорит (если ножки не коротить).
Серву сжечь легко, достаточно на долгое время оставить неподвижно под большой нагрузкой.
26. Antenna88 - 24 Мая, 2016 - 06:14:20 - перейти к сообщению
Ну а самый главный вопрос - куда подключать желтые провода обоих сервомоторов ??
27. soob - 24 Мая, 2016 - 11:56:43 - перейти к сообщению
Antenna88 пишет:
Ну а самый главный вопрос - куда подключать желтые провода обоих сервомоторов ??

Если не ошибаюсь к выводам PB1 и PB2
28. Роботов - 24 Мая, 2016 - 14:42:27 - перейти к сообщению
soob пишет:
Если не ошибаюсь к выводам PB1 и PB2

... или РА0 и РА1
29. soob - 24 Мая, 2016 - 16:34:53 - перейти к сообщению
Если речь идёт о ATMega8, то у него ведь нет порта A.
По коду задействованы OCR1A и OCR1B.
На обычном DIP корпусе это 15 и 16 ножки

Поправьте если не прав Улыбка
30. killgur - 24 Мая, 2016 - 18:08:12 - перейти к сообщению
soob пишет:
Если речь идёт о ATMega8, то у него ведь нет порта A.
По коду задействованы OCR1A и OCR1B.
На обычном DIP корпусе это 15 и 16 ножки

Поправьте если не прав Улыбка



PAO PA1

потому что программа для меги 16 с кварцем на 16МГц и зачем то дергают ногами на порте А генерируя импульсы для управления сервомашинкой.

Порт B не задействован в программе сигналы таймера наружу не выходят

можно порт А заменить на порт С просто изменением буквы если очень надо запустить на меге8