roboforum.ru

Технический форум по робототехнике.

Вопросы по Line Tracer

Вопросы по Line Tracer

Term » 30 мар 2008, 22:17

Я тут собрался делать Line Tracer из статьи Майробота. Есть несколько вопросов: у меня программа для робота содрана с сайта. Я ее скопировал в CVAVR и он выдал мне, что там аж 4 ошибки. Вот какие они:
#include <avr/io.h>
И компилятор CVAVR пишет что здесь ошибка, "Cant open #include file: avr/io.h"
DDRD = 0x00; // все выводы порта D сконфигурировать как входы, пишет: "undefined simbol "DDRD""
ну и еще вот

PORTD = 0xff; // установить "1" на всех выводах порта D, пишет "undefined simbol "PORTD""
И еще:
if (!(PIND & (1<<PIND1))) // проверить "0" на линии 1 порта D, пишет "undefined simbol "PIND""
РОсьба модерам: ПЛЗ НЕ ПЕРЕНОСИТЕ МОЮ ТЕМУ В СООТВЕТСТВУЮЩИЙ РАЗДЕЛ LINE TRACER, ТАМ ТЕМУ НИКТО НЕ ПРОЧТЕТ. :O:
ПОМОГИТЕ ХТО НИБУД :RTFM:

Re: Вопросы по Line Tracer

Myp » 30 мар 2008, 23:35

если ругается на #include <avr/io.h>

значит этого файлика нет там где он нужен
короче в папке нету этого файла

поищи поиском файл io.h и положи туда куда надо
либо измени строку #include <avr/io.h> на #include <то место где лежит в реале у тебя этот файлик io.h>

остальные ошибки из за того нет этого хедера

Re: Вопросы по Line Tracer

Vooon » 30 мар 2008, 23:45

это вопрос не про лайн-трейсер а про различия компиляторов.
программа написана для gcc, а ты ее cvavr'у без переделки пихаеш!

Re: Вопросы по Line Tracer

Term » 30 мар 2008, 23:48

А чо за файл такой io.h ? :oops:

Добавлено спустя 1 минуту 38 секунд:
Ну и чо за переделка такая? Никогда не встречал. :oops:

Re: Вопросы по Line Tracer

Сергей » 31 мар 2008, 00:01

Term, почитай книжки про программирование, тебе много станет ясно. Советую Керниган и Ритчи Язык Си почитать

Re: Вопросы по Line Tracer

Vooon » 31 мар 2008, 00:07

просто установи WinAVR (предвосхищая вопрос: "а где скачать", ответ - спроси у гугла как пройти в библиотеку :) )
далее найди папку include а в ней avr вот там и будет лежать io.h
открой и почитай, там все написано, если понятно не станет повтори изучение языка.

@ Myp если указавать адресс то так
Код: Выделить всёРазвернуть
#include "/full/path/to/file" // полный путь
#include "../file" // относительный путь

Re: Вопросы по Line Tracer

Term » 31 мар 2008, 02:51

Сделал как Мур сказал - 1 ошибка исправлена и осталось ещё 4. Ктонибудь киньте мне WinAVR одним архивом. Адрес : demid-z@yandex.ru
Мне учиться нужно конвертировать а то на Майроботе все помешаны на WinAVR. Ну если кидать никто не собираеться то хотябы напишите, как конвертировать. А то не двигается дело нифига. :(

Re: Вопросы по Line Tracer

rig » 31 мар 2008, 06:15

нужно в начале программы вставить такую строчку
#include <tiny2313.h>
МК должен соответствать используемому.

Re: Вопросы по Line Tracer

loid » 31 мар 2008, 08:21

Демаю строку #include <io.h> можно заменить на #include <stdio.h>
Всё должоно работать

Re: Вопросы по Line Tracer

Term » 31 мар 2008, 09:44

rig писал(а):нужно в начале программы вставить такую строчку
#include <tiny2313.h>
МК должен соответствать используемому.

Да я Мегу 8 юзаю. На счет того файла про который говорил Loid там есть и файл io.h и файл stdio.h . Ладно, приду из школы попробую.

Re: Вопросы по Line Tracer

Myp » 31 мар 2008, 10:50

а я чото и не глянул подо что там исходник выложен... :oops:


кстати
ктонить мне объяснит гениальность вот этой строки:
Код: Выделить всёРазвернуть
if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D

ато я своим скудным мозгом написал бы
Код: Выделить всёРазвернуть
if PIND.1 == 0 // проверить "0" на линии 1 порта D


Добавлено спустя 8 минут 37 секунд:
далее

открываем ссылку http://myrobot.ru/stepbystep/pr_mcports.php и читаем
Например, команда

PORTD |= 1<<3;

установит "1" (сигнал высокого уровня) на выводе PD3, если вывод сконфигурирован как выход.

Команда

PORTD &= ~(1<<4);

установит "0" (сигнал низкого уровня) на выводе PD4, если вывод сконфигурирован как выход.

В AVR GCC сдвиг можно осуществлять и с помощью функции _BV(), что даже предпочтительней, так как в этом случае компилятор сам выполняет поразрядный сдвиг и вставляет результат в компилируемый код. Это обеспечивает отсутствие затрат времени во время непосредственного выполнения кода в микроконтроллере.

В случае использования функции _BV() две предыдущие команды будут выглядеть следующим образом.

PORTD |= _BV(PD3); // установить "1" на линии 3 порта D

PORTD &= ~_BV(PD4); // установить "0" на линии 4 порта D


тоесть чтоб небыло ошибок нуно переделать без использования функции _BV()

Добавлено спустя 2 минуты 13 секунд:
короче вот что вышло у меня

Код: Выделить всёРазвернуть
#include <mega8.h>

// Declare your global variables here

void main(void)
{



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


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

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

      if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D
      {
                  // ---- включаем левый мотор, останавливаем правый -----

                  PORTC |= 1<<1;          // установить "1" на линии 1 порта C
                  PORTC &= ~(1<<2);       // установить "0" на линии 2 порта C
                  PORTC |= 1<<3;          // установить "1" на линии 3 порта C
                  PORTC &= 1<<4;          // установить "1" на линии 4 порта C

                  // -----------------------------------------------------
      }
      else
      {
                        // ---- останавливаем левый мотор, включаем правый -----

                        PORTC &= 1<<1;          // установить "1" на линии 1 порта C
                        PORTC |= 1<<1;          // установить "1" на линии 2 порта C
                        PORTC &= 1<<3;          // установить "1" на линии 3 порта C
                        PORTC |= ~(1<<4);       // установить "0" на линии 4 порта C

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


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


но я хз правильно или нет потому как не проверял )
но компилитсо в кодевижене :crazy:

Re: Вопросы по Line Tracer

Master » 31 мар 2008, 12:25

Код: Выделить всёРазвернуть
if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D

Меня тоже убивает такая формулировка, но это аргументируют тем что якобы эта строчка понятна любому МК. Хотя кому нужен такой МК который не понимает нормльного языка, тоже вопрос.

Re: Вопросы по Line Tracer

Myp » 31 мар 2008, 12:37

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

Re: Вопросы по Line Tracer

Term » 31 мар 2008, 13:24

Пасиба бальшое, через 3 часа вернусь домой и программу в комп загружу. Щас буду компоненты по Инету заказывать пока есть промежуток 45мин между уроками. :)

Re: Вопросы по Line Tracer

Term » 31 мар 2008, 23:10

У меня WMlab не симулирует почему то и пишет что 192 ошибки. Чо делать?


Rambler\'s Top100 Mail.ru counter