Перейти к содержанию

Пытаюсь написать код на Си для Avr


HOT ICE

Рекомендуемые сообщения

А я в протеусе мало, что эмулирую, тем более он совсем не подходит для сложных задач...

Я к каждому своему устройству делаю выводы для подключения переходника UART<<>>RS-232,

и просматриваю все, что мне надо... :) на комп-ре.

Изменено пользователем IGRISE
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 87
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Да я вот ещё подключил мегу к драйверу вот так http://myrobot.ru/stepbystep/r_firstbot1.php А мотор не крутится???Подал на оди 1 а на другой 0

Я не работал с таким драйвером L293D, поэтому помочь с ним тебе не могу...

А может тогда чтото другое посоветуеш???Ато как мне ещё движками нормально управлять?

На счёт программы,,, <_< Ну да я был бы очень рад если ты мне её набросаеш,ато времени остаётся всё меньше,а я так и не сделал то что хотел(Теперь ещё и с подключением микрухи непонятка!

Кстатти да Учитель!!!Вполне подходит!

Изменено пользователем HOT ICE
Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

А может тогда чтото другое посоветуеш???Ато как мне ещё движками нормально управлять?

На счёт программы,,,

Я тебе только посоветую зайти на специальный форум роботостроения... И спросить кто какие драйверы использует...

Ну да я был бы очень рад если ты мне её набросаеш,ато времени остаётся всё меньше,а я так и не сделал то что хотел

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

А в итоге пришли к тому что-ты ничего не понял или не хочешь понимать... ??? :(

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

А может тогда чтото другое посоветуеш???Ато как мне ещё движками нормально управлять?

На счёт программы,,,

Я тебе только посоветую зайти на специальный форум роботостроения... И спросить кто какие драйверы использует...

Ну да я был бы очень рад если ты мне её набросаеш,ато времени остаётся всё меньше,а я так и не сделал то что хотел

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

А в итоге пришли к тому что-ты ничего не понял или не хочешь понимать... ??? :(

Так дело в том что ты мне код последний который дал он по идее и должен выполнять мою задачу но прирывания почемуто не происходят!Программа начинает работать без прерывания

Ссылка на комментарий
Поделиться на другие сайты

HOT ICE: Так дело в том что ты мне код последний который дал он по идее и должен выполнять мою задачу но прирывания почемуто не происходят!Программа начинает работать без прерывания

Вот уже ближе...

А теперь смотри... <<HOT ICE: Программа начинает работать без прерывания>>, программа всегда работает

если ты имел ввиду, что при включении МК не должен попадать в функцию включения работы двигателя engine_on(), дак он туда и не попадает, т.е если ты использовал предыдущий код, я не поленюсь еще его сюда кину:

/*****************************************************
Chip type : ATmega8
Program type : Application
Clock frequency : 12,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

#include <mega8.h>
#include <delay.h>

/* Глобальные переменные */
unsigned char f_on=0, f_mozgi=0; 

/* Инициализация порта */
void port_init()
{
PORTB=0x00;
DDRB=0x00; 

PORTC=0x00;
DDRC=0xFF; 

PORTD=0x00;
DDRD=0xFF;   //0xf3
} 

/* Инициализация внешних прерываний */
void int_init()
{
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: On
// INT1 Mode: Rising Edge
GICR|=0xC0;
MCUCR=0x0F;
GIFR=0xC0;
}

/* Инициализация аналогового компаратора (его выключение) */
void an_comp_init()
{
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
} 

/* Функция включения работы двигателя */
void engine_on()
{ 
if (f_on) 
{
 #asm("cli");
 //мотор1 вперёд
 PORTD.0=1;  
 //мотор2 вперёд
 PORTD.1=1;
 delay_ms(500);  
 PORTD.0=0;
 PORTD.1=1;
 delay_ms(500);
 #asm("sei");  
}
} 

/* Функция ВЫключения работы двигателя */
void engine_off() 
{
PORTD.0=0;//стоп
PORTD.1=0;//стоп
}

/* Прерывание от вывода PD2(INT0) */
interrupt [EXT_INT0] void ext_int0_isr()
{ 
// Это прерывание возникает когда на выводе PD2 идет фронт сигнала
if (f_mozgi) 
{ 
 PORTD.0=1; 
 PORTD.1=0;
 f_mozgi=0;
}
else
{
 PORTD.0=0; 
 PORTD.1=1;
 f_mozgi=1;
}   
}

/* Прерывание от вывода PD3(INT1) */
interrupt [EXT_INT1] void ext_int1_isr()
{
// Это прерывание возникает когда на выводе PD3 идет фронт сигнала
if (f_on) f_on = 0;
  else f_on = 1;
if (f_on==0) engine_off(); // Выключение
}

void main()
{
#asm("cli"); // Запрет всех прерываний
port_init();
int_init();
an_comp_init();
#asm("sei"); // Разрешение внешних прерываний

while(1) engine_on();
}

И если ты подключил так, как на схеме::

ТО НИЧЕГО У ТЕБЯ НА НАЧАЛЬОМ ЭТАПЕ НЕ БУДЕТ ВКЛЮЧАТЬСЯ!!!

Если у тебя что-то включается, то это только твои ошибки, при подключении кнопок...

post-18659-1172164497_thumb.jpg

Ссылка на комментарий
Поделиться на другие сайты

Я уже с драйвером озобрался он как часики работает!А вот мотор включается без прерывания!Что за непонятка :blink: Прерывания вообще как и не прописаны!Даю питание и всё начинает работать!Может всётаки в коде чтото не так?Я 5 раз уже проверил спаял я всё правильно!

Кстатти я ужастно хочу собрать и уже давно миди клаву на комп!Если есть ссылки дай пожалуйста!Мне на AVR только нужно,ато другое не прошью!

Да если не сложно напиши пожалуйста как организовать ШИМ на Atmega8 ???Что как выставитьв CodeVisionAVR C Compiler чтоб всё работало)

Изменено пользователем HOT ICE
Ссылка на комментарий
Поделиться на другие сайты

Ну ладно... давай разберемся:

Отключи от МК драйвер и посмотри какие уровни получаются на выходах МК PD0 и PD1, при включении устройства...???

Ссылка на комментарий
Поделиться на другие сайты

Ну ладно... давай разберемся:

Отключи от МК драйвер и посмотри какие уровни получаются на выходах МК PD0 и PD1, при включении устройства...???

Я поменял порты!

Теперь место PD0-PD1 у меня

PORTD.7=1;

PORTB.0=0;

Вот что происходит при включении!

Сразу при подаче питания на PB0 появляется лог1!а на PD7-лог 0!!!Когда делаю INT0 то на PB0становится 1,а PD7 становится 0!при этом так уровень и держится до следующего прерывания тоесть происходит простая инверсия!!!И например в тот момент когда PB0=0 PD7=1 я делаю INT1 то на несколько МКС происходит инверсия тоесть PD0 И PD7 меняю свой уровень на противоположный и опять становятся вот так PB0=0 PD7=1!И после етого становится 0 на всех портах!Воопще нечё не понимаю(

Изменено пользователем HOT ICE
Ссылка на комментарий
Поделиться на другие сайты

Нука покажи мне свою программу...

ТАк она не изменилась почти)

/*****************************************************

Chip type : ATmega8

Program type : Application

Clock frequency : 12,000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*****************************************************/

#include <mega8.h>

#include <delay.h>

/* Глобальные переменные */

unsigned char f_on=0, f_mozgi=0;

/* Инициализация порта */

void port_init()

{

PORTB=0x01;

DDRB=0x01;

PORTC=0x00;

DDRC=0xFF;

PORTD=0x00;

DDRD=0xFF; //0xf3

}

/* Инициализация внешних прерываний */

void int_init()

{

// External Interrupt(s) initialization

// INT0: On

// INT0 Mode: Rising Edge

// INT1: On

// INT1 Mode: Rising Edge

GICR|=0xC0;

MCUCR=0x0F;

GIFR=0xC0;

}

/* Инициализация аналогового компаратора (его выключение) */

void an_comp_init()

{

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

}

/* Функция включения работы двигателя */

void engine_on()

{

if (f_on)

{

#asm("cli");

//мотор1 вперёд

PORTB.0=1;

//мотор2 вперёд

PORTD.7=1;

delay_ms(500);

PORTB.0=0;

PORTD.7=1;

delay_ms(500);

#asm("sei");

}

}

/* Функция ВЫключения работы двигателя */

void engine_off()

{

PORTB.0=0;//стоп

PORTD.7=0;//стоп

}

/* Прерывание от вывода PD2(INT0) */

interrupt [EXT_INT0] void ext_int0_isr()

{

// Это прерывание возникает когда на выводе PD2 идет фронт сигнала

if (f_mozgi)

{

PORTD.7=1;

PORTB.0=0;

f_mozgi=0;

}

else

{

PORTD.7=0;

PORTB.0=1;

f_mozgi=1;

}

}

/* Прерывание от вывода PD3(INT1) */

interrupt [EXT_INT1] void ext_int1_isr()

{

// Это прерывание возникает когда на выводе PD3 идет фронт сигнала

if (f_on) f_on = 0;

else f_on = 1;

if (f_on==0) engine_off(); // Выключение

}

void main()

{

#asm("cli"); // Запрет всех прерываний

port_init();

int_init();

an_comp_init();

#asm("sei"); // Разрешение внешних прерываний

while(1) engine_on();

}

Ссылка на комментарий
Поделиться на другие сайты

Если чесно, у меня слов не хватает, чтобы выразить все эмоции которые, я испытывал когда читал инициализацию портов... :angry:

Постараюсь объяснить тебе по мягче...

Во первых: Ты говоришь программа почти не изменилась, в этом ты не прав, если ты изменишь один байт программы,

ты уже ее сильно поменяешь, в лучшем случае МК просто неправильно будет работать, в худшем ты его испортишь...

А вот это вот что:

/* Инициализация порта */

void port_init()

{

PORTB=0x01; :angry:

DDRB=0x01;

PORTC=0x00;

DDRC=0xFF;

PORTD=0x00;

DDRD=0xFF; //0xf3

}

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

Datasheet иногда надо читать :angry:

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

ДАааааааааааааа!!!!!!!!!!Всё я сделал!!!!!!!!!!!!УЛЁТТТТТТТ!!!!!!!СПАСИБИЩЕ!!!!!!!!!

Слушай если не сложно можеш дать код для часов на MEGA8???Только часов и всё!!!Очень-очень сейчас нужно!!!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...