roboforum.ru

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

AVR-MT-128_энкодер_продолжение

Re: AVR-MT-128

Duhas » 18 май 2010, 21:24

по-видимому да...

Re: AVR-MT-128

CiSi » 19 май 2010, 09:52

И как это сделать?

Re: AVR-MT-128

Duhas » 19 май 2010, 14:31

ну вариантов несколько.. например такт с МК с XTAL2 .. или один из таймеров на ШИМ с TOP-ом = 2 или 3 и сравнением на 1 .. без предделителя ... будет что-то типа такт/4 ... вроде мона так )

Re: AVR-MT-128

CiSi » 19 май 2010, 17:18

А какая частота тактирования нужна? И можно ли подключить отдельный кварц?
Ну а проще наверное будет микруху соединить с XTAL2 МК.

Re: AVR-MT-128

Duhas » 19 май 2010, 17:20

кварц поставить не выйдет, нужен генератор.. мона на логике сделать ...

Re: AVR-MT-128

CiSi » 19 май 2010, 18:26

А частоты кварца мк хватит?

Re: AVR-MT-128

Duhas » 19 май 2010, 18:46

там судя по ДШ ета частота используется для цифровой фильтрации.. т.е. для избавления от дребезга всякого и тд ..

она нужна в 3-4 раза большая чем частота импульсов с энкодера будет ...

Re: AVR-MT-128_ счетчик внешних событий

CiSi » 10 авг 2010, 12:54

Сделал счетчик от прерывания, оказалось что такого вполне должно хватить.
Энкодер подключен напрямую к мк без логики т.к. сначало хочется хотябы просто считать импульсы в одном направлении.
Считать то вроде считает но неправильно. после включения питания на дисплее показано 0 импульсов, как и должно быть, а при последующем прикосновении к валу (некрутя его) энкодера, значение с нуля сразу добегает до пары тысяч. И каждый раз значение разное. При вращении вала все время в одном направлении може быть даже отрицательное значение на дисплее.
Вопрос: что за глюк?

Добавлено спустя 1 минуту 31 секунду:
Код: Выделить всёРазвернуть
 #include<mega128.h>
#include <delay.h>
#include <stdlib.h> 
#include <stdio.h> 
#include <lcd.h>

#asm
.equ __lcd_port=0x15 ;PORTC
#endasm

unsigned long q;       
interrupt [EXT_INT0] void ext_int0_isr(void)   // процедура обработки прерывания
{
 
          q++;             //с каждым прерыванием значение переменной увеличивается на 1
           
}
               
int main()
{
         char w[32];    //для преобразования числа в строку/символы
DDRA=0x00;
PORTA=0x00;
DDRB=0xF0;
PORTB=0x00;
DDRE = 0b00110000;
PORTE = 0b00100000;
lcd_init(16);


  lcd_gotoxy(5,0);
      lcd_putsf("Hello!");
   Privet();     
     delay_ms(3000);
     
       while(1) {
       q=0;
      lcd_clear();
     
      Go();
      lcd_putsf(" ");
      Stop();
       lcd_putsf(" ");
      Reset();
      delay_ms(10);
           
    if  (!(PINA & 0b00000001))  {                //Пуск
   lcd_clear();
      Go();
      delay_ms(1000);
          SREG.7 = 1;
        EIMSK = 0x01;
        EICRA = 0x0C;
        EICRB = 0x0C; 
         
       while(PINA & 0b00000100){                 //Сброс
         lcd_clear();
        sprintf(w,"adc= %d\n",q);
        lcd_puts(w);
         delay_ms(50);
        }
       lcd_clear();         
         Reset();
         delay_ms(2000);
         }
           
      }         
  return 0;

}

Re: AVR-MT-128_ счетчик внешних событий

Сергей » 10 авг 2010, 13:01

Код невозможно прочесть. Навскидку скажу, что это может быть от помех, посмотри осциллографом твои импульсы с энкодера. У меня было такое однажды.

Re: AVR-MT-128_ счетчик внешних событий

CiSi » 11 авг 2010, 10:45

Изменил изменил условия внешних прерываний на на "условие 1/0" и внутреннюю подтяжку включил - все заработало НО! Теперь надо органировать реверс, а как это сделать? Наверное придется использовать сдвиг фаз двух каналов. А как это можно сделать програмно?
Пробовал собирать предложенную схему blindman-ом Изображение
, но устройство работало неправильно, значение все время прыгало.

Re: AVR-MT-128_ реверс на энкодере

CiSi » 19 авг 2010, 15:43

Подключал даже подтяжку к SR, но безрезультатно :(

Re: AVR-MT-128_ реверс на энкодере

Duhas » 20 авг 2010, 13:57

можно описать доступно - для масс (ну или для меня) что подразумевается под "Теперь надо органировать реверс"?
желательно полно, с того места откуда проистекает задача...

Re: AVR-MT-128_ реверс на энкодере

CiSi » 20 авг 2010, 19:44

Требовалось не только прибавлять импульсы при вращении в одну сторону, а еще их и убавлять при вращении вала энкодера в другую сторону.
К счастью проблемму сегодня решит, исключительно программно. вроде работает!

Re: AVR-MT-128_ реверс на энкодере

Duhas » 20 авг 2010, 19:55

дык естественно тут все решается исключительно программно.. либо аппаратно - если поддержка "квадратурного интерфейса" есть..

Re: AVR-MT-128_ реверс на энкодере

CiSi » 10 сен 2010, 18:02

Возникла очередная проблемка, да бы не создавать новую тему и не захламлять форум, задам вопрос тут: Данные с датчика требуется отправлять на комп - с этой задачей с горем на пополам справился. Так же требуется кое какие данные отправлять на внешнее устройство, обмен данными ведется через интерфейс 232 по USART, но вот эту задачу почему то не удается реализовать.При использовании процедуры getchar() программа виснет. помогите плиз.


Rambler\'s Top100 Mail.ru counter