роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  


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

> Описание: Помогите пожалуйста из двоичного кода перевести в шестнадцатеричный
SeRgEj
Отправлено: 21 Ноября, 2009 - 12:00:58
Post Id



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


Сообщений всего: 268
Дата рег-ции: Нояб. 2009  





Привет всем! Я тут собрался робота делать на ATmega8. Вот мне надо От порта D вывод1 использовать на вход, а все остальные на выход. Я вот к чему веду: мне надо двоичный код 11111101 перевести в шестнадцатеричный, сам я не очень шарю в этих системах счисления. Я понимаю, что можно использовать и двоичный код, но на сколько я знаю это делать не рекомендуется. Помогите пожалуйста. Заранее СПАСИБО!

(Отредактировано автором: 21 Ноября, 2009 - 12:02:46)

 
 Top
nick2008
Отправлено: 21 Ноября, 2009 - 12:46:32
Post Id



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


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





Пополам распилите 1111-1101 , сразу видно, что первая, это F, код 0xF?

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

Итого у вас будииит.. звяк звяк звяк.. 0xFD Надеюсь, не ошибся, потому, что если ошибся, то у вас все сгорит Голливудская улыбка Успехов.
 
 Top
бот_м_16 Супермодератор
Отправлено: 21 Ноября, 2009 - 12:48:22
Post Id



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


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





если не сикрет кем не рекомендуется применять двоичную систему исчислений ? рёв в три ручья
 
 Top
nest Администратор
Отправлено: 21 Ноября, 2009 - 13:04:45
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





взять калькулятор виндовский и сделать в нём инжинерный вид. в нём и вычислять и переводить.

я так всегда делаю :)
Прикреплено изображение
Image1.png

 
 Top
SeRgEj
Отправлено: 21 Ноября, 2009 - 14:55:16
Post Id



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


Сообщений всего: 268
Дата рег-ции: Нояб. 2009  





Цитата:
если не сикрет кем не рекомендуется применять двоичную систему исчислений ?

Не помню... Но сам подумай в одной программе применять двоичную сс с шестнадцатеричной...
 
 Top
бот_м_16 Супермодератор
Отправлено: 21 Ноября, 2009 - 14:58:09
Post Id



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


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





И что ?
какая разница в какой системе представлять числа ?
главное что бы компилятор их правильно интерпретировал!!!!!!!!!! Мистика
 
 Top
Гость
Отправлено: 21 Ноября, 2009 - 15:08:43
Post Id


УДАЛЁН









Мне уже во сне эти 1101, 1001...1111 снятся после архитектуры ЭВМ не в себе
 
 Top
SeRgEj
Отправлено: 21 Ноября, 2009 - 17:10:34
Post Id



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


Сообщений всего: 268
Дата рег-ции: Нояб. 2009  





Ну прогу написал... А никто не подскажет как компилировать через Avr Studio? Просто я немецкий учу и в английском не шарю...
 
 Top
nest Администратор
Отправлено: 21 Ноября, 2009 - 17:45:18
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





SeRgEj. на каком языке писали ? (Си, асм)
в чём писали ?
почему хочется именно в Avr Studio?
 
 Top
nick2008
Отправлено: 21 Ноября, 2009 - 18:40:00
Post Id



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


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





AVR Studio ставится после WinAvr,
она сразу предлагает выбрать язык проекта, проще на первых порах C (GCC),
и обязательно выбрать назначить папку ее хранения на английском и покороче

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

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

Таков опыт, и в сети есть предупреждение, что студию ставить нужно Поверх
WinAVR, она упрощает манипуляции и довольно проста, освоитесь
 
 Top
SeRgEj
Отправлено: 21 Ноября, 2009 - 21:56:55
Post Id



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


Сообщений всего: 268
Дата рег-ции: Нояб. 2009  





Писал в системе Си. Люди я программированием только, что занялся и многово не знаю. Да ещё никак руки не доходят подключить системник с 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); // ждем ~пол секунды

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


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

} // закрывающая скобка основной программы

Прикреплено изображение
Безымянный.png

 
 Top
nick2008
Отправлено: 21 Ноября, 2009 - 22:09:44
Post Id



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


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





На мой взгляд, если это первая ваша программа, вы выбрали неудачную методику отладки. Это как все спаять и включить радиоприемник в розетку. Наверняка будет дым.

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

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

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

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

Потом поделайте программно простейшие движения, Так ли они идут. Проще по кусочкам все тракты проверить.. потом все и соберется до кучи, вы хоть знать будете, работают ли части..
 
 Top
бот_м_16 Супермодератор
Отправлено: 21 Ноября, 2009 - 22:10:36
Post Id



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


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





от количества коментов размера кода не зависит
 
 Top
SeRgEj
Отправлено: 21 Ноября, 2009 - 22:22:19
Post Id



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


Сообщений всего: 268
Дата рег-ции: Нояб. 2009  





А при прошивке через WinAvr новой проги поверх старой, старая стирается автоматом или это надо делать самому?
 
 Top
nest Администратор
Отправлено: 21 Ноября, 2009 - 22:25:02
Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  





nick2008, :) +1
в тему:
Учимся любить юнит тесты
Основанная на Тестировании Разра ботка. Пример на языке PERL

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

старая стирается автоматом.
 
 Top
Страниц (3): [1] 2 3 »
« Делимся опытом »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown