роботы робототехника микроконтроллеры


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

> Без описания
Artem Post Id


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


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



Понятненько, ну с прерываниями вроде разобрался.
Раз уж тема про код создана то я ещё спрошу:
вот значит теперь задача с АЦП всё работает:
CODE:
#define F_CPU 1000000UL // указываем частоту в герцах
#include <avr/io.h> // подключаем библиотеку АВР
#include <util/delay.h> // подключаем библиотеку задержек

int main (void) {

unsigned int u=0;

DDRD = 0xFF;

DDRB = 0xFF;

ADCSRA=(1<<ADEN)|(1<<ADPS1)|(1<<ADPS0); // разрешаем АЦП, предделитель 8

ADMUX=(1<<REFS1)|(1<<REFS0)|(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3); // внутренний источник опорного напряжения, вход PC0



while (1==1) {

ADCSRA |= (1 << ADSC);

while ((ADCSRA&(1 << ADIF))== 0);

u = (ADCL|ADCH << 8);

if (u>230) { //0.625V

PORTD = (1 << PD0);

}

else {

PORTD = (0<<PD0);

}

if (u >300) { //1.25V

PORTD |=(1 << PD1);

}

else {

PORTD |= (0<<PD1);

}

if (u > 380){ //1.875V

PORTD |=(1 << PD2);

}

else {

PORTD |= (0<<PD2);

}

if (u > 510) { //2.5V

PORTD |=(1 << PD3);

}

else {

PORTD |= (0<<PD3);

}

if (u > 640){ //3.125V

PORTD |=(1 << PD4);

}

else {

PORTD |= (0<<PD4);

}

if (u > 770) { //3.75V

PORTD |=(1 << PD5);

}

else {

PORTD |= (0<<PD5);

}


if (u > 880) { //4.375V

PORTD |=(1 << PD6);

}

else {

PORTD |= (0<<PD6);

}

if (u > 950) { //5V

PORTD|=(1 << PD7);

}

else {

PORTD |= (0<<PD7);

}

}

}


вобщем крутим переменный резистор, загораются светодиоды, чем больше напряжение тем больше загорается светодиодов, такая шкала получается, хотел бы я сделать так, чтобы при изменении напряжения огонёк бы бегал, а не все загорались.
Я что-то никак не могу двойное условие сделать что вроде:
200<u<220
Помогите пожалуйста Улыбка
 
 Top
Predator Супермодератор Post Id


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


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



CODE:
((u>200)&&(u<220))

как-то так....
 
 Top
Artem Post Id


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


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



А, вот так, я пробовал что-то вроде этого, только с одним "И", сейчас попробуем с двумя. Спасибо.
 
 Top
Predator Супермодератор Post Id


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


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



с одним & - побитовая операция, с 2-мя - логическая операция.
 
 Top
elmot Post Id



Гуру


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



Наглядный пример
1 & 1 ==1
1 && 1 ==1
2 & 1 == 0
2 && 1 == 1
3 & 2 == 2
3 && 2 == 1

аналогично

1 | 1 ==1
1 || 1 ==1
2 | 1 == 3
2 || 1 == 1
3 | 2 == 3
3 || 2 == 1
 
 Top
killgur Post Id



Гуру


Сообщений всего: 1189
Дата рег-ции: Февр. 2010  



в двоичном виде было бы более наглядно...


2&1==0

0010
&0001
=0000


3&2==2

0011
&0010
=0010


3&&2==1
0011 && 0010==0001

2&&1==1
0010 && 0001==0001

потому как оба выражения истинны


(Отредактировано автором: 02 Апреля, 2013 - 13:22:19)

 
 Top
Страниц (2): « 1 [2]
« Программирование микроконтроллеров »


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





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru