Я тут собрался делать 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, ТАМ ТЕМУ НИКТО НЕ ПРОЧТЕТ. ПОМОГИТЕ ХТО НИБУД
значит этого файлика нет там где он нужен короче в папке нету этого файла
поищи поиском файл io.h и положи туда куда надо либо измени строку #include <avr/io.h> на #include <то место где лежит в реале у тебя этот файлик io.h>
просто установи WinAVR (предвосхищая вопрос: "а где скачать", ответ - спроси у гугла как пройти в библиотеку ) далее найди папку include а в ней avr вот там и будет лежать io.h открой и почитай, там все написано, если понятно не станет повтори изучение языка.
Сделал как Мур сказал - 1 ошибка исправлена и осталось ещё 4. Ктонибудь киньте мне WinAVR одним архивом. Адрес : demid-z@yandex.ru Мне учиться нужно конвертировать а то на Майроботе все помешаны на WinAVR. Ну если кидать никто не собираеться то хотябы напишите, как конвертировать. А то не двигается дело нифига.
установит "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 секунд: короче вот что вышло у меня
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
if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D
Меня тоже убивает такая формулировка, но это аргументируют тем что якобы эта строчка понятна любому МК. Хотя кому нужен такой МК который не понимает нормльного языка, тоже вопрос.
Пасиба бальшое, через 3 часа вернусь домой и программу в комп загружу. Щас буду компоненты по Инету заказывать пока есть промежуток 45мин между уроками.