Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.11.2007, 23:05
|
|
Временная регистрация
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Програмирование CVAVR
Может конечно банальный вопрос и тем не менее...
Как при програмировании на СVAVR обратится к регистрам таймера 1 в режиме ШИМ таким как ICR1, OCR1A, OCR1B, OCR1C, как к двухбайтным типа int?
Чтобы корректно записывался вначале старший а потом младший байт.
В хедере эти регистры описаны только как однобайтные типа char, при попытке вручную описать как int не корректно работает ШИМ. В регистр переносится только младший байт. AVR studio симулирует все честно типа регистр изменяется и ШИМ работает как надо.
ЗЫ совсем забыл контроллер AT90can128.
|
|
|
|
22.11.2007, 23:46
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Сначала надо установить разрядность ШИМ (8бит,9бит,10бит).А затем обращаться к этим регистрам. У вас по видимому установлен 8бит режим ШИМ поэтому и работает не корректно .
OCR1AH=0; старший разряд -если режим 9 бит или 10 бит , если 8 бит то писать ничего не надо.
OCR1AL =100; младший
|
|
|
|
23.11.2007, 00:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Вот я в примере LED из CVAVR вписал строку
OCR1A = 314;
нормально скушал и записал по байтам.
вот что в ASM листинге
Код:
|
; 91
; 92 OCR1A = 314;
000077 e3ea LDI R30,LOW(314)
000078 e0f1 LDI R31,HIGH(314)
000079 bdfb OUT 0x2A+1,R31
00007a bdea OUT 0x2A,R30 |
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
23.11.2007, 18:29
|
|
Временная регистрация
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Вот я в примере LED из CVAVR вписал строку
OCR1A = 314;
нормально скушал и записал по байтам.
|
Хорошо тогда такой вопрос: Как посмотреть асм листинг, и как найти место соответствующее командам си?
Потому что у меня при настройке тааймера 1 в режиме Fast PWM сброс по достижению значения ICR1 при инициализации значению ICR1 присваивается только младший байт. Так же как и значению OCR1С но уже в прерывании.
При симуляции в AVRstudio все проходит нормально, а вот при зашивании в процессор
|
|
|
|
23.11.2007, 18:49
|
|
Временная регистрация
Регистрация: 28.02.2007
Сообщений: 90
Сказал спасибо: 6
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Да и еще вопрос если нужно выйти из прерывания не заканчивая обработчик то как это сделать?
|
|
|
|
23.11.2007, 19:20
|
|
Прописка
Регистрация: 22.09.2006
Адрес: Днепропетровск
Сообщений: 114
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от buka_2004
|
Да и еще вопрос если нужно выйти из прерывания не заканчивая обработчик то как это сделать?
|
Дык просто return
Например.
//---------------------------------------------------------------
// Function : USART 1 receive complete interrupt
// Description :
//---------------------------------------------------------------
#pragma savereg+
interrupt [USART1_RXC] void usart1_rx_isr(void)
{
unsigned char dat;
// test for FRAME ERROR and OVERRUN
dat=UCSR1A & 0b00011000;
if(dat!=0)
{
dat=UDR1;
UCSR1A=UCSR1A; // reset USART 1 flags
return;
}
dat=UDR1;
USART1_Buffer[USART1_BytesCounter]=dat;
USART1_BytesCounter++;
// check for end of the packet
if(USART1_BytesCounter›=USART1_BUFFERCAPACITY)
{
USART1_ReceiveComplete=true; // set receive complete flag
UCSR1B&=0b01111111; // RXCIE1 disable
UCSR1A=UCSR1A; // clear USART 1 flags
}
}
//------------------------- END OF FUNCTION ---------------------
|
|
|
|
23.11.2007, 20:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от buka_2004
|
Как посмотреть асм листинг, и как найти место соответствующее командам си?
|
В курсе написано конечно все это ...
листинг в CVAVR это файл .lst
Найти - поиском в той проге в которой будете посматривать вестимо ! Обычно Ctrl+F - написано в самом заглавии краткого курса.
В CVAVR - файл оупен - тип "Лист файлс"
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
24.11.2007, 10:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Сообщение от buka_2004
|
Как посмотреть асм листинг, и как найти место соответствующее командам си?
|
листинг в CVAVR это файл .lst
|
Как говорится, самое страшное при насморке - советы добрых друзей. ![Смешно](images/smilies/icon_lol.gif) Ему же не листинг нужен, с адресами и прочей байдой, а посмотреть во что CvAvr сишные коды превращает. Ты, buka, лучше в файл .asm смотри - там все видно и ничего лишнего.
|
|
|
|
24.11.2007, 12:09
|
|
Гражданин KAZUS.RU
Регистрация: 30.04.2006
Сообщений: 984
Сказал спасибо: 5
Сказали Спасибо 18 раз(а) в 14 сообщении(ях)
|
Сообщение от buka_2004
|
Да и еще вопрос если нужно выйти из прерывания не заканчивая обработчик то как это сделать?
|
Вопрос немного не в тему, но все же:
Можно ли в CVAVR выйти из прерывания так, чтобы прерывания были запрещены? Другими словами чтобы компитятор откомпилировал return как ret а не reti?
|
|
|
|
24.11.2007, 20:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Сообщение от dimonbest
|
Можно ли в CVAVR ... чтобы компитятор откомпилировал return как ret а не reti?
|
1.Не объявляй функцию обработчиком прерывания, или
2.Вставь в функцию-обработчик прерывания ассемблерную инструкцию ret
В любом случае придётся извращаться на уровне встраивания ассемблерных инструкций в сишный код, а это, для такой странной задачи, не будет гладко - одно неверное движение, одна модификация сишного исходника без тщательной проверки промежуточного ассемблерного кода - и ты по уши в эмм... в загадках относительно причин зависона.
Скорее всего, ты идёшь неверным путём. Лучше объясни чего ты хочешь добиться - наверняка есть легальные способы получить нужный результат.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
CVAVR while и таймер
|
kr11507 |
Микроконтроллеры, АЦП, память и т.д |
10 |
13.12.2008 21:29 |
Програмирование портов Infenon С167
|
vadimvarn |
Микроконтроллеры, АЦП, память и т.д |
1 |
01.11.2008 02:31 |
Програмирование по SPI
|
EKuzmich |
Микроконтроллеры, АЦП, память и т.д |
2 |
09.07.2008 21:35 |
програмирование АТmega32???
|
TimaON |
Микроконтроллеры, АЦП, память и т.д |
0 |
06.05.2008 14:41 |
Програмирование attiny2313
|
Gorgic |
Микроконтроллеры, АЦП, память и т.д |
1 |
15.12.2007 00:00 |
Часовой пояс GMT +4, время: 09:52.
|
|