реклама на сайте
подробности

 
 
21 страниц V  « < 3 4 5 6 7 > »   
Reply to this topicStart new topic
> Изменение текста программы при смене компилятора и чипа
sigmaN
сообщение Dec 7 2010, 00:33
Сообщение #61


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Что делает TH<<8,что и куда переносится я понимаю,я не пойму зачем это делать?Почему нельзя просто написать return TCNT0?
ну так вы же теряете старший байт в таком случае! Ну вот представьте, что TCNT0 - это секунды,а TH - минуты.
Засекаете время путём обнуления этих двух переменных и пошли тикать часы. Вот мы имеем два отсчёта времени
37 секунд
1 минута 12 секунд
А теперь представьте, что из функции вы возвращаете только секунды(return TCNT0;). При сравнении окажется, что второй промежуток меньше. Хотя на самом деле это не так. Вот и TCNT0 мотает от 0 до 255, а дальше опять 0 и снова до 255. Каждый раз, когда он пробегает через 0 - вызывается прерывание и значение TH увеличивается на 1(в примере - это минуты. минуты ведь тоже прибавляются в момент перехода секунд через 0).

Цитата
Обязательно ли дергать строб при зажигании светодиодов, или достаточно подтянуть его к 1?
читайте про сдвиговые регистры. Притянуть - это типа резистор поставить? Ггг wink.gif

Цитата
Как можно подобрать соотношение напряжение - светодиод? Моделировать в Протеусе?
http://www.casemods.ru/services/raschet_rezistora.html
http://novikovmaxim.narod.ru/index.htm?htt...ron/connect.htm


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 7 2010, 15:10
Сообщение #62


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Ага, с ТН разобрался, меня ввело в заблуждение то, что обработка прерываний по переполнению написана после описания функции(так можно делать?) Что касается строба то есть схемы где нога висит на + питания, а в других её дергают и как лучше поступить мне ?

Про соотношение я не правильно выразился. Нужно сделать макросы с байтами светодиодов для ввода в регистры. Каждый байт должен соответствовать определенному количеству тиков таймера. Для всего этого мне нужно знать сколько тиков какому напряжению от датчика соответствует?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 8 2010, 03:49
Сообщение #63


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Ага, с ТН разобрался, меня ввело в заблуждение то, что обработка прерываний по переполнению написана после описания функции(так можно делать?)
Обработчик прерывания даже можно написать на чистом асме )) Не важно где он - важно, что он есть. И вообще, логика где? Он ведь исполняется по событию от таймера, независимо. Так какая разница где этот обработчик? Выше или ниже функции )

Цитата
Что касается строба то есть схемы где нога висит на + питания, а в других её дергают и как лучше поступить мне ?
Думаю, лучше дёргать http://www.alldatasheet.com/datasheet-pdf/...SIL/CD4094.html
Цитата
The data in each shift register stage
is transferred to the storage register when the STROBE input is high.
таким образом, если не дёргать вовремя - диоды будут отображать промежуточные состояния и скверно помигивать. А нужно делать правильно: загрузили в сдвиговый регистр данные, дёрнули строб на 1, чуть подержали и опять в 0 поставили. Таким образом данные из регистра сдвига будут отображены диодами именно в тот момент, когда уже всё готово. Если же строб притянуть к питанию - вы будете отображать не только нужное Вам(конечное) состояние, но и сам процесс заталкивания бита в регистры сдвига. И если при движении "вперед" это ещё может быть и приемлемо, то при движении "назад", когда эти сосиски(сдвиговые регистры ведь последовательно включены) чистить придётся(протикать клок, пока имеющаяся там 1 не проползет на выход), а потом затолкать другую 1 на нужное место - всё это будет видно в виде некоторых спецэффектов )


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 9 2010, 15:16
Сообщение #64


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Спасибо за развернутые ответы. Читал статью по вашей ссылке, про RC цепи. Там есть формула расчета времени зарядки конденсатора, но я не пойму какое сопротивление взять в моем случае? Зарядка идет через открытый транзисторный ключ, сопротивление которого очень мало,но какова его величина?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 9 2010, 19:00
Сообщение #65


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



резистор R2.

Не заморачивайтесь там с расчётами, составьте таблицу, вращая переменный резистор.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 9 2010, 22:17
Сообщение #66


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



А как узнать сколько таймер натикал?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 10 2010, 01:37
Сообщение #67


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



очевидно нужно как-то выводить значение функции.
тут либо uart либо из тех-же светодиодов двоичный индикатор сгородить) прикольно будет кстати.

А накакой вы уже стадии?
Что есть,чего нет?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 10 2010, 02:38
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Я думаю смоделировать всё это в Протеусе.А пока я в стадии изучения теории, поскольку в данный момент до сих пор нахожусь на работе и домой попаду только 16. Как только напишу часть кода, сразу выложу на проверку.
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 17 2010, 04:33
Сообщение #69


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Итак прибыв домой попробовал свои силы в новой для меня AVRStudio. Сразу возникло несколько вопросов.
Какой файл нужно инклудить для тиньки2313?Как разрешать и запрещать прерывания и нужно ли для этого что то инклудить?Вообщем вот код точнее даже заготовка
Код
typedef unsigned char byte;//определение собственных типов данных
typedef unsigned int word;

volatile byte TH;      //определение переменных

word Analog(void){     //используем аналоговый компаратор для замера времени заряда кондёра
DDRB.0=0;              //переводим 0 выход порта В в третье состояние
PORTB.0=0;
TCNT0=TH=0;            //очистим счётчик-накопитель
TCCR0=2;               //включаем таймер0 с пределителем CLK/8
DDRB.7=1;              //включить транзистор
while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0=0;               //выключаем таймер
DDRB.7=0;              //выключаем транзистор
DDRB.0=1;              //разряжаем кондёр
delay_ms(2);           //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

#pragma vector = TIMER0_OVF0      //обработка прерывания таймера0 по переполнению
interrupt void AnalogTick(void){  //при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}

что нужно добавить и что переделать?Функцию задержки delay_ms(x)ещё не делал поскольку не знаю как здесь правильно разрешать и запрещать глобальные прерывания.Можно ли как в CodeVision использовать команды на асме?
и вопрос как реализовать двоичный индикатор для отображения тиков таймера?
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 17 2010, 07:00
Сообщение #70


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



щас надо уезжать. вернусь часа через 3 и всё растолкую ))


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 17 2010, 10:15
Сообщение #71


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Какой файл нужно инклудить для тиньки2313?
инклудить надо avr/io.h. Для всех камней. А вот в свойствах проекта должен быть указан именно ваш контроллер. Этот io.h тогда сам и заинклудит чё надо )
Вообще, пока сделайте так:
Код
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
к типам из stdint.h советую привыкать сразу.
Цитата
Как разрешать и запрещать прерывания и нужно ли для этого что то инклудить?
Код
sei();//разрешить
cli(); //запретить


Цитата
то нужно добавить и что переделать?Функцию задержки delay_ms(x)ещё не делал
используйте типы из stdint.h ну и почитайте что это и зачем http://lord-n.narod.ru/download/books/wall...20/stdint_h.htm
на википедии русской статьи нет, есть инглиш http://en.wikipedia.org/wiki/Stdint.h в общем нагуглите если захотите...
Функция delay_ms(x) уже есть в util/delay.h Главное чтобы оптимизация в свойствах проекта была включена. Эта фишка многих раздражает и есть люди, которые принципиально не используют задержки из delay.h. Для вас пока что пойдет, дальше решите. Единственное, ещё на частоту контроллера обратите внимание(в свойствах проекта) чтоб стояла раельная на которой камень работать будет.
Код
Можно ли как в CodeVision использовать команды на асме?
команды на асме использовать можно, но нужно это делать только в тех редких случаях, когда на Си уж никак не описать того, что хотелось бы. Вот к примеру вместо sei(); конечно можно было бы команду асм вставить, но это подход неправильный, ведь есть интринсики sei() и cli() для этих целей и компилятор их более эффективно может использовать... но об этом потом... кстати, вот это бы изучить не мешало http://www.nongnu.org/avr-libc/user-manual/FAQ.html может и перевод где найдете. не знаю...

Цитата
и вопрос как реализовать двоичный индикатор для отображения тиков таймера?
А вот как научитесь светодиодики зажигать через регистры сдвиговые - тогда и ясно станет. Зачем вам сейчас именно калибровать эту крутилку? Это можно оставить и на потом ведь)



--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 17 2010, 12:18
Сообщение #72


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Цитата
инклудить надо avr/io.h. Для всех камней. А вот в свойствах проекта должен быть указан именно ваш контроллер.

С этим понятно
Цитата
к типам из stdint.h советую привыкать сразу.

Т.е. вместо
Код
typedef unsigned char byte;//определение собственных типов данных
typedef unsigned int word;

volatile byte TH;      //определение переменных

word Analog(void){


можно написать

Код
volatile uint8_t TH;
uintmax_t Analog(void){

так?

Цитата
Функция delay_ms(x) уже есть в util/delay.h Главное чтобы оптимизация в свойствах проекта была включена.

Как включить оптимизацию?
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 17 2010, 14:10
Сообщение #73


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Вот что я накропал на данный момент.
CODE
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define CD4094_DATA_ON CD4094_PORT|=1<<CD4094_PIN_DATA //установка ноги data в 1
#define CD4094_DATA_OFF CD4094_PORT&=~(1<<CD4094_PIN_DATA)//установка ноги data в 0
#define CD4094_CLK {CD4094_PORT|=1<<CD4094_PIN_CLK;
CD4094_PORT&=~(1<<CD4094_PIN_CLK);}//дёргаем ногу clk для проталкивания битов по регистру
#define CD4094_STB {CD4094_PORT|=1<<CD4094_PIN_STB;
CD4094_PORT&=~(1<<CD4094_PIN_STB);}//дёргаем ногу stb для поджига светодиодов
CD4094_DDR=(1<<CD4094_PIN_DATA)|(1<<CD4094_PIN_CLK);// нужные ноги ставим в 1

void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(Led[0]);//загрузка байта в 1 регистр
Shift_One_Byte(Led[1]);//загрузка байта во 2 регистр
CD4094_STB; //зажигаем светодиоды
}

void Shift_One_Byte(unsigned char dig){ //загрузка одного байта
char i=8;
while(i--){
if(dig&0X80){CD4094_DATA_ON}
else{CD4094_DATA_OFF}
dig<<1;
CD4094_CLK;
}
}

typedef unsigned char byte;//определение собственных типов данных
typedef unsigned int word;

volatile byte TH; //определение переменных

word Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
DDRB.0=0; //переводим 0 выход порта В в третье состояние
PORTB.0=0;
TCNT0=TH=0; //очистим счётчик-накопитель
TCCR0=2; //включаем таймер0 с пределителем CLK/8
DDRB.7=1; //включить транзистор
while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0=0; //выключаем таймер
DDRB.7=0; //выключаем транзистор
DDRB.0=1; //разряжаем кондёр
delay_ms(2); //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

#pragma vector = TIMER0_OVF_vect //обработка прерывания таймера0 по переполнению
interrupt void AnalogTick(void){ //при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}


void main(){
// инициализация порта D
//PD1-2 func=out,state=0
//PD4-6 func=in,state=P
PORTD=0x70; //установка битов порта D в 0 или 1
DDRD=0x06; //установка порта D на in или out
while(1){

if (PIND.6==0){ //если кнопка S0(см.схему) нажата
PORTD.2=1; //включить поворот (RUN)
PORTD.1=0; //реверс не включать
} //цикл выполняется пока действительно условие
if (PIND.4==0){ //если кнопка S2 нажата
PORTD.2=1; //включить поворот
PORTD.1=1; //включить реверс(REV)
}

}
}

Посмотрите пожалуйста повнимательней, всё ли здесь так?

Сообщение отредактировал RW6MKA - Dec 18 2010, 11:47
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Dec 17 2010, 16:54
Сообщение #74


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Т.е. вместо бла бла бла
можно написать
Код
volatile uint8_t TH;
uintmax_t Analog(void){
а зачем uintmax_t то? ведь там же uint16_t )

Цитата
Как включить оптимизацию?
В свойствах проекта там есть -O0 -O1 -O2 -Os по дефолту стоит -Os и это нормально. Чтобы работали задержки из delay.h главное не ставить -O0. Кстати, если оптимизация не включена, а delay.h подключен - будет warning при компиляции.



А что же касается коооода )))

Код
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>

#define  CD4094_PORT  PORTB
#define  CD4094_DDR   DDRB
#define  CD4094_PIN_DATA  3
#define  CD4094_PIN_CLK   2
#define  CD4094_PIN_STB   4
#define  CD4094_DATA_ON  CD4094_PORT|=1<<CD4094_PIN_DATA //установка ноги data в 1
#define  CD4094_DATA_OFF  CD4094_PORT&=~(1<<CD4094_PIN_DATA)//установка ноги data в 0
//вот тут он очень быстро дёрнет, нет задержки между изменениями уровня. А ещё такие макросы - зло. Делать inline функцию сюда.
#define  CD4094_CLK  {CD4094_PORT|=1<<CD4094_PIN_CLK;
                      CD4094_PORT&=~(1<<CD4094_PIN_CLK);}//дёргаем ногу clk для проталкивания битов по регистру
#define  CD4094_STB  {CD4094_PORT|=1<<CD4094_PIN_STB;
                      CD4094_PORT&=~(1<<CD4094_PIN_STB);}//дёргаем ногу stb для поджига светодиодов
//как-то у вас тут всё в куче... может быть сделать что-то вроде функции инициализации железа и туда это запихнуть?
CD4094_DDR=(1<<CD4094_PIN_DATA)|(1<<CD4094_PIN_CLK);// нужные ноги ставим в 1

void Shift_Reg(void){     //загрузка сдвигового регистра
   Shift_One_Byte(Led[0]);//загрузка байта в 1 регистр   //а вот тут будет error Shift_One_Byte undefined :)
   Shift_One_Byte(Led[1]);//загрузка байта во 2 регистр //а ещё я не знаю что такое Led[].
   CD4094_STB;            //зажигаем светодиоды
}

void Shift_One_Byte(unsigned char dig){  //загрузка одного байта
   char i=8;
//стандарты кодирования не учтены
//ужасный стиль )
//не знаю чё тут и как.. будете отлаживать.. я думаю тут не хватает задержек.. но надо смотреть времянки этих сдвиговых регистров в даташите..
   while(i--){
      if(dig&0X80){CD4094_DATA_ON}
      else{CD4094_DATA_OFF}
      dig<<1;
      CD4094_CLK;
      }
}

//вот это всё на мороз.  есть же стдинт
typedef unsigned char byte;//определение собственных типов данных
typedef unsigned int word;

volatile byte TH;      //определение переменных

//интересно, почему вы вверху макросы написали правильно, а тут перешли на применение CVAVRовских штучек.
//DDRB.0 = 0; не прокатывает
//чтобы очистить нулевой бит нужно как-то так
//DDRB &= ~(1 << 0); //сдвигать на ноль бесполезно, но для наглядности оставил.
word Analog(void){     //используем аналоговый компаратор для замера времени заряда кондёра
   DDRB.0=0;              //переводим 0 выход порта В в третье состояние
   PORTB.0=0;
//так можно, но лучше сделать два разных присвоения. Удобочитаемость кода всё-таки.
   TCNT0=TH=0;            //очистим счётчик-накопитель
   TCCR0=2;               //включаем таймер0 с пределителем CLK/8
//а вот тут надо DDRB |= 1 << 7;
   DDRB.7=1;              //включить транзистор
   while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
   TCCR0=0;               //выключаем таймер
   DDRB.7=0;              //выключаем транзистор
   DDRB.0=1;              //разряжаем кондёр
   delay_ms(2);           //время для разряда кондёра
   return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

//в avr-gcc прерывания оформляются иначе
//не нужна никакая прагма
//прагму нафиг  - #pragma vector = TIMER0_OVF_vect      //обработка прерывания таймера0 по переполнению
//interrupt void AnalogTick(void){  //при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
//пишем так:
ISR(TIMER0_OVF_vect)
{
   TH++;
}


void main(){
                 // инициализация порта D
                  //PD1-2 func=out,state=0
                  //PD4-6 func=in,state=P
   PORTD=0x70;    //установка битов порта D в 0 или 1
   DDRD=0x06;     //установка порта D на in или out
while(1){
  
    //ну тут опять эти цвавровские примочки пошли....
    if (PIND.6==0){    //если кнопка S0(см.схему) нажата
     PORTD.2=1;            //включить поворот (RUN)
     PORTD.1=0;            //реверс не включать
     }                     //цикл выполняется пока действительно условие
     if (PIND.4==0){    //если кнопка S2 нажата
     PORTD.2=1;            //включить поворот
     PORTD.1=1;            //включить реверс(REV)
     }
    
   }
}


пробуйте исправить всё и компилить...

да, ещё для прерываний нужно
#include <avr/interrupt.h> !!!


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
RW6MKA
сообщение Dec 18 2010, 00:07
Сообщение #75


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 25-10-10
Из: Ростовская обл.
Пользователь №: 60 401



Вот всё в исправленном состоянии
CODE
#include <stdint.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define CD4094_PORT PORTB
#define CD4094_DDR DDRB
#define CD4094_PIN_DATA 3
#define CD4094_PIN_CLK 2
#define CD4094_PIN_STB 4
#define OnBit(address,bit) (address|=(1<<bit))
#define OffBit(address,bit) (address&=~(1<<bit))

void CD4094_CLK(void){ //дёргаем ногу clk для проталкивания битов по регистру
OnBit(CD4094_PORT,CD4094_PIN_CLK);
delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_CLK);
}
void CD4094_STB(void){ //дёргаем ногу stb для поджига светодиодов
OnBit(CD4094_PORT,CD4094_PIN_STB);
delay_ms(2);
OffBit(CD4094_PORT,CD4094_PIN_STB);
}
CD4094_DDR=(1<<CD4094_PIN_DATA)|(1<<CD4094_PIN_CLK);// нужные ноги ставим в 1

//Led[] макрос в первый элемент которого будет заноситься код строки а во второй код столбца соответствующие
//тикам таймера в данный момент
void Shift_Reg(void){ //загрузка сдвигового регистра
Shift_One_Byte(Led[0]);//загрузка байта в 1 регистр//а вот тут будет error Shift_One_Byte undefined sm.gif//почему?
Shift_One_Byte(Led[1]);//загрузка байта во 2 регистр
CD4094_STB(); //зажигаем светодиоды
}

void Shift_One_Byte(unsigned char dig){ //загрузка одного байта
char i=8;
while(i--){
if(dig&0X80){OnBit(CD4094_PORT,CD4094_PIN_DATA)}
else{OffBit(CD4094_PORT,CD4094_PIN_DATA)}
dig<<1;
CD4094_CLK();
}
}


volatile uint8_t TH; //определение переменных

uint16_t Analog(void){ //используем аналоговый компаратор для замера времени заряда кондёра
OffBit(DDRB,0); //переводим 0 выход порта В в третье состояние
OffBit(PORTB,0);
TCNT0=0; //очистим счётчик-накопитель
TH=0;
TCCR0=2; //включаем таймер0 с пределителем CLK/8
OnBit(DDRB,7); //включить транзистор
while(!(ACSR&(1<<5))); //ждём изменения состояния бита АСО на выходе компаратора
TCCR0=0; //выключаем таймер
OffBit(DDRB,7); //выключаем транзистор
OnBit(DDRB,0); //разряжаем кондёр
delay_ms(2); //время для разряда кондёра
return(TH<<8 | TCNT0); //возвращаем результат замера времени
}

ISR(TIMER0_OVF_vect){ //обработка прерывания таймера0 по переполнению
//при переполнении 8-битного счётчика таймера увеличивать байт ТН на 1
TH++;
}



void main(void){
// инициализация порта D
//PD1-2 выход,уровень 0
//PD4-6 вход,подтягивающие резисторы включены
PORTD=0x70; //установка битов порта D в 0 или 1
DDRD=0x06; //установка порта D на in или out
while(1){

if (PIND6==0){ //если кнопка S0(см.схему) нажата
OnBit(PORTD,2); //включить поворот (RUN)
OffBit(PORTD,1); //реверс не включать
} //цикл выполняется пока действительно условие
if (PIND4==0){ //если кнопка S2 нажата
OnBit(PORTD,2); //включить поворот
OnBit(PORTD,1); //включить реверс(REV)
}

}

}

Пробовал компилить вот как ругается
make: Makefile: No such file or directory
make: *** Нет правила для сборки цели `Makefile'. Останов.
Build failed with 1 errors and 0 warnings...

Сообщение отредактировал RW6MKA - Dec 18 2010, 11:38
Go to the top of the page
 
+Quote Post

21 страниц V  « < 3 4 5 6 7 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 17:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01562 секунд с 7
ELECTRONIX ©2004-2016