usirqst
1

регистры OCR1x

07.05.2011, 02:50. Показов 3610. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Прошу помощи! Уже целый вечер голову ломаю((( Проблема в следующем.
Вот кусок года из моей программы (управляет сервоприводами):
Код
void ioport_init(void)
{
DDRB = 0xFF;
DDRD = 0x00;
}

void pwm_init(void)
{
ICR1 = 20000; // for 20 ms period

TCCR1A = ( 1 << COM1A1 ) | ( 1 << COM1B1) | ( 1 << WGM11 ) ;
TCCR1B = ( 1 << WGM13 ) | ( 1 << WGM12 ) | ( 1 << CS11);
}

int main (void)
{
int i = 0;
char recv_buffer[256];
servo_t * servo_ctrl = (servo_t * ) & recv_buffer[0];

// init fifo buffers;
//us_buffer.in  = (fifo_t *) ubuffer_in;  fifo_init(us_buffer.in);
//us_buffer.out = (fifo_t *) ubuffer_out; fifo_init(us_buffer.out);

pwm_init();
// usart_init();
ioport_init();

OCR1A = 800;
OCR1B = 800;

//sei();

while(1)
{
_delay_ms(1000);
OCR1A = 2100;
OCR1B = 2100;
}

return 0;
}
Во-первых, в регистры OCR1x записываются неправильные значения (портится старший байт ).
Во-вторых, после того, как я переопределяю указанные регистры в главном цикле программы(while), они снова
принимают старые значения, которые были указаны при инициализации ( в моем случае 800 ), это, соответственно, заставляет сервоприводы возвращаться на место. Отключение/Включение оптимизации поведение не меняет....

Использую :
WinAVR - 20100110
AVRStudyo 4.18 (buyld 716)
Atmega8 (частота от внутреннего генератора 8MHz)

Буду очень благодарен за любую помощь.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2011, 02:50
Ответы с готовыми решениями:

регистры
Только, только осваиваю AVR а посему возник вопрос: как перебрать последовательно регистры (РОН)....

Макросы, условия и регистры....
Решил я тут немного в порядок свои макросы привести, систематизировать да упорядочить. Ну и как...

Контрольные регистры ENC28J60
Всем доброго дня! Разбираюсь с запуском модуля ethernet ENC28J60 используя atmega328p. Нашел...

Регистры общего назначения
Подскажите ,пожалуйста, чем отличаются регистры R0...R15 от R16...R31? Кроме того что некоторые...

5
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
07.05.2011, 12:22 2
При работе с 16-битными регистрами есть особенности, поскольку ядро и шина данных восьмибитные.

Это подробно разжевано в даташите в разделе 16.3 Accessing 16-bit Registers
Главный принцип - при записи надо сначала записывать старший байт, при чтении - читать сначала младший байт.

Посмотреть в листинг программы на предмет порядка записи. Или использовать принудительно восьмибитные мнемоники OCR1AH/OCR1AL и т.д.

По идее этим должен заниматься компилятор, но если не работает, значит компилятор филонит.

А по поводу сброса значений - у тебя случайно сброса кристалла не происходит? По ватчдогу или контролю напряжения? Попробуй при инициализации мигать каким-нить светодиодом, сразу будет видно каждый сброс.
0
usirqst
07.05.2011, 16:20 3
При работе с 16-битными регистрами есть особенности
Как только я уже не пытался обратиться к этому регистру))) Почему записываются неправильные значения я разобрался. Это происходит только в симуляторе студии.
По этой теме:
http://www.avrfrioks.net/index.php?name ... 11&stort=0

А по поводу сброса значений - у тебя случайно сброса кристалла не происходит? По ватчдогу или контролю напряжения? Попробуй при инициализации мигать каким-нить светодиодом, сразу будет видно каждый сброс.
Ок! о результатах отпишусь
usirqst
07.05.2011, 16:52 4
Проверил... да светодиод моргает=)) (а должен гореть постоянно, согласно программе)
Watchdog отключен. А вот что подразумевается под фразой: "контролю напряжения"? Имеется ввиду просаживается ли из-за двигателей? То что не просаживается я уверен у меня ограничение по току на 1,5А. А суммарное(максимальное) потребление конструкции (с двумя сервами) 900 мА... Общее питание на 6В, на Мегу развязка по питанию на 4,5В.
Поясните пожалуйста.
usirqst
07.05.2011, 17:26 5
Через регистр MCUCSR определил причину сброса - PORF и EXTRF! Будем копать дальше=)
usirqst
07.05.2011, 17:48 6
Разобрался. Виноват блок питания=))) на блоке написано что макс ток при 6В 1,5 А, а в инструкции, что у него максимально возможен только 1А=)) Замерил... все так и есть... Жесть! Нужно покупать лабораторный блок питания=)
07.05.2011, 17:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2011, 17:48
Помогаю со студенческими работами здесь

Регистры R0-R15 и команды ассемблера.
Добрый день! Подскажите пожалуйста, почему регистры R0-R15 могут использоваться не всеми командами...

spi индикация на сдвиговые регистры CH595
здравствуйте друзья, работа сдвигового регистра 595 и 7 сегментного индикатора состоящих из 5...

Почему во всех примерах используются регистры R16 и выше?
Почему во всех примерах используются регистры R16 и выше? Ну R1..R0 еще ладно, в них результаты...

Пересохранение в другие регистры, используя команду movw на Atmega 16
Подскажите зачем при умножении использовать пересохранение в другие регистры используя команду...

Где можно скачать подключаемые файлы, определяющие регистры?
Где можно скачать подключаемые файлы определяющие регисты в мк атмел? например mega(x)/tiny(x).h и...

i2c, atmel studio undeclared порты и регистры. TWBR TWSR
Всем привет! Развод... депресняк... на 2 года забросил проект, программирование в целом, и...

Слишком часто мигает диод, регистры TWI atmega, смена частоты дефайном, конечный автомат
Приладил код, который был написан под мегу8, я же прошиваю мегу328р, знаю, что через дефайновую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru