роботы робототехника микроконтроллеры


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

> Без описания
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



Цитата:
Полистал ветку- это пожалуй самая бардачная ветка на форуме

не, не самая.....
что-то модераторы сачкуют...
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



Всё, вроде код готов, этот я протестировал, но это не совсем то, что вы хотели, просто этот код я написал ещё до ваших пожеланий, работает по вышеописанному мной алгоритму, частота микроконтроллера 1 Мегагерц, с изменением скорости вращения двигателя код тоже готов, только не протестирован, как только всё отлажу сразу выложу.
Вот код:
CODE:
#include <avr/io.h> // подключаем библиотеку АВР

#include <util/delay.h> // подключаем библиотеку задержек

int main (void) { // главная функция программы

DDRD = 0xFF; // конфигурируем порт D как выход, к нему мы будем подключать входы драйвера двигателя, а так же светодиоды для индикации

DDRC = 0x00; // конфигурируем порт С как вход, к нему мы подключим две кнопки

PORTC = 0xFF; // подключаем внутренние подтягивающие резисторы, для избежания дребезга контактов

int i; // определяем переменную, для включения/выключения машинки

int p; // переменная для выбора режима работы

i=0; // присваиваем начальные значения переменным

p=0;

while (1==1) { // бесконечный цикл, выполняется пока соблюдается условия в скобочках

if (!(PINC&(1<<PINC0))) { // если нажата кнопка на линии PC0 то...

if (i==0) { // проверяем чему равна переменная, если i=0 то...

i= i+1; // увеличиваем значение переменной на 1

}

else { // иначе...

i=0; // присваиваем переменной начальное значение

}

_delay_ms(100); // пауза в 0.1 секунды, для избежания дребезга контактов

}

if (!(PINC&(1<<PINC1))) { // если нажата кнопка на линии PC1 то...

if (p<3) { // проверяем значение переменной p, если оно меньше 3 то...

p++; // увеличиваем значение переменной на 1

}

else { // иначе...

p = 0; // присваиваем переменной начальное значение


}

_delay_ms(100); // снова пауза

}

if (p==0) { // если P = 0(1 режим) то...

PORTD = (1<<PD2); // зажигаем светодиод, который будет гореть при этом режиме

if (i==1) { // если i=1 (включено) то...

for (int t=0; t<30; t++) { // цикл "стирки" повторяется 30 раз

PORTD = (1<<PD0)|(0<<PD1)|(1<<PD5); // зажигаем индикатор включения и подаём нужные сигналы на вход драйвера: вращаем мотор в одну сторону

_delay_ms(1000); // пауза в 1 секунду

PORTD = (0<<PD0)|(1<<PD1)|(1<<PD5); // вращаем мотор в другую сторону

_delay_ms (1000); // снова пауза в 1 секунду

}

for (int r=0; r<20; r++) { // цикл " сушки" повторяется 20 раз

PORTD = (1<<PD0)|(0<<PD1)|(1<<PD5); // всё тоже самое

_delay_ms(5000); // но пауза 5 секунд

PORTD = (0<<PD0)|(1<<PD1)|(1<<PD5); // всё тоже самое

_delay_ms(5000); // снова пауза 5 секунд

}

i=0; // стоп!

PORTD &=~_BV(PD5); // выключаем светодиод индикации работы

}

}

else {

PORTD = (0<<PD2);

}

if (p==1) { // здесь режим стирки, всё тоже самое только без сушки

PORTD = (1<<PD3);

if (i==1) {

for (int t=0; t<30; t++) {

PORTD |=_BV(PD5);

PORTD = (1<<PD0)|(0<<PD1)|(1<<PD5);

_delay_ms(1000);

PORTD = (0<<PD0)|(1<<PD1)|(1<<PD5);

_delay_ms (1000);

}

i=0;

PORTD &=~_BV(PD5);


}


else {

PORTD = (0<<PD0)|(0<<PD1);

}

}

else {

PORTD = (0<<PD3);

}

if (p==2) { // тут тоже всё тоже самое но без стирки

PORTD = (1<<PD4);

if (i==1) {

for (int r=0; r<20; r++) {

PORTD = (1<<PD0)|(0<<PD1)|(1<<PD5);

_delay_ms(5000);

PORTD = (0<<PD0)|(1<<PD1)|(1<<PD5);

_delay_ms(5000);

}

i=0;

PORTD &=~_BV(PD5);


}

}

else {

PORTD = (0<<PD4);

}

}
}



Вот так, будут вопросы, обращайтесь Улыбка
P.S. извините, что так долго не выкладывал код, я на дучу уезжал, компьютер там есть, а там интернета нет Улыбка
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



Artem обождите, дайте человеку хотя-бы:
1) определится с концепцией (дизайнерско-эргономической частью)
2) накопить всех деталек
3) собрать это в единое устройство
а там еще изменений и модификаций навозникает.....
 
 Top
Semen8991 Post Id


Рядовой


Сообщений всего: 12
Дата рег-ции: Июнь 2013  



Наверное с 2 кнопками будет, а так программа хорошая, но желательно как мне хотелось!) Спасибоооооо!!
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



я не Сист, но выпендрюсь- (ну про то что через строку- это вам не газета, не нужно.)

а во вторых
PORTD = (1<<PD2); // зажигаем светодиод, который будет гореть при этом режиме
можно же
#define LedModeOn PORTD = (1<<PD2);

??? ведь кому-то может удобней и другие порты? Зачем использовать Си, когда Вы на асме почти весь код пишите?
(это можно было и асмовскими макросами сделать (PORTD = (1<<PD2)Подмигивающий)
???
падон муа , де сонпри
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



cjA пишет:
ну про то что через строку

Так просто читается легче.
cjA пишет:
Зачем использовать Си, когда Вы на асме почти весь код пишите?

К сожалению асемблер не знаю Грустный
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



я не говорю об универсальном ассемблере. я говорю про команды МК, который Вы программируете. как их не знать?
чем занимается процедура _delay_ms ?
я вот не знаю, может она на сайт пентагона мой кэш пересылает? потому и не использую.
 
 Top
Петр Киселев Post Id



Гуру


Сообщений всего: 2397
Дата рег-ции: Окт. 2012  



Процедура delay_ms устанавливает время работы того или иного порта в милисекундах, например 5000 - 5 сек. Или _delay_ms (1000); = 1 сек.
Не надо выпендриваться, cjA!
 
 Top
Vladimir72 Post Id



Великий стратег


Сообщений всего: 193
Дата рег-ции: Май 2012  



ассемблер дело тонкое, это тоже самое как в анатомии каждое мышечное волокно описать,
а их тысячи, мне кажется Си проще, если я не прав поправте.
(Добавление)
Artem код писали в CodeVisionAVR
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



Vladimir72 пишет:
Artem код писали в CodeVisionAVR

Нет, в WinAVR.
Я согласен, СИ намного проще в освоении, чем ассемблер, я как-то пытался начать изучать его, но очень много всего нужно запомнить Улыбка
 
 Top
Semen8991 Post Id


Рядовой


Сообщений всего: 12
Дата рег-ции: Июнь 2013  



А программа будет? А то не знаю, покупать детали или нет(
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



дык пост Artem от 17 июня и содержит исходный код программы для вас.
дальше совместными усилиями домодифицируем
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



началось, вот!
А как я могу промолчать? Си- это макроассемблер.
Дак вы ассемблер от АТ&T кусали? Раньше GCC все на него переводил, даже родные интеловские.
Шоу маст го он.
Я за асм....
(Добавление)
я за асм в смысле маленьких МК типа мега168
(Добавление)
зачем вот так писать? кто помнит, да даже и Вы- что скрывается за этими битами?
PORTD = (0<<PD0)|(1<<PD1)|(1<<PD5); // всё тоже самое
Для чего после пи кода создан асм, а потом Си, а потом Ада?

(ктому-же если полистаете листинг- то увеличиваете длину кода)
 
 Top
Artem Post Id


Главнокомандующий


Сообщений всего: 347
Дата рег-ции: Май 2012  



cjA, я не понимаю суть ваших притензий, что вам не нравиться? Ну написал я код на СИ, ну немного длиннее чем на ассемблере, у нас проблем с памятью нет.
Ну а что скрывается за этими битами это не очень важно, ну да, несколько регистров, логических вентелей, это же не так важно, в данный момент.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



короче чем на асме.
mov PORTD , (0<<PD0)|(1<<PD1)|(1<<PD5); // всё тоже самое

никаких притензтй нет, ты не девочка что в аптеку ходила.
 
 Top
Страниц (5): « 1 2 3 [4] 5 »
« Программирование микроконтроллеров »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru