roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 21:49

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: помогите с ацп
СообщениеДобавлено: 27 июл 2011, 20:10 
Не в сети

Зарегистрирован: 14 янв 2011, 02:46
Сообщения: 20
Откуда: Санкт-Петербург
ФИО: Лапко Сёма
создал робота для езды по линии всё получилось, кроме одного не могу одновременно считывать показания с обоих датчиков(в начале программы могу изменить , а в ходе не получается) смотрел даташит.
пишу на 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)
   {
        
   };

}


вроде всё должно работать, но на практике порты не меняются

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с ацп
СообщениеДобавлено: 01 авг 2011, 20:21 
Не в сети

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

_________________
Кто не рискует тот не пьёт морковный сок!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с ацп
СообщениеДобавлено: 01 авг 2011, 20:43 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
МК выполняет именно то, что вы написали.
Что вы ХОТЕЛИ написать, но почему-то не написали
- неизвестно ни нам, ни процессору. Какой же помощи вы от нас ждете?

ADMUX |= (0 << MUX0);//объявляем порт считывания adc0
Эта строчка ничего не делает.
ADMUX |= (1 << MUX0);//меняем порт на adc1
Эта строчка что-то делает, но вряд ли то, что написано в комментарии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: помогите с ацп
СообщениеДобавлено: 02 авг 2011, 13:28 
Не в сети
Аватара пользователя

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

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO