roboforum.ru

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


помогите с ацп

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

помогите с ацп

Сообщение sema-lap » 27 июл 2011, 20:10

создал робота для езды по линии всё получилось, кроме одного не могу одновременно считывать показания с обоих датчиков(в начале программы могу изменить , а в ходе не получается) смотрел даташит.
пишу на AVR Studio Atmega 32
вот код:
Код: Выделить всёРазвернуть
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

#define BACKWARD   ((0 << PC0)|(1 << PC1)|(1 << PC2)|(0 << PC3))      
#define FORWARD      ((1 << PC0)|(0 << PC1)|(0 << PC2)|(1 << PC3))

#define STOP      ((1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3))
#define MOTOR_PORT   PORTC

unsigned char u;
ISR(ADC_vect)
{
      if (ADCH == 0)
      {
         MOTOR_PORT = STOP;
         DDRB = 1 << PB0;
         PORTB = 1 << PB0;
      }
      else
      {
              DDRB = 0 << PB0;
         MOTOR_PORT = FORWARD;

              ADMUX  |= (0 << MUX0);//объявляем порт считывания adc0
         ADCSRA |= (1 << ADSC);//запускаем пробразование
         
            while(ADIF == 0);//ждём пока завершится преобразование
           
            OCR1A = ADCH;//считываем старшие биты и подаём мощность на моторы пропорциональна напр на ацп 
           
         
         ADMUX  |= (1 << MUX0);//меняем порт на adc1
         ADCSRA |= (1 << ADSC);
                                            
          while(ADIF == 0);
         
           OCR1B = ADCH;
         
      }
}

void init()
{

//////////PortC Initialization////////////////////////
   DDRC  = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
   PORTC = (1 << PC0)|(1 << PC1)|(1 << PC2)|(1 << PC3);
//-----------------------------------------------------
//////////PortD Initialization/////////////////////////
   DDRD  = (1 << PD4)|(1 << PD5);
   PORTD = 0;
//-----------------------------------------------------

//////////Timer 1 Initialization//////////////////////
   TCCR1A = (1 << COM1A1)|(1 << COM1B1)|(1 << WGM10);
   TCCR1B = (1 << WGM12)|(1 << CS10);
   TCNT1  = 0;
   OCR1A  = 0;
   OCR1B  = 0;
//-----------------------------------------------------

//////////ADC Intitialization////////////////////////
   ADMUX  = (1 << ADLAR)|(1<<MUX0);
   ADCSRA = (1 << ADEN)|(0 << ADATE)|(1 << ADSC)|(1 << ADIE)|(3 << ADPS0);
//----------------------------------------------------
   MOTOR_PORT = STOP;
   




};



int main(void)
{   
   init();
   sei();
   while(1)
   {
        
   };

}


вроде всё должно работать, но на практике порты не меняются
Кто не рискует тот не пьёт морковный сок!
sema-lap
 
Сообщения: 20
Зарегистрирован: 14 янв 2011, 02:46
Откуда: Санкт-Петербург
ФИО: Лапко Сёма

Re: помогите с ацп

Сообщение sema-lap » 01 авг 2011, 20:21

ну пожалуйста помогите мне, я чувствую что там осталось доделать пару строчек.
Кто не рискует тот не пьёт морковный сок!
sema-lap
 
Сообщения: 20
Зарегистрирован: 14 янв 2011, 02:46
Откуда: Санкт-Петербург
ФИО: Лапко Сёма

Re: помогите с ацп

Сообщение Michael_K » 01 авг 2011, 20:43

МК выполняет именно то, что вы написали.
Что вы ХОТЕЛИ написать, но почему-то не написали
- неизвестно ни нам, ни процессору. Какой же помощи вы от нас ждете?

ADMUX |= (0 << MUX0);//объявляем порт считывания adc0
Эта строчка ничего не делает.
ADMUX |= (1 << MUX0);//меняем порт на adc1
Эта строчка что-то делает, но вряд ли то, что написано в комментарии.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: помогите с ацп

Сообщение Korbofos » 02 авг 2011, 13:28

Вы походу не выбрали источник опорного напряжения...
ADMUX=(1<<REFS0)|(1<ADLAR)|adc_chanel; может как-то так...
Биты REFS1 REFS0
Хотя могу ошибаться....
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31