Форум myROBOT.ru » Роботы и робототехника » Делимся опытом » Системы счисления

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

1. SeRgEj - 21 Ноября, 2009 - 12:00:58 - перейти к сообщению
Привет всем! Я тут собрался робота делать на ATmega8. Вот мне надо От порта D вывод1 использовать на вход, а все остальные на выход. Я вот к чему веду: мне надо двоичный код 11111101 перевести в шестнадцатеричный, сам я не очень шарю в этих системах счисления. Я понимаю, что можно использовать и двоичный код, но на сколько я знаю это делать не рекомендуется. Помогите пожалуйста. Заранее СПАСИБО!
2. nick2008 - 21 Ноября, 2009 - 12:46:32 - перейти к сообщению
Пополам распилите 1111-1101 , сразу видно, что первая, это F, код 0xF?

Вторая буква находится так: 1111 это F, 1110 это E, 1101 это D, и т.п., пятимся раком назад, полная кирасивая табличка в википедии, google=Шестнадцатиричная система.

Итого у вас будииит.. звяк звяк звяк.. 0xFD Надеюсь, не ошибся, потому, что если ошибся, то у вас все сгорит Голливудская улыбка Успехов.
3. бот_м_16 - 21 Ноября, 2009 - 12:48:22 - перейти к сообщению
если не сикрет кем не рекомендуется применять двоичную систему исчислений ? рёв в три ручья
4. nest - 21 Ноября, 2009 - 13:04:45 - перейти к сообщению
взять калькулятор виндовский и сделать в нём инжинерный вид. в нём и вычислять и переводить.

я так всегда делаю :)
5. SeRgEj - 21 Ноября, 2009 - 14:55:16 - перейти к сообщению
Цитата:
если не сикрет кем не рекомендуется применять двоичную систему исчислений ?

Не помню... Но сам подумай в одной программе применять двоичную сс с шестнадцатеричной...
6. бот_м_16 - 21 Ноября, 2009 - 14:58:09 - перейти к сообщению
И что ?
какая разница в какой системе представлять числа ?
главное что бы компилятор их правильно интерпретировал!!!!!!!!!! Мистика
7. Гость - 21 Ноября, 2009 - 15:08:43 - перейти к сообщению
Мне уже во сне эти 1101, 1001...1111 снятся после архитектуры ЭВМ не в себе
8. SeRgEj - 21 Ноября, 2009 - 17:10:34 - перейти к сообщению
Ну прогу написал... А никто не подскажет как компилировать через Avr Studio? Просто я немецкий учу и в английском не шарю...
9. nest - 21 Ноября, 2009 - 17:45:18 - перейти к сообщению
SeRgEj. на каком языке писали ? (Си, асм)
в чём писали ?
почему хочется именно в Avr Studio?
10. nick2008 - 21 Ноября, 2009 - 18:40:00 - перейти к сообщению
AVR Studio ставится после WinAvr,
она сразу предлагает выбрать язык проекта, проще на первых порах C (GCC),
и обязательно выбрать назначить папку ее хранения на английском и покороче

В окошко укладываете программу, она выполняет с якобы микропроцессором,
и есть окно смотреть порты. Для отладки красные точечки на характерные
места остановов программы расставляем (а то слишком быстро выполняет)
Built+Run - там магнитофонная кнопка старта есть..

Если программатор совместим с ней, то можно записать в память, иначе ищем
в папке Hex-файл и закачиваем PonyProg (он работает с дешевыми программаторами)
Первую программу из моего учебника я залил, таким образом, и она мигала,
короче.. таковую и стоит на первых порах пробовать

Таков опыт, и в сети есть предупреждение, что студию ставить нужно Поверх
WinAVR, она упрощает манипуляции и довольно проста, освоитесь
11. SeRgEj - 21 Ноября, 2009 - 21:56:55 - перейти к сообщению
Писал в системе Си. Люди я программированием только, что занялся и многово не знаю. Да ещё никак руки не доходят подключить системник с 98-ой виндой, ато на седьмой не идёт, вылезает командная строка, затем исчезает... Да и ещё... Проверьте программу, которую я написал прокатит ли она... Это версия с пояснениями(она не влезет в ATmega8), а ещё есть без пояснений она весит всего 4Kb. Заранее огромное спасибо.
CODE:
/**********************************************************
Четырёхногий робот
***********************************************************/

#include <avr/io.h>

/***************** Функция задержки ****************/
void delay(unsigned short ms) // Минимальная задержка с кварцем 8 МГц - 1 мс
{
unsigned short i, j, k; // объявляем переменные

for (i=0; i<ms; i++) // главный цикл формирования задержки
for (j=0; j<185; j++) // вложенный цикл формирования задержки
k++; // произвольное действие
}
/****************************************************/


int main(void) // начало основной программы
{

DDRC = 0xff; // все выводы порта C сконфигурировать как выходы
DDRD = 0b11111101; // Почти все выводы порта D сконфигурировать как входы


PORTD = 0b00000010; // установить "1" на выводе 1 порта D,
// включаем подтягивающие резисторы

while (1) { // Бесконечный цикл

// ПРОВЕРЯЕМ СИГНАЛ НИЗКОГО УРОНЯ ОТ ФОТОДАТЧИКА

if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D
delay(15000); {
while (1) {
// -------------- Разворачиваемся ---------------

PORTC |= _BV(PC2); // М4 вперёд
PORTD |= _BV(PD2); // М1 вперёд
PORTD |= _BV(PD3); // М2 назад
PORTC |= _BV(PC4); // М3 назад
PORTD &= ~_BV(PD5); // опускаем четвёртую ногу

delay(500); // ждем пол секунды

PORTD |= _BV(PD0); // М1 назад
PORTC |= _BV(PC1); // поднимаем первую ногу

delay(500); // ждем пол секунды

PORTC |= _BV(PC5); // М3 вперёд
PORTD |= _BV(PD6); // поднимаем третью ногу
PORTC &= ~_BV(PC1); // опускаем первую ногу

delay(500); // ждем пол секунды

PORTD |= _BV(PD4); // М2 вперёд
PORTD |= _BV(PD7); // поднимаем вторую ногу
PORTD &= ~_BV(PD6); // опускаем третью ногу

delay(500); // ждем пол секунды

PORTC |= _BV(PC3); // М4 назад
PORTD |= _BV(PD5); // поднимаем четвёртую ногу
PORTD &= ~_BV(PD7); // опускаем вторую ногу

delay(500); // ждем пол секунды

// -----------------------------------------------------
}

}
else

while (1) { // Бесконечный цикл

// ------------------ Шагаем вперёд ------------------

PORTD |= _BV(PD4); // М2 вперёд
PORTD |= _BV(PD7); // поднимаем вторую ногу
PORTC &= ~_BV(PC2);
PORTC &= ~_BV(PC5);
PORTD &= ~_BV(PD2);
PORTC &= ~_BV(PC1);
PORTD &= ~_BV(PD6);
PORTD &= ~_BV(PD5);

delay(500); // ждем пол секунды

PORTC |= _BV(PC2); // М4 вперёд
PORTD |= _BV(PD5); // поднимаем четвёртую ногу
PORTD &= ~_BV(PD4);
PORTD &= ~_BV(PD7);

delay(500); // ждем пол секунды

PORTC |= _BV(PC5); // М3 вперёд
PORTD |= _BV(PD6); // поднимаем третью ногу
PORTC &= ~_BV(PC2);
PORTD &= ~_BV(PD5);

delay(500); // ждем пол секунды

PORTD |= _BV(PD2); // М1 вперёд
PORTC |= _BV(PC1); // поднимаем первую ногу
PORTC &= ~_BV(PC5);
PORTD &= ~_BV(PD6);

delay(500); // ждем пол секунды

PORTD |= _BV(PD0);
PORTC |= _BV(PC3);
PORTC |= _BV(PC4);
PORTD |= _BV(PD3);
PORTC &= ~_BV(PC1);
PORTD &= ~_BV(PD2);


delay(600); // ждем ~пол секунды

// Смещаемся вперёд
}


} // закрывающая скобка бесконечного цикла

} // закрывающая скобка основной программы
12. nick2008 - 21 Ноября, 2009 - 22:09:44 - перейти к сообщению
На мой взгляд, если это первая ваша программа, вы выбрали неудачную методику отладки. Это как все спаять и включить радиоприемник в розетку. Наверняка будет дым.

Выкиньте из циклов все и сначала проверьте элементарное действие, работает ли вообще фотодатчик. А если вы его примотали не так, и он не живет??

Ошибка может быть не в программе, а в железе. Сначала примитив залейте, посмотрите, двигатель повключайте, от фотодатчика.

Сначала проверяется, притом, до фотодатчика, включается ли двигатель или тракт мертв.

Паузу тоже потестировать надо.. достаточна ли она. И есть иные методы ее формирования. Для механических движений нужны большие паузы. Циклы - они светом мигать. Слишком быстры.

Потом поделайте программно простейшие движения, Так ли они идут. Проще по кусочкам все тракты проверить.. потом все и соберется до кучи, вы хоть знать будете, работают ли части..
13. бот_м_16 - 21 Ноября, 2009 - 22:10:36 - перейти к сообщению
от количества коментов размера кода не зависит
14. SeRgEj - 21 Ноября, 2009 - 22:22:19 - перейти к сообщению
А при прошивке через WinAvr новой проги поверх старой, старая стирается автоматом или это надо делать самому?
15. nest - 21 Ноября, 2009 - 22:25:02 - перейти к сообщению
nick2008, :) +1
в тему:
Учимся любить юнит тесты
Основанная на Тестировании Разра ботка. Пример на языке PERL

SeRgEj, как уже сказал бот_м_16, от количества коментов в исходном коде размер прошивки не зависит. Это у вас пока ещё исходный код. который нужно скомпилировать компилятором языка СИ в прошивку, только уже её можно будет "зашить" в микроконтроллер.
Прошивка будет очень маленькой, по сравнению с исходным кодом. это всегда так, в любой программе.
(Добавление)
SeRgEj пишет:
при прошивке через WinAvr новой проги

старая стирается автоматом.