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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: AVR-MT-128

Сообщение Duhas » 18 май 2010, 21:24

по-видимому да...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: AVR-MT-128

Сообщение CiSi » 19 май 2010, 09:52

И как это сделать?
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

Re: AVR-MT-128

Сообщение Duhas » 19 май 2010, 14:31

ну вариантов несколько.. например такт с МК с XTAL2 .. или один из таймеров на ШИМ с TOP-ом = 2 или 3 и сравнением на 1 .. без предделителя ... будет что-то типа такт/4 ... вроде мона так )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: AVR-MT-128

Сообщение CiSi » 19 май 2010, 17:18

А какая частота тактирования нужна? И можно ли подключить отдельный кварц?
Ну а проще наверное будет микруху соединить с XTAL2 МК.
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

Re: AVR-MT-128

Сообщение Duhas » 19 май 2010, 17:20

кварц поставить не выйдет, нужен генератор.. мона на логике сделать ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: AVR-MT-128

Сообщение CiSi » 19 май 2010, 18:26

А частоты кварца мк хватит?
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

Re: AVR-MT-128

Сообщение Duhas » 19 май 2010, 18:46

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

она нужна в 3-4 раза большая чем частота импульсов с энкодера будет ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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;

}
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

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

Сообщение Сергей » 10 авг 2010, 13:01

Код невозможно прочесть. Навскидку скажу, что это может быть от помех, посмотри осциллографом твои импульсы с энкодера. У меня было такое однажды.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

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

Сообщение CiSi » 11 авг 2010, 10:45

Изменил изменил условия внешних прерываний на на "условие 1/0" и внутреннюю подтяжку включил - все заработало НО! Теперь надо органировать реверс, а как это сделать? Наверное придется использовать сдвиг фаз двух каналов. А как это можно сделать програмно?
Пробовал собирать предложенную схему blindman-ом Изображение
, но устройство работало неправильно, значение все время прыгало.
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

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

Сообщение CiSi » 19 авг 2010, 15:43

Подключал даже подтяжку к SR, но безрезультатно :(
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

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

Сообщение Duhas » 20 авг 2010, 13:57

можно описать доступно - для масс (ну или для меня) что подразумевается под "Теперь надо органировать реверс"?
желательно полно, с того места откуда проистекает задача...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение CiSi » 20 авг 2010, 19:44

Требовалось не только прибавлять импульсы при вращении в одну сторону, а еще их и убавлять при вращении вала энкодера в другую сторону.
К счастью проблемму сегодня решит, исключительно программно. вроде работает!
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

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

Сообщение Duhas » 20 авг 2010, 19:55

дык естественно тут все решается исключительно программно.. либо аппаратно - если поддержка "квадратурного интерфейса" есть..
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение CiSi » 10 сен 2010, 18:02

Возникла очередная проблемка, да бы не создавать новую тему и не захламлять форум, задам вопрос тут: Данные с датчика требуется отправлять на комп - с этой задачей с горем на пополам справился. Так же требуется кое какие данные отправлять на внешнее устройство, обмен данными ведется через интерфейс 232 по USART, но вот эту задачу почему то не удается реализовать.При использовании процедуры getchar() программа виснет. помогите плиз.
Аватара пользователя
CiSi
 
Сообщения: 1027
Зарегистрирован: 04 окт 2007, 16:11
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел

Пред.След.

Вернуться в Микроконтроллеры

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

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