roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 02 май 2010, 20:36 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
Сделал от прерывания, вот код:
Код:
#include<mega128.h>
#include <delay.h>
#include <stdlib.h> 
#include <stdio.h> 
#include <lcd.h>

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

unsigned char q;
interrupt [EXT_INT0] void ext_int0_isr(void)
{
q=q+1;
}
                 
int main()
{

         char w[1];
DDRA=0x00;
PORTA=0x00;
DDRD=0x00;
PORTD=0xFF;
DDRB=0xF0;
PORTB=0x00;
DDRE = 0b00110000;
PORTE = 0b00100000;


lcd_init(16);

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

}

Считает но далеко неправельно :(
что делаю не так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 05 май 2010, 20:04 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
с одним энкодером разобрался (HOA0901-012). :)
Изображение
теперь заимел инкрементный датчик скорости (энкодер) ЛИР-158 на 2500 имп/об.
Необходимо снимать с него данные без тормозов, так как прошивка для предъидущего датчика не справляется (достаточно сильно тормозит)? Как это сделать не представляю, подскажите плиз?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 06 май 2010, 11:02 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Частоты какие (вращения или импульсов)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 06 май 2010, 17:42 
Не в сети
Аватара пользователя

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

Добавлено спустя 57 секунд:
Max. частота вращения вала 10000 об/мин


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 07 май 2010, 17:03 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 07 май 2010, 23:50 
Не в сети

Зарегистрирован: 10 мар 2010, 15:54
Сообщения: 5
Откуда: С-Пб.
прог. языки: ASM
ФИО: Егор
Max. частота вращения вала 10000 об/мин
Герцы это сколько раз в секунду!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 08 май 2010, 21:51 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Герц это 1/сек

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 09 май 2010, 06:24 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
ТС продай энкодер )))))

я на электрониксе уже отписался )

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 10 май 2010, 19:47 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 10 май 2010, 20:29 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
ну программно только если забыть об остальных задачах..

самое нормальное на простой меге - вешать 1 канал на прерывание ...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 10 май 2010, 21:39 
Не в сети
Аватара пользователя

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

А как обработку прерывания описать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 11 май 2010, 04:48 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
На таких скоростях мегой считать программно не получится. При скорости 9000 мин-1 времени хватит ровно на то, чтобы считать импульсы - больше МК ничем заниматься не успеет. Можно добавить пару корпусов логики как на схеме, и считать двумя аппаратными счетчиками - и вычитать один из другого. Только надо будет подумать, чтобы обломов не было при переполнении счетчиков.


Вложения:
e.png
e.png [ 3.92 КиБ | Просмотров: 2644 ]

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 11 май 2010, 09:24 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 11 май 2010, 10:00 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
При вращении вала в одну сторону, единица на прямом выходе триггера, при вращении в другую - на инверсном. Соответственно импульсы будут на одном из двух выходов схемы в зависимости от направления вращения. Импульсы подаем на входы двух 16-битных счетчиков МК. По прерыванию при переполнении счетчиков программно увеличиваем 16-битные переменные, в результате имеем 2 32-битных счетчика. Разность между этими счетчиками дает положение вала. Самое сложное здесь - правильно отловить переполнение аппаратных счетчиков в момент чтения положения.

Добавлено спустя 14 минут:
Примерно вот так
Код:
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>

uint16_t ctr_plus, ctr_minus;

ISR(SIG_OVERFLOW3)
{
   ctr_plus++;
}

ISR(SIG_OVERFLOW1)
{
   ctr_minus++;
}

int32_t read_position()
{
   uint32_t plus, minus;
   cli();
   plus = TCNT3;
   if (plus < 0x7FFF) {
      if (ETIFR & (1 << TOV3)) {
         plus += 0x10000U;
      }
   }
   plus += (uint32_t)ctr_plus << 16;
   minus = TCNT1;
   if (minus < 0x7FFF) {
      if (TIFR & (1 << TOV1)) {
         minus += 0x10000U;
      }
   }
   minus += (uint32_t)ctr_minus << 16;
   sei();
   return plus - minus;
}


_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR-MT-128
СообщениеДобавлено: 11 май 2010, 12:24 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Да, страшное дело эта полупрограммная обработка энкодеров :) А чего 2.5 МГц? у меня 417 кГц вышло вроде... И АВР такое может быть даже потянет чисто программно, если его аккуратно замучать (там надо смотреть тактовую частоту, время входа в прерывание, ну и не запрещать прерывания нигде в программе, и обработчик на асме, в общем щас не скажу так мысленно - получится или нет).

Ну а вообще при таких частотах наверное надо аппаратный модуль, или на плис, или встроенный в МК (но тогда МК будет уже не авр, а какой-нить TMS320LF28xx ;) )


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

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


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

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


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

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