![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Уважаемые инженеры, добрый день!
Прошу прощения за глупый вопрос, только начал работать с AVRStudio и наверно просто не поставил где-нибудь галочку. Есть код. В зависимости от напряжения на патенциометре меняется скорость моргания светодиода.
Когда останавливаешь программу и подводишь курсор на переменную что бы посмотреть ее значение, всегда отображается 0. Когда пошагово прогоняешь программу (F10) до последней строки (iDelay = cADCResult * 10 ) курсор не доходит, перескакиваев В цикл на строку "cADCReg = 0b01010000 & ADCSRA". Это нормальное поведение программы или всеж-таки надо что-то поправить. Заранее благодарю. Это сообщение отредактировал(а) UniBomb - 24.9.2010, 13:21 |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Программу нельзя останавливать, нужно поставить точку прерывания в нужном месте, когда программа дойдёт туда, она сама остановится, вот тогда и смотри значение нужной переменной.
Удачи! -------------------- Мне нужны помощники. |
|||
|
||||
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Вот, кстати, феномен!
Добавил 2 строки в конец. _delay_ms(iDelay) - В окне Processor время задержки меняется: Если ADCH содержит все единицы (т.е. 255) задержка примерно 1200 us. Если 0-7 (в десятичной) примерно 800 us. ХОТЯ!!! при остановке в iDelay всегда 0 Ставлю BreakPoint на строке "iDelay = cADCResult * 10 ; " Запускаю Start Debugging, BreakPoint перескакивает на следующую строку _delay_ms(iDelay). Такое ощущение что iDelay = cADCResult * 10 вообще не учавствует в программе хокя компелится все без единого ворнинга! И время задержки меняется (но не на нужные 2,5 секунды! Глюки. ![]() ![]() P.S. Вторая строка (последняя): PORTB = PORTB ^ 0x10000000 ; |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Советую после включения дебаггера перейти в окно с дизассемблированным кодом и пройти по шагам в нём.
Удачи! -------------------- Мне нужны помощники. |
|||
|
||||
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Mazzi, спасибо за совет, не подскажете как получить файл asm? hex есть, а asm'а не наблюдается :-(
|
|||
|
||||
makwen |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: 1 Всего: 1 |
добавь в обьявление переменных - volatile
например: volatile unsigned int iDelay ; тогда будут отображатся значения переменных. |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
У меня AVR Studio позволяет писать только на ассемблере, на С я пишу в CodeVisionAVR, а у тебя какой сишный компилятор?
-------------------- Мне нужны помощники. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Mazzi, свежие версии АВРСтудии умеют работать с avr-gcc. Так что теперь можно и кодить и отлаживать (мм... в смысле производить отладку) в одной ide.
во время отладки надо открыть окно view->disassembler. А так ассемблерный код хранится в файле <имя_программы>.lst Это сообщение отредактировал(а) UniBomb - 28.11.2008, 13:32 |
|||
|
||||
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Большое спасибо за ответы!
Когда я первый раз попытался создать проект, AVRStudio сказал, что у него нету компилятора и предложил скачать avr-gcc с сайта http://winavr.sourceforge.net/. После установки avr-gcc автоматически прописался в AVRStudio (сам только include directires в опциях проекта дописал). Это сообщение отредактировал(а) seatouch - 28.11.2008, 14:57 |
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Я однажды поставил себе AVR-GCC, но он мне не понравился тем, что я не нашёл в нём битового типа как в Code Vision AVR, и из-за этого я скоро удалил его.
Может плохо искал? -------------------- Мне нужны помощники. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 9 Всего: 97 |
Mazzi, битовый тип - это переменная размером в 1 бит? А почему не использовать битовые поля? Могу предположить, что в Code Vision именно так и реализованно...
|
|||
|
||||
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Ура! Заработало! В iDelay, cADCReg и cADCResult стали появлятся числа после установки volatile (почитал про нее, спасибо!). Но _delay_ms все равно отрабатывает неправильно :-( Судя по окну Processor больше нескольких тысячь us (на сколько я понимаю, это микро секунды) не получается, не смотря на то, что в iDelay делал до 24000. А посмотреть значения переменных в самой процедуре _delay_ms не получается :-(
|
|||
|
||||
Mazzi |
|
|||
![]() Правильный ![]() ![]() Профиль Группа: Комодератор Сообщений: 825 Регистрация: 3.4.2003 Репутация: 9 Всего: 21 |
Просто есть предопределённый тип - bit. С этим типом легче жить. ![]() Знаю я про битовые поля, но это лишние движения, а я привык к битовому типу, он кстати поддерживается и в Keilе для 51 процов. -------------------- Мне нужны помощники. |
|||
|
||||
makwen |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 163 Регистрация: 9.11.2005 Где: Киев Репутация: 1 Всего: 1 |
На сколько я понимаю, ты используешь стандартную процедуру, а не свою собственную. Тогда учти, что время задержки у нее зависит от зачения дериктивы F_CPU. Посмотри, чему равно данное значение и сравни с системной частотой работы контроллера, которая установлена в AVRStudio. ЗЫ: данными функциями не пользуюсь, пишу свои ![]() Это сообщение отредактировал(а) makwen - 28.11.2008, 18:45 |
|||
|
||||
seatouch |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 27.11.2008 Репутация: нет Всего: нет |
Уважаемые инжинеры, сократил программу до минимума.
В AVRStudio все работает. Компелил и загружал hex от CodeVision, результат тот же. #include <avr\io.h> #include <avr\delay.h> volatile unsigned int i ; void main(void) { DIDR0=0x00 ; DDRD = 0x00 ; DDRB = 0b11111111 ; PORTB = 0b1111111х ; - эта строка выполняется, в зависимости от значения последнего бита светодиод, после программирования, загорается или не загорается. while (1) { i=0 ; while (i<400000) - цикл в AVRStudio работает. Ставил разные значения задержки - после прошивки светодиод все равно не маргает. { i++ ; } PORTB = PORTB ^ 0b11111111 ; - эта строка не выполняется. //PORTB = PORTD ; - без цикла задержки ставил такую строку и выставлял патенциометр в крайние положения - светодиод состояние не меняет. }; } Пришла мысль, может быть неправильон спаяна схема, и МК виснит на первых секундах работы. По этому привожу ее в сообщении. ![]() ![]() Заранее благодарю! Присоединённый файл ( Кол-во скачиваний: 7 ) ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |