реклама на сайте
подробности

 
 
> AVR-MT-128 и энкодер, сигналы без тормозов
PaulB
сообщение May 7 2010, 12:46
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Есть отладочная плата AVR-MT-128 и подключоный к ней энкодер вращения ЛИР-158 2500имп/мин. Написал прошивку но она неуспевает считать все импульсы и зависает, при установке более простого энкодера прошивка работает исправно. Вопрос: как увеличить быстродействие контроллера?


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
PaulB
сообщение Aug 11 2010, 13:46
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 147
Регистрация: 20-08-06
Пользователь №: 19 681



Сделал счетчик от прерывания, оказалось что такого вполне должно хватить.
Энкодер подключен напрямую к мк без логики т.к. сначало хочется хотябы просто считать импульсы в одном направлении.
Считать то вроде считает, но неправильно. энкодер отключил, после включения питания на дисплее показания сразу добегают до пары тысяч, и изменяются каждую секунду.
значит дело в коде?
Код
#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;

}


--------------------
Мой канал: CybernetSystems
Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 11 2010, 15:46
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата
значит дело в коде?

Риторический вопрос laughing.gif
Вы дребезг как давите?
Датчик кодируется кодом Грея?
Попробуйте применить RC-цепочку на входе ИНТ0 с постоянной цепи скажем так в 5 раз меньшей максим. частоты импульсов, или примените логику на входе для подавления дребезга например на елементах исключающее ИЛИ.


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PaulB   AVR-MT-128 и энкодер   May 7 2010, 12:46
- - konstan   Цитата(PaulB @ May 7 2010, 16:46) ЛИР-158...   May 7 2010, 13:15
- - x736C   И на чем написана программа, и каким образом она н...   May 7 2010, 14:31
- - PaulB   Цитата(konstan @ May 7 2010, 17:15) может...   May 7 2010, 17:32
|- - haker_fox   Цитата(PaulB @ May 8 2010, 02:32) Да, Вы ...   May 8 2010, 04:10
|- - =GM=   Цитата(PaulB @ May 7 2010, 11:46) Есть от...   May 11 2010, 13:04
- - PaulB   Понятно, лучше обрабатывать энкодер аппаратно, зна...   May 8 2010, 14:50
- - Duhas   не мегу мона на прерывание повесить один канал, вт...   May 9 2010, 02:08
- - RW9UAO   на INT0 повесить и не париться.   May 9 2010, 11:06
- - Stas   Для ЛИР-158 на 5000 дискрет на оборот делал энкоде...   May 9 2010, 11:35
- - PaulB   Натолкнули меня на идею использовать D-триггер, а ...   May 11 2010, 14:22
|- - =GM=   Ну так, timer/counter1 и есть цепочка D-триггеров.   May 11 2010, 15:28
- - PaulB   В паспорте на датчик рекомендуется использовать ИС...   May 11 2010, 16:17
- - SysRq   Цитата(PaulB @ May 11 2010, 20:17) ..AM26...   May 11 2010, 17:53
- - PaulB   Да даташиты в основном все на буржуйском. Рас они ...   May 12 2010, 05:23
- - PaulB   А можно просто сделать на логике счетчик и снимать...   May 12 2010, 16:37
- - haker_fox   Цитата(PaulB @ May 13 2010, 01:37) А можн...   May 13 2010, 00:00
|- - Vetal-Soft   Вот так я делал на Mega16. Работает без глюков пр...   May 13 2010, 04:51
- - PaulB   C вывода каждого триггера счетчика, сигнал идет па...   May 13 2010, 10:18
- - arisov   PaulB вот эту темку http://electronix.ru/forum/ind...   May 13 2010, 12:52
- - PaulB   Нашел схемку, думаю выдернуть из неё счетную часть...   May 14 2010, 06:19
- - PaulB   А кто нибудь, что нибудь, о таких микросхемах слых...   May 18 2010, 07:26
|- - haker_fox   Цитата(PaulB @ May 18 2010, 16:26) А кто ...   May 23 2010, 23:37
- - Maik-vs   Оба вывода энкодера подаются на 2 прерывания по об...   May 25 2010, 11:49
- - PaulB   я же вроде указал что датчик от платы совсем отклю...   Aug 11 2010, 16:04
|- - sKWO   Цитата(PaulB @ Aug 11 2010, 19:04) я же в...   Aug 11 2010, 17:10
- - PaulB   Все заработало. считает нормально теперь незнаю ...   Aug 12 2010, 08:24
- - backa   я когда-то делал на асм для старой 8515 - тоже че...   Aug 12 2010, 08:32
- - PaulB   А поподробнее описать можете, как по фронту ?   Aug 12 2010, 08:35
- - backa   Идея в следующем - там были разнесённыу по фазе 2 ...   Aug 13 2010, 07:20
- - PaulB   А кодом неподелитесь, может легче будет? А то все ...   Aug 18 2010, 15:04
- - backa   код надо искать - давно было и разово делась - про...   Aug 23 2010, 10:39
- - PaulB   получилось и вроде работает!   Aug 23 2010, 21:08
- - backa   если с помощью моих не очень "понятных разъяс...   Aug 24 2010, 06:47
- - PaulB   Разяснения то были понятны, вот только программно ...   Aug 24 2010, 08:17
- - PaulB   Возникла очередная проблемка, да бы не создавать н...   Sep 9 2010, 17:05
|- - Vetal-Soft   Видимо ждет данных )) Прочиайте это: http://chipen...   Sep 10 2010, 06:02
- - PaulB   Сделал вот таким образом, виснуть перестало, но и ...   Sep 10 2010, 13:06
- - PaulB   Продоржаю тему подключения энкодера ЛИР к контролл...   Nov 27 2010, 19:41
- - ILYAUL   Цитата5000 об/мин Это 83,33.... об/сек - зачем Xm...   Nov 27 2010, 20:41
- - PaulB   это как это вы водсчитали что 42 импульса в секунд...   Nov 27 2010, 22:17
|- - ILYAUL   Цитата(PaulB @ Nov 28 2010, 01:17) В секу...   Nov 27 2010, 22:32
- - PaulB   Да, чисто для счета 16 МГц хватит, но мне надо буд...   Nov 27 2010, 22:43
- - Vasily_   Цитатакак же посоветуете избавиться от дребезга? ...   Nov 27 2010, 23:29
- - _Pasha   Ну, ребята, вы и жжете! Темы по форуму бродят ...   Nov 28 2010, 07:03
- - ILYAUL   ЦитатаДа, чисто для счета 16 МГц хватит, но мне на...   Nov 28 2010, 09:48
- - Duhas   83.33*2500=300имп в сек это очень интересно... ...   Nov 28 2010, 11:03
|- - ILYAUL   Цитата(Duhas @ Nov 28 2010, 14:03) 83.33*...   Nov 28 2010, 12:52
- - khach   Радикально - выкинуть атмегу, взять STM32 или LPC1...   Nov 28 2010, 15:43
- - Duhas   вы сами придумали параметр энкодера импульсы в мин...   Nov 30 2010, 14:16
|- - ILYAUL   Цитата(Duhas @ Nov 30 2010, 17:16) вы сам...   Nov 30 2010, 14:31
- - Duhas   повторяю свой вопрос.. 3-4 пост темы "Да, ...   Nov 30 2010, 15:34


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 21:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01445 секунд с 7
ELECTRONIX ©2004-2016