|
ARM. Энкодеры и акселерометры, Помогите решить задачу |
|
|
|
Jul 29 2009, 20:01
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Всем привет! Нужна помощь. Есть виброплощадка с двумя дебалансными валами, с одной стороны которой через эластические муфты приделаны двигатели, а с другой – инкрементные энкодеры. Площадка крепится через пружины к станине. Двигатели прикручены к станине жестко. Валы площадки не синхронизированы. К площадке крепится датчик ускорения ADXL210 с выходным сигналом ШИМ. Двигатель вращается с частотой 1500 об/мин, следовательно это равно 25об/сек. Энкодер имеет разрешение 1024им/об, это равно 1024*25=25600Гц. Начальное положение определяться перед пуском. Поскольку дебалансный вал имеет эксцентриситет, то соответственно он направлен в низ. Это и есть его начальное положение. Контролер и комп НЕ УПРАВЛЯЕТ ДВИГАТЕЛЯМИ, а они запускаются отдельно через рубильник. Точность измерения: - угловое положение +/-0,4градуса;
- угловую скорость(+/-1.0град/сек);
- угловое ускорение (после интерполяции графика скорости. Зависит от метода);
- линейное ускорение(+/-0,1g);
Нужно периодично опрашивать датчики, чтобы знать его положение, ускорение в каждый момент времени. Данные через USB от датчиков должны заливаться на комп. Нужно измерять положения дебалансных валов и их скорость, ускорение, а также ускорение, скорость, положение площадки. Ловить сдвиг фаз между положениями валов. Здесь нимного обсуждалось и здесьЧто уже есть: изготовлена площадка, на ней стоят энкодеры. Уже запускал, работает. Прикупил ARM отладочную плату AT91SAM7S64_DBoard для ARM микроконтроллеров фирмы ATMEL и программатор J-Link - USB JTAG adapter. Хочу на базе этого дивайса решить эту задачу. Опит программирования только AVR. Знаю немного Си и Delphi. Очень нужно. Помогите пожалуйста.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
 |
Ответов
|
Aug 23 2009, 15:35
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Вот код обработки по прерыванию положения первого энкодера. CODE #include <AT91SAM7S128.H> /* AT91SAM7S64 definitions */ #include "..\Board.h"
volatile unsigned int ENCODER1_Position = 0; /* Текуща позиция энкодера 1*/ volatile unsigned long int ENCODER1_Count = 0; /* Текуща позиция энкодера 1*/ #define ENCODER1_A_MASK (1<<20) /* PA19 */ #define ENCODER1_B_MASK (1<<19) /* PA20 */ #define ENCODER2_A_MASK (1<<15) /* PA15 */ #define ENCODER2_B_MASK (1<<14) /* PA14 */ #define ENCODER_A_MASK (ENCODER1_A_MASK|ENCODER1_B_MASK|ENCODER2_A_MASK|ENCODER2_B_MASK)
#define ENCODER1_A (1<<20) // PA19 #define ENCODER1_B (1<<19) // PA20 #define ENCODER2_A (1<<15) // PA15 #define ENCODER2_B (1<<14) // PA14
#define ENCODER1_resolution 1024 #define ENCODER2_resolution 1024
extern AT91S_PIO * pPIO; /* Global Pointer to PIO */
extern __irq void irq0_int (void); /* IRQ0 Function */
void irq0_nint (void) { /* Nested IRQ0 (Push button SW2) */
if ((pPIO->PIO_PDSR & ENCODER1_A) == 0) { /* Проверяем активный уровень на входе А энкодера 1*/ if ((pPIO->PIO_PDSR & ENCODER1_B) == 0) { /* Определяем направление вращения энкодера 1*/ if (ENCODER1_Position == (ENCODER1_resolution-1)) {/*Проверяем не прывисл ли ENCODER1_Position значения полосок на энкодере*/ ENCODER1_Position = 0;/*Если превысил то отсчитываем с 0*/ // ENCODER1_Count++; /*Увеличиваем на 1 значения оборотов */ } ENCODER1_Position++;} /* Если за часовой стрелкой то увеличиваем на 1*/ else { if (ENCODER1_Position == 0) { /* Проверяем не прывисл ли ENCODER1_Position значения 0*/ ENCODER1_Position = (ENCODER1_resolution-1);/*Если 0 то отсчитываем с ENCODER1_resolution-1*/ ENCODER1_Count++; /*Уменьшаем на 1 значения оборотов */ } ENCODER1_Position--; } /* Если против часовой стрелкой то уменьшаем на 1*/ }
*AT91C_AIC_EOICR = 0; /* End of Interrupt*/ }
void init_extint (void) { /* Setup IRQ 0 Interrupt */ AT91S_AIC * pAIC = AT91C_BASE_AIC; /* Setup IRQ0 Interrupt Mode and Vector with Priority 0 and Enable it */ /* AIC_SMR - Регистр источника прерывания 0 AT91C_ID_IRQ0 - ID Прерывание для IRQ0 AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE - Internal Sources Code Label Positive Edge triggered - Положительный фронт */ pAIC->AIC_SMR[AT91C_ID_IRQ0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 0;// AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE /* Вектор прерывания. AIC_SVR0..AIC_SVR31 - В эти регистры записываются адреса соответствующих процедур обработки прерывания для каждого источника.*/ pAIC->AIC_SVR[AT91C_ID_IRQ0] = (unsigned long) irq0_int; /*Регистр разрешения прерываний*/ pAIC->AIC_IECR = (1 << AT91C_ID_IRQ0); } Вроде все правильно, но почему дважды вызывается прерывание? Все значения пересылаю через USART. CODE #include <AT91SAM7S128.H> /* AT91SAM7S64 definitions */ #include "..\Board.h"
#define BR 115200 /* Baud Rate */
#define BRD (MCK/16/BR) /* Baud Rate Divisor */
AT91S_USART * pUSART = AT91C_BASE_US0; /* Global Pointer to USART0 */
void init_serial (void) { /* Initialize Serial Interface */
*AT91C_PIOA_PDR = AT91C_PA5_RXD0 | /* Enable RxD0 Pin */ AT91C_PA6_TXD0; /* Enalbe TxD0 Pin */
pUSART->US_CR = AT91C_US_RSTRX | /* Reset Receiver */ AT91C_US_RSTTX | /* Reset Transmitter */ AT91C_US_RXDIS | /* Receiver Disable */ AT91C_US_TXDIS; /* Transmitter Disable */
pUSART->US_MR = AT91C_US_USMODE_NORMAL | /* Normal Mode */ AT91C_US_CLKS_CLOCK | /* Clock = MCK */ AT91C_US_CHRL_8_BITS | /* 8-bit Data */ AT91C_US_PAR_NONE | /* No Parity */ AT91C_US_NBSTOP_1_BIT; /* 1 Stop Bit */
pUSART->US_BRGR = BRD; /* Baud Rate Divisor */
pUSART->US_CR = AT91C_US_RXEN | /* Receiver Enable */ AT91C_US_TXEN; /* Transmitter Enable */ }
int sendchar (int ch) { /* Write character to Serial Port */
if (ch == '\n') { /* Check for CR */ while (!(pUSART->US_CSR & AT91C_US_TXRDY)); /* Wait for Empty Tx Buffer */ pUSART->US_THR = '\r'; /* Output CR */ } while (!(pUSART->US_CSR & AT91C_US_TXRDY)); /* Wait for Empty Tx Buffer */ return (pUSART->US_THR = ch); /* Transmit Character */ }
int getkey (void) { /* Read character from Serial Port */
while (!(pUSART->US_CSR & AT91C_US_RXRDY)); /* Wait for Full Rx Buffer */ return (pUSART->US_RHR); /* Read Character */ } Вот шапка. CODE AREA IRQ0, CODE, READONLY ARM
PRESERVE8 ALIGN IMPORT irq0_nint EXPORT irq0_int irq0_int FUNCTION
SUB LR, LR, #4 ; Update Link Register STMFD SP!, {R0-R12, LR} ; Save Workspace & LR to Stack MRS R0, SPSR ; Copy SPSR to R0 STMFD SP!, {R0, R1} ; Save SPSR to Stack (8-byte) MSR CPSR_c, #0x1F ; Enable IRQ (Sys Mode) STMFD SP!, {R0, LR} ; Save LR_sys to Stack (8-byte) LDR R0, =irq0_nint ; Get IRQ Function Address MOV LR, PC ; Return Address BX R0 ; Call IRQ Function LDMFD SP!, {R0, LR} ; Restore LR_sys MSR CPSR_c, #0x92 ; Disable IRQ (IRQ Mode) LDMFD SP!, {R0, R1} ; Restore SPSR to R0 MSR SPSR_cxsf, R0 ; Copy R0 to SPSR LDMFD SP!, {R0-R12, PC}^ ; Return to program
ENDFUNC
END Модератор. Zliva, в следующий раз буду просто удалять такие цитаты из сообщения. Либо форматируйте их сами, оформляя тэгами [ codebox ] и урезая по ширине, либо прилагайте к сообщению в виде текстовых файлов, как это рекомендуют Правила форума. С уважением, rezident.
Причина редактирования: Нарушение п.3.4 Правил форума.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 23 2009, 16:11
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Aug 23 2009, 19:35)  Код /* Setup IRQ0 Interrupt Mode and Vector with Priority 0 and Enable it */ /* AIC_SMR - Регистр источника прерывания 0 AT91C_ID_IRQ0 - ID Прерывание для IRQ0 AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE - Internal Sources Code Label Positive Edge triggered - Положительный фронт */ pAIC->AIC_SMR[AT91C_ID_IRQ0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE | 0; // AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE Прерывание от IRQ0 является внешним источником, поэтому обратите внимание на такие строки в хидере: Цитата #define AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) Internal Sources Code Label Positive Edge triggered #define AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE ((unsigned int) 0x1 << 5) // (AIC) External Sources Code Label Negative Edge triggered Цитата(Zliva @ Aug 23 2009, 19:35)  Вроде все правильно, но почему дважды вызывается прерывание? Все значения пересылаю через USART. А откуда это видно? Цитата(Zliva @ Aug 23 2009, 19:35)  Вот шапка. Шапка с безобразным оверхедом. Нет никакой необходимости пихать все регистры на стек: R4-R11 и так никто не тронет.
|
|
|
|
|
Aug 23 2009, 18:23
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 23 2009, 19:11)  Прерывание от IRQ0 является внешним источником, поэтому обратите внимание на такие строки в хидере: Вижу в 232analyzer (утилита для работы с ком-портом), что при однократном нажатии кнопки (энкодер лежит с боку, пока не подключал), данные получаю и оны непрерывно поступают, пока кнопка нажата, а я хочу, чтобы происходило прерывание на переходе 0-1. Чем можете помочь? Неужели дребезг? Манипулою так: Прерывания от irq0 заведено на кнопку (симулирую линию энкодера А), а РА20 на кнопку B2(симулирую линию энкодера В). При однократном нажатии на B1 значение убывает, но их приходит очень много. Например, один раз нажал получил значение 9 десть раз. При удерживании В2 нажимаю на B1. Значения идут по возрастающей. Количество резолюций поставил 10 только для тестирования. В реальности энкодер имеет 1024 имп/об. Цитата А откуда это видно? Утилита 232analyzer для работы с ком-портом Цитата Шапка с безобразным оверхедом. Нет никакой необходимости пихать все регистры на стек: R4-R11 и так никто не тронет. Тогда как правильно сделать?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 23 2009, 18:46
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Aug 23 2009, 22:23)  Вижу в 232analyzer (утилита для работы с ком-портом), что при однократном нажатии кнопки (энкодер лежит с боку, пока не подключал), данные получаю и оны непрерывно поступают, пока кнопка нажата, а я хочу, чтобы происходило прерывание на переходе 0-1. Чем можете помочь? Неужели дребезг? А что Вас удивляет? Вполне естественно, что кнопка имеет дребезг. Цитата(Zliva @ Aug 23 2009, 22:23)  Утилита 232analyzer для работы с ком-портом Вы не выложили ту часть кода, которая заведует отравкой данных, поэтому судить о наблюдаемой картине никто не возьмется. Цитата(Zliva @ Aug 23 2009, 22:23)  Тогда как правильно сделать? Очевидно, не сохранять лишнее. Если обработчик написан на 'C' без всяких naked, то строки: Код STMFD SP!, {R0-R12, LR} ; Save Workspace & LR to Stack ... LDMFD SP!, {R0-R12, PC}^ ; Return to program можно спокойно заменить на: Код STMFD SP!, {R0-R3, R12, LR} ; Save Workspace & LR to Stack ... LDMFD SP!, {R0-R3, R12, PC}^ ; Return to program Но делать это стоит только при ясном понимании, почему так можно. В противном случае оставьте как есть - процедура все равно рабочая.
|
|
|
|
|
Aug 23 2009, 19:41
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Не могу понять, почему когда я удерживаю кнопку (как бы дребезга недолжно быть), возникает прерывание? Может здесь pAIC->AIC_SMR[AT91C_ID_IRQ0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|0 что-то не так? Даже в симуляторе та же фича. Вот весь проект (на базе Hello.Uv2)
Прикрепленные файлы
Main.rar ( 56.24 килобайт )
Кол-во скачиваний: 19
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 08:15
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 09:17)  Что там не так, я уже написал выше.
Работа с прерываниями по фронту вообще требует предельной внимательности - Вы уверены, что это действительно необходимо? В принципе – да. Уверен. Вы что-то можете предложить другое?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 11:32
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 13:37)  Для обработки энкодеров логично было бы использовать общее прерывание PIO. Выставляется по любому фронту на выводе (-ах), при этом является внутренним источником для AIC'а. Спасибо, Вам. Если можно, небольшой пример. Может есть смысл задействовать два прерывания на один энкодер? Кажись настроил прерывание по фронту. Но сейчас появилась следующая проблема. Пропуск шагов(или неверный алгоритм работы). Суть такая (на картинке видно устройство и энкодер), рычаг вала энкодера поворачиваю в какое-то крайнее положение до упора. Затем делаю RESET устройства. Проворачиваю до следующего крайнего положения(до упора). Получаю следующую последовательность: 0 - 637 1020-633 1015-627 1010-622 и т.д. Что не так?
Эскизы прикрепленных изображений
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 11:48
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Aug 24 2009, 15:32)  Если можно, небольшой пример. Может есть смысл задействовать два прерывания на один энкодер? Пример: CODE void pioa_irq_init(void) { AT91C_BASE_AIC->AIC_SVR[AT91C_ID_PIOA] = (unsigned int)irq_pioa; AT91C_BASE_AIC->AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | PIOA_IRQ_PRIORITY; AT91C_BASE_AIC->AIC_IECR = (1UL << AT91C_ID_PIOA); AT91C_BASE_SYS->PIOA_IER = PINX_MASK | PINY_MASK; }
__irq void irq_pioa(void) { unsigned int status = AT91C_BASE_SYS->PIOA_ISR; if(status & PINX_MASK) { ... } if(status & PINY_MASK) { ... } AT91C_BASE_AIC->AIC_EOICR = status; } Смысла использовать более одного прерывания не вижу - фронты ведь разнесены по времени. Цитата(Zliva @ Aug 24 2009, 15:32)  Что не так? Что-то не очень понятна последовательность. Что такое "1015-627"? Лучше напишите положение вала и насчитанное число для каждой точки.
Причина редактирования: Уменьшение видимого размера цитаты исходника.
|
|
|
|
|
Aug 24 2009, 12:09
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 14:48)  Что-то не очень понятна последовательность. Что такое "1015-627"? Лучше напишите положение вала и насчитанное число для каждой точки. Попробую объяснить получше. Суть такая (на картинке видно устройство и энкодер), рычаг вала энкодера поворачиваю в какое-то крайнее положение до упора(соприкосновение двух винтов). Затем делаю RESET устройства (для того, чтобы начать отсчет с нуля). Проворачиваю до следующего крайнего положения рычаг вала энкодера до упора (соприкосновение винта рычага и винта на корпусе энкодера). Затем кручу рычаг в обратную сторону до упора. И так несколько раз. Получаю следующую последовательность в крайних положениях (как изменилось значение положения крайних положениях): 0 - 637 1020-633 1015-627 1010-622 и т.д. Эта последовательность – им/обр. Так как винты размещены на одной оси с упорными винтами(грубо 180 градусов см.рис.), получается такая последовательность. Энкодер за 1 об. делает 1024 импульса. Надеюсь понятно. Но куда деваются значения, непонятно. По правильному(я так думаю), должно быть: 0 - 637 637-0 0 - 637 637-0
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 14:09
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Решил сделать просто: Код void irq0_nint (void) { if ((pPIO->PIO_PDSR & ENCODER1_B) == 0) { ENCODER1_Position++;} else { ENCODER1_Position--; } *AT91C_AIC_EOICR = 0; AT91C_BASE_PIOA->PIO_ISR;} и посмотреть, что получилось. Так вот. Цитата(Zliva @ Aug 24 2009, 15:09)  .....рычаг вала энкодера поворачиваю в какое-то крайнее положение до упора(соприкосновение двух винтов). Затем делаю RESET устройства (для того, чтобы начать отсчет с нуля). Проворачиваю до следующего крайнего положения рычаг вала энкодера до упора (соприкосновение винта рычага и винта на корпусе энкодера). Затем кручу рычаг в обратную сторону до упора. И так несколько раз. Получаю следующую последовательность в крайних положениях (как изменилось значение положения крайних положениях): 0-205->{Вращаю влево} 205-1->{Вращаю вправо} 1-206->{Вращаю влево} 206-2->{Вращаю вправо} 2-207 ->{Вращаю влево} 207-3->{Вращаю вправо} 3-208->{Вращаю влево} и т.д. Значение постоянно смещается на 205. Где грабли непойму.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 18:17
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 19:35)  Так и задействуйте общее прерывание PIO - так Вы будете получать прерывание на каждый фронт каждого сигнала. Это меня устраивает. Помогите пожалуйста сконфигурировать стартап irq_pioa.s для прерывания irq_pioa с использованием Ваших функций, которые Вы приводили немного выше. И кстати, переменную PIOA_IRQ_PRIORITY Вы как определили?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 19:23
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Zliva @ Aug 24 2009, 22:17)  Это меня устраивает. Помогите пожалуйста сконфигурировать стартап irq_pioa.s для прерывания irq_pioa с использованием Ваших функций, которые Вы приводили немного выше. Не совсем понял, в чем состоит вопрос. Просто уберите модификатор __irq для использования с вложенными вызовами. Цитата(Zliva @ Aug 24 2009, 22:17)  И кстати, переменную PIOA_IRQ_PRIORITY Вы как определили? Это просто макрос. Код #define PIOA_IRQ_PRIORITY 7
|
|
|
|
|
Aug 24 2009, 19:34
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 22:23)  Это просто макрос. Код #define PIOA_IRQ_PRIORITY 7 Спасибо. Цитата Не совсем понял, в чем состоит вопрос. Просто уберите модификатор __irq для использования с вложенными вызовами. Есть у меня файл с названием IRQ0.s. Там прописано Код AREA IRQ0, CODE, READONLY ARM PRESERVE8 ALIGN IMPORT irq0_nint EXPORT irq0_int irq0_int FUNCTION SUB LR, LR, #4 STMFD SP!, {R0-R3, R12, LR} MRS R0, SPSR STMFD SP!, {R0, R1} MSR CPSR_c, #0x1F STMFD SP!, {R0, LR} LDR R0, =irq0_nint MOV LR, PC BX R0 LDMFD SP!, {R0, LR} MSR CPSR_c, #0x92 LDMFD SP!, {R0, R1} MSR SPSR_cxsf, R0 LDMFD SP!, {R0-R3, R12, PC}^ ; ENDFUNC END Как сюда влепить для PIOA прерывания. Или я с терминологией путаюсь?
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
|
Aug 24 2009, 20:25
|
Частый гость
 
Группа: Участник
Сообщений: 137
Регистрация: 14-11-06
Из: Луцка
Пользователь №: 22 318

|
Цитата(aaarrr @ Aug 24 2009, 22:37)  Это же просто универсальная обертка. Переименуйте irq0_nint и irq0_int, если хотите, и все. Ничего не получается с прерыванием от PIOA. Все сделал как Вы говорили – НИЧЕГО. Что-то виснет микроконтроллер. Когда комментирую pioa_irq_init() все работает (прерывания не работают), лампочки дрыгаются. Вложу исподники. Посмотрите пожалуйста.
--------------------
If the person is successful, he is successful in any sphere.
|
|
|
|
Сообщений в этой теме
Zliva ARM. Энкодеры и акселерометры Jul 29 2009, 20:01 _Pasha Я бы все-таки энкодеры обрабатывал простеньким AVR... Jul 30 2009, 08:17 Zliva Цитата(_Pasha @ Jul 30 2009, 11:17) Я бы ... Jul 30 2009, 08:44  Zliva С программированием ARM разобрался. Программируетс... Aug 15 2009, 20:01 aaarrr 1. Первые три - классы устройств USB; usbser.sys -... Aug 15 2009, 20:36 Zliva Цитата(aaarrr @ Aug 15 2009, 23:36) 3. За... Aug 15 2009, 20:47 aaarrr Если гарантия доставки обязательна, то в качестве ... Aug 15 2009, 20:52 Zliva Цитата(aaarrr @ Aug 15 2009, 23:52) Если ... Aug 15 2009, 20:57  aaarrr Цитата(Zliva @ Aug 16 2009, 00:57) А скор... Aug 15 2009, 21:01   Zliva Цитата(aaarrr @ Aug 16 2009, 00:01) Нет, ... Aug 15 2009, 21:30    aaarrr Цитата(Zliva @ Aug 16 2009, 01:30) Так ка... Aug 15 2009, 21:39     Zliva Цитата(aaarrr @ Aug 16 2009, 00:39) Остав... Aug 15 2009, 22:02 aaarrr Ну, если даже направление теряется, то это похоже ... Aug 24 2009, 12:15 Zliva Цитата(aaarrr @ Aug 24 2009, 15:15) Ну, е... Aug 24 2009, 12:30 aaarrr Получается, что Вы по заднему фронту сигнала B смо... Aug 24 2009, 12:49 Zliva Цитата(aaarrr @ Aug 24 2009, 15:49) Получ... Aug 24 2009, 12:56  aaarrr Цитата(Zliva @ Aug 24 2009, 16:56) Тыкнит... Aug 24 2009, 13:12   Zliva Цитата(aaarrr @ Aug 24 2009, 16:12) Пардо... Aug 24 2009, 13:27 aaarrr А pPIO правильно проинициализирован?
Пардон, вижу... Aug 24 2009, 13:51 aaarrr Дык __irq уберите. Aug 24 2009, 20:29 Zliva Цитата(aaarrr @ Aug 24 2009, 23:29) Дык _... Aug 24 2009, 20:35  aaarrr Цитата(Zliva @ Aug 25 2009, 00:35) Убрал.... Aug 24 2009, 20:53   Zliva Цитата(aaarrr @ Aug 24 2009, 23:53) AT91C... Aug 24 2009, 20:58    aaarrr Цитата(Zliva @ Aug 25 2009, 00:58) Все ра... Aug 24 2009, 21:13     Zliva Убрал строчку printf ("E1=%d\n",ENC... Aug 24 2009, 21:34 aaarrr Я грешным делом думал, что printf у Вас под прерыв... Aug 24 2009, 21:40 Zliva Попробовал несколько вариантов обработки сигналов ... Aug 25 2009, 19:07 aaarrr У Вас получается одинаковая обработка вне зависимо... Aug 25 2009, 19:45 Zliva Цитата(aaarrr @ Aug 25 2009, 22:45) У Вас... Aug 25 2009, 19:53  aaarrr Цитата(Zliva @ Aug 25 2009, 23:53) Тогда ... Aug 25 2009, 19:54   Zliva aaarrr СПАСИБО. ЗАРАБОТАЛО!!!
Цитата(... Aug 25 2009, 20:22    aaarrr Цитата(Zliva @ Aug 26 2009, 00:22) Не пой... Aug 25 2009, 20:32     Zliva aaarrr СПАСИБО.
Заменил volatile int ENCODER1_Pos... Aug 25 2009, 20:50      aaarrr Цитата(Zliva @ Aug 26 2009, 00:50) Давайт... Aug 25 2009, 21:07       Zliva Цитата(aaarrr @ Aug 26 2009, 00:07) Давай... Aug 26 2009, 05:52        aaarrr Цитата(Zliva @ Aug 26 2009, 09:52) Тут во... Aug 26 2009, 10:55         Zliva Цитата(aaarrr @ Aug 26 2009, 13:55) Ее да... Aug 26 2009, 12:08 @Ark ЦитатаЕе даже не обязательно вводить - можно прост... Aug 26 2009, 13:44 Zliva Спасибо за наставление. Но я как-то другого пути н... Aug 26 2009, 14:24 @Ark ЦитатаНо я как-то другого пути не вижу кроме намеч... Aug 26 2009, 15:18 Zliva Цитата(@Ark @ Aug 26 2009, 18:18) Собстве... Aug 26 2009, 15:30 @Ark Это Вам решать как делать. Советы Вы все равно не ... Aug 26 2009, 15:42 Zliva @Ark Спасибо за комментарии!
Согласен. Опыта м... Aug 26 2009, 15:58  aaarrr Цитата(Zliva @ Aug 26 2009, 19:58) Поскол... Aug 26 2009, 16:20   Zliva Цитата(aaarrr @ Aug 26 2009, 19:20) Ох. З... Aug 26 2009, 20:03    aaarrr Цитата(Zliva @ Aug 26 2009, 23:35) Понял.... Aug 26 2009, 20:07     Zliva Возникла новая проблема. С PIT вроде разобрался. Т... Aug 26 2009, 20:36      Zliva Цитата(Zliva @ Aug 26 2009, 23:36) Возник... Aug 30 2009, 14:55       Zliva Скопировал пример с ИАР и компильнул его под свою ... Aug 30 2009, 21:19        aaarrr Цитата(Zliva @ Aug 31 2009, 01:19) Скопир... Aug 30 2009, 21:46         Zliva С прерываниями разобрался. Записал инициализацию т... Aug 31 2009, 18:21          aaarrr Цитата(Zliva @ Aug 31 2009, 22:21) С прер... Aug 31 2009, 20:33           Zliva Прерывания работают. Все заделал как Вы писали.
Ве... Aug 31 2009, 20:48            aaarrr Цитата(Zliva @ Sep 1 2009, 00:48) Верно л... Aug 31 2009, 21:03             Zliva Цитата(aaarrr @ Sep 1 2009, 00:03) Нет. И... Sep 1 2009, 10:29              aaarrr Цитата(Zliva @ Sep 1 2009, 14:29) В режим... Sep 2 2009, 12:30               Zliva Цитата(aaarrr @ Sep 2 2009, 15:30) PIN0 -... Sep 2 2009, 17:41                aaarrr Цитата(Zliva @ Sep 2 2009, 21:41) Как его... Sep 2 2009, 18:23                 Zliva Цитата(aaarrr @ Sep 2 2009, 21:23) Понятн... Sep 2 2009, 19:20                  Zliva Подскажите пожалуйста (код выше). Дело в том что е... Sep 3 2009, 08:37 aaarrr Цитата(Zliva @ Sep 2 2009, 23:20) Вот так... Sep 3 2009, 10:37 Zliva Цитата(aaarrr @ Sep 3 2009, 13:37) Тут то... Sep 3 2009, 15:02  aaarrr Цитата(Zliva @ Sep 3 2009, 19:02) Как это... Sep 3 2009, 15:12   Zliva Цитата(aaarrr @ Sep 3 2009, 18:12) Смотре... Sep 3 2009, 15:51    aaarrr Цитата(Zliva @ Sep 3 2009, 19:51) Посмотр... Sep 3 2009, 16:12 Zliva Вот так инициализирую
Код#define LED1 (1... Sep 3 2009, 19:18 aaarrr Цитата(Zliva @ Sep 3 2009, 23:18) Что дел... Sep 3 2009, 19:25  Zliva Цитата(aaarrr @ Sep 3 2009, 22:25) Плюнут... Sep 3 2009, 19:33   aaarrr Цитата(Zliva @ Sep 3 2009, 23:33) Спасибо... Sep 3 2009, 19:52    Zliva Цитата(aaarrr @ Sep 3 2009, 22:52) Правил... Sep 3 2009, 20:06     aaarrr Цитата(Zliva @ Sep 4 2009, 00:06) Что вы ... Sep 3 2009, 20:13 Zliva Есть проблемка с ADXL210AQC – он не работает. На У... Sep 4 2009, 19:45 Zliva Настало время USB. Пока доставят акселерометры, не... Sep 5 2009, 22:38 head_sk Цитата(Zliva @ Sep 6 2009, 01:38) Может у... Sep 6 2009, 06:47 aaarrr Цитата(Zliva @ Sep 6 2009, 02:38) Впринци... Sep 6 2009, 10:05 head_sk Советую использовать libusb Sep 6 2009, 11:04 Zliva Вот здесь скачал реализацию CDC, в IAR-е получил б... Sep 7 2009, 19:43 aaarrr Здесь можете скачать атмеловские примеры для IAR, ... Sep 8 2009, 08:24 Zliva Может кто-то имеет нормальную, работоспособную вер... Sep 8 2009, 12:17 aaarrr Боюсь, бесплатно будут только "кучерявые... Sep 8 2009, 12:20
2 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|