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

 
 
 
Reply to this topicStart new topic
> Сброс контроллера и ШИМ
Timofey
сообщение Aug 30 2006, 04:27
Сообщение #1


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Здраствуйте.

1. Подскажите пожалуйста как программно сбрасывать контроллер? Достаточно ли просто укзать строку AT91C_BASE_RSTC->RSTC_RCR=((0xA5 << 24) | 1) ? Нужно ли перед этим конфигурировать? А то там еще и настроечные регисттры есть .... Когда я сбрасываю контроллер этой строкой то у меня просто проц замолкает .... приходится на плате нажимать кнопочку "ресет" ....

2. Как правильно пользоваться RS-485? У меня на палте уже есть 485, я только настраиваю US1 на него и все. Но на входе и выходе данные почему то получаются не те.
Инициализация:
Код
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1<<AT91C_ID_US1 );
  AT91F_PIO_CfgPeriph(
     AT91C_BASE_PIOA,
     ((unsigned int) AT91C_PA21_RXD1    ) |
     ((unsigned int) AT91C_PA22_TXD1    ) |
                 ((unsigned int) AT91C_PA24_RTS1    ) ,
     0 );

  AT91C_BASE_US1->US_IDR = (unsigned int) -1;
  AT91C_BASE_US1->US_CR = AT91C_US_RSTRX
                                               | AT91C_US_RSTTX
                                               | AT91C_US_RXDIS
                                               |   AT91C_US_TXDIS;
  AT91F_US_SetBaudrate(AT91C_BASE_US1, MCK, USART_BAUD_RATE_14400);
  AT91F_US_SetTimeguard(AT91C_BASE_US1, 0);
  AT91F_PDC_Open((AT91PS_PDC) &(AT91C_BASE_US1->US_RPR));
  AT91C_BASE_US1->US_MR = AT91C_US_ASYNC_MODEmy;
  
  
AT91C_BASE_US1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC,
                        AT91C_ID_US1,
                        USART_INTERRUPT_LEVEL,
                        AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                        Usart_c_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
AT91F_PDC_Open (AT91C_BASE_PDC_US1);
AT91C_BASE_US1->US_RPR = (unsigned int) BUFF_485_IN;
AT91C_BASE_US1->US_RCR = 100;
AT91C_BASE_US1->US_RTOR = 16;
AT91F_US_EnableIt(AT91C_BASE_US1,  AT91C_US_TIMEOUT );


}


Код
#define AT91C_US_ASYNC_MODEmy ( AT91C_US_USMODE_RS485 + \
                        AT91C_US_NBSTOP_1_BIT + \
                        AT91C_US_PAR_EVEN + \
                        AT91C_US_CHRL_8_BITS + \
                        AT91C_US_CLKS_CLOCK )


Отправляю просто набор байт с 0х00 до 0х0F и получаю на компе на входе: FF FD FB F9 F7 ... и тд до E1 .... В чем может быть проблема? Преобразователь на компе который стоит - работает нормально, проверен был ранее на других программах. Отправляю через PDC.

3. Как с помощью TC сделать какой-нибудь сигнал? Мне требуется формировать прямоугольные импульсы .... Может примерчик какой-нибудь маленький есть? Чтобы посмотреть как вобще строятся сигналы.
З.Ы. Забыл добавить .... Работаю в IAR плата с контролллером SAM7S64

Сообщение отредактировал Timofey - Aug 30 2006, 04:29
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Aug 30 2006, 06:17
Сообщение #2


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Цитата(Timofey @ Aug 30 2006, 08:27) *
3. Как с помощью TC сделать какой-нибудь сигнал? Мне требуется формировать прямоугольные импульсы .... Может примерчик какой-нибудь маленький есть? Чтобы посмотреть как вобще строятся сигналы.

Код
/*------------------------------------------------------------------------------------------------*/
void set_timer_channel2_to_frequency_output(void)
{
    unsigned short TimerValue;
    unsigned int   PrescalerID;

    AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_TC2);
    AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA26_TIOA2);

    TimerValue  = 2;                              /* ñðàáàòûâàíèå òðèããåðà ïîñëå 2 òàêòîâ */
    PrescalerID = AT91C_TC_CLKS_TIMER_DIV1_CLOCK; /* ÷àñòîòà MCK/2                        */

    /* óñòàíàâëèâàåì ïðåääåëèòåëü ÷àñòîòû è ðåæèì ãåíåðàöèè ïîâòîðÿþùèõñÿ èìïóëüñîâ, âêëþ÷àåì òðèããåð */
    AT91C_BASE_TC2->TC_CMR = PrescalerID
                             |
                             AT91C_TC_WAVE
                             |
                             AT91C_TC_WAVESEL_UP_AUTO
                             |
                             AT91C_TC_CPCTRG
                             |
                             AT91C_TC_ACPA_SET
                             |
                             AT91C_TC_ACPC_CLEAR;

    /* óñòàíàâëèâàåì ôîðìó ãåíåðèðóåìûõ èìïóëüñîâ íà âûõîäå TIOA2 */
    AT91C_BASE_TC2->TC_RA = TimerValue / 2;
    AT91C_BASE_TC2->TC_RC = TimerValue;

    /* çàïóñêàåì òàéìåð */
    AT91C_BASE_TC2->TC_CCR = AT91C_TC_CLKEN | AT91C_TC_SWTRG;
}
/*------------------------------------------------------------------------------------------------*/

Генерация сигнала на выходе TIOA2 меандпра с частотой (MCK/2)/TimerValue.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Aug 30 2006, 06:22
Сообщение #3


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(SpiritDance @ Aug 30 2006, 12:17) *



спасибо!
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Aug 30 2006, 06:30
Сообщение #4


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



По второму пункту, что у вас пишется в MR и в BRGR?
AT91C_US_USMODE_RS485?
Возможно не та частота приема-передачи.


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Aug 30 2006, 06:35
Сообщение #5


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(SpiritDance @ Aug 30 2006, 12:30) *
По второму пункту, что у вас пишется в MR и в BRGR?
AT91C_US_USMODE_RS485?
Возможно не та частота приема-передачи.


У меня должен работать на 5 разных частотах .... Начиная 9600 и кончая 57600. По выбору пользователя. Но сейчас я делаю просто на одной - 14400. хотя бы на ней оживить.

Сообщение отредактировал Timofey - Aug 30 2006, 06:36
Go to the top of the page
 
+Quote Post
Timofey
сообщение Aug 30 2006, 07:50
Сообщение #6


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



С 485 разобрался ... Просто дадли устройство с неправильно припаянными проводами .... Блин! Убил бы! ))) Поэтому инвертированный сигнал получал ))) Ну почти инвертированный )) Вобщем дело оказалось в бабине )
Go to the top of the page
 
+Quote Post
Timofey
сообщение Aug 31 2006, 05:46
Сообщение #7


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....
Go to the top of the page
 
+Quote Post
почемучка
сообщение Aug 31 2006, 14:50
Сообщение #8


Участник
*

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



Попробуйте воспользоваться сбросом от WDT.
Go to the top of the page
 
+Quote Post
sapID
сообщение Sep 1 2006, 04:32
Сообщение #9


Участник
*

Группа: Свой
Сообщений: 24
Регистрация: 21-10-04
Из: Пермь, РФ
Пользователь №: 934



Цитата(Timofey @ Aug 31 2006, 11:46) *
Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....


void Restart(void)
{
// Аппаратный сброс
AT91C_BASE_RSTC->RSTC_RCR |= AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_PASS;

// На всякий случай, программный
__asm("sub r0, r0,r0;");
__asm("bx r0;");
}
Go to the top of the page
 
+Quote Post
Timofey
сообщение Sep 4 2006, 03:48
Сообщение #10


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(sapID @ Sep 1 2006, 10:32) *
Цитата(Timofey @ Aug 31 2006, 11:46) *

Ну помогите пожалуйста разобраться с программным сбросом .... Фигня какая то ....


void Restart(void)
{
// Аппаратный сброс
AT91C_BASE_RSTC->RSTC_RCR |= AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST | AT91C_PASS;

// На всякий случай, программный
__asm("sub r0, r0,r0;");
__asm("bx r0;");
}


Спасибо большое! Прикольно ... работает smile.gif

З.Ы. А кто тут модератор? Пусть он удалит сообщения мои в разделе FAQ ....
Go to the top of the page
 
+Quote Post

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

 


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


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