|
Микроконтроллер сбрасывается..., Несоответствие между заголовочным файлом и Datasheet... |
|
|
|
Dec 25 2007, 09:07
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
Здравствуйте... У меня к вам вот такой вопрос... Я пишу программу для ATmega32... Пишу ее в WinAVR 20060421... Так вот... После команды sei() у меня происходит сброс... Есть предположения, почему он происходит... Я просмотрел заголовочный файл iom32.h и обнаружил небольшое несоответствие с даташитом... В общем... В заголовочном файле написано... Код /* ADC Conversion Complete */ #define ADC_vect _VECTOR(16) #define SIG_ADC _VECTOR(16) а читая даташит, я вижу... Цитата Table 18. Reset and interrupt vectors Vector No. | Program address | Source | Interrupt definition . . . 16 | $01E | USART, TXC | USART, Tx Complete 17 | $020 | ADC | ADC Conversion Complete . . . Так вот... если я ошибаюсь, и моя ошибка не из-за этого - поправьте меня, пожалуйста... а если я не ошибаюсь, то хотел бы предложить создать топик, где описывались бы подобные ошибки... просто я захотел поделиться своим наблюдением... просмотрел поиск и не обнаружил ничего по этой теме... Спасибо за внимание...
--------------------
!!! All you need is LOVE !!!
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 26)
|
Dec 25 2007, 09:56
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Freeze Anti @ Dec 25 2007, 12:07)  Так вот... если я ошибаюсь, и моя ошибка не из-за этого - поправьте меня, пожалуйста... а если я не ошибаюсь, то хотел бы предложить создать топик, где описывались бы подобные ошибки... просто я захотел поделиться своим наблюдением... просмотрел поиск и не обнаружил ничего по этой теме... Ошибки в зоголовочных файлах нет. Чтобы поправить вас нужно увидеть ваш код. VassiL - тоже код, версию WinAVR и варинги компилятора. Анатолий.
|
|
|
|
|
Dec 25 2007, 10:48
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
Код #include <avr/io.h> #include <util/delay.h> #include <stdio.h> #include <avr/interrupt.h>
. . .
unsigned short sCurrentTemp = 0;
INTERRUPT(SIG_ADC) //Обработчик прерывания от интегрированного АЦП { unsigned int ADCData; //Буферная переменная для хранения ADCData = ADCW; //результата преобразования sCurrentTemp = ADCData / 2; ADCSRA = ADCSRA | 0x40; //Устанавливаем разряд ADSC в регистре //ADCSR, чтобы начать новое преобразование }
. . .
void main(void) { char sLogo1[] = {0x4F, 0x41, 0x4F, 0x20, 0x43, 0x48, 0xA8, 0xE1, 0x20, 0x50, 0x4F, 0x43, 0xE0, 0x4F, 0x50, 0x54, 0x45, 0x58, 0x00}; char sLogo2[] = {0x4B, 0xB8, 0xAC, 0x20, 0x30, 0x2E, 0x31, 0x00}; DDRB = 0xFF; //Выводы 0 - 6 порта B - выходы (передача данных и управляющие сигналы) InitLCD(); //Инициализируем ЖК-дисплей ClearLCD(); ShowStr(sLogo1); GoToLine(2); ShowStr(sLogo2); DDRA = 0x00; //Все выводы порта A - входы DDRC = 0x00; //Все выводы порта C - входы ADMUX = 0xC0; //Назначаем в качестве аналогового входа PA0; ADCSRA = 0xEF; /*0b11101111 - активизируем АЦП с коэффициентом деления 128, разрешаем прерывание от АЦП и начинаем преобразование*/ sei(); //Общее разрешение прерываний; _delay_ms(2000); while(1) { if (PINC & 0x02) Control(); else if (PINA & 0x02) Set(); else Measure(); } } Вот... и после функции sei(); контроллер перезапускается... Посмотрел даташит и хедер... возможно, вы и правы... отсчет везде начинается с единицы, но только в хедере нет вектора RESET...
--------------------
!!! All you need is LOVE !!!
|
|
|
|
|
Dec 25 2007, 11:50
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(aesok @ Dec 25 2007, 12:56)  Ошибки в зоголовочных файлах нет. Чтобы поправить вас нужно увидеть ваш код. VassiL - тоже код, версию WinAVR и варинги компилятора.
Анатолий. Хочу заставить моргать светодиод с помощью данного кода используя прерывание Версия WinAVR 20050214 Ставил версию 2007 года на другой машине - таже история. #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define Freq 4000000 INTERRUPT(SIG_OVERFLOW1) { //Инициализируем счетный регистр значением 61630 TCNT1 = 0x10000 - (Freq / 1024); PORTB ^= 0x01; } int main (void) { DDRB = 0x01; //Вывод 0 порта В - Выход TCCR1A = 0; // T/C1 отсоеденен от вывода ОС1, режим ШИМ отключен TCCR1B = 5; // Коэф. деления частоты системной синхронизации = 1024 TCNT1 = 0x10000 - (Freq / 1024); //Инициализируем счетный регистр TIFR = 0; //Сбрасываем все флаги прерываний от T/C1 TIMSK = 0x80; //Разрешаем прерывание при переполнении T/C1 GIMSK = 0; //Запрет внешних прерываний sei(); //Общее разрешение прерываний while(1); //Ожидаем прерывания от T/C1 каждую секунду } После компиляции имеются варнинги: c:/program files/win avr/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." ../LEDBlink.c:10: warning: return type defaults to 'int' ../LEDBlink.c: In function 'INTERRUPT': ../LEDBlink.c:14: warning: control reaches end of non-void function Build succeeded with 3 Warnings...
|
|
|
|
|
Dec 25 2007, 11:53
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(aesok @ Dec 25 2007, 14:37)  3. _delay_ms(2000); Неверно. Прочитайте описание _delay_ms и _delay_us. Извините, но мне влом описывать эту ошибку раз в квартал. Анатолий. А в чем ошибка? Например тактовая F_CPU 128Кгц, неужели _delay_ms(2000) будет работать как то не так?
|
|
|
|
|
Dec 25 2007, 11:56
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(VassiL @ Dec 25 2007, 14:50)  Хочу заставить моргать светодиод с помощью данного кода используя прерывание Версия WinAVR 20050214 Ставил версию 2007 года на другой машине - таже история.
...
После компиляции имеются варнинги: c:/program files/win avr/bin/../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete. Use <avr/interrupt.h>." ../LEDBlink.c:10: warning: return type defaults to 'int' ../LEDBlink.c: In function 'INTERRUPT': ../LEDBlink.c:14: warning: control reaches end of non-void function Build succeeded with 3 Warnings... Уберите #include <avr/signal.h> Измените INTERRUPT(SIG_OVERFLOW1) на ISR(SIG_OVERFLOW1) И варнинги исчезнут.
Сообщение отредактировал Qwertty - Dec 25 2007, 12:01
|
|
|
|
|
Dec 25 2007, 11:58
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Qwertty @ Dec 25 2007, 14:53)  А в чем ошибка? Например тактовая F_CPU 128Кгц, неужели _delay_ms(2000) будет работать как то не так? Извините. В этом случае будет. Но тогда: ADCSRA = 0xEF; /*0b11101111 - активизируем АЦП с коэффициентом деления 128, разрешаем прерывание от АЦП и начинаем преобразование*/ Частота работы ADC очень низкая = 1Кгц. By default, the successive approximation circuitry requires an input clock frequency between 50 kHz and 200 kHz to get maximum resolution. If a lower resolution than 10 bits is needed, the input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate. Анатолий.
Сообщение отредактировал aesok - Dec 25 2007, 12:04
|
|
|
|
|
Dec 25 2007, 12:23
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
Цитата(aesok @ Dec 25 2007, 14:55)  2. #define Freq 4000000 Длжно быть Freq 4000000UL Анатолий. Это вообще то задается в Makefile... и тогда, действительно, UL не надо... Цитата И сбрасывается - в железе или в симуляторе? Так в том и проблема, что сбрасывается в симуляторе... сам сначала на фьюзы грешил... сейчас поправлю в соответствии с замечаниями и проверю...
Сообщение отредактировал Freeze Anti - Dec 25 2007, 12:26
--------------------
!!! All you need is LOVE !!!
|
|
|
|
|
Dec 25 2007, 12:29
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Freeze Anti @ Dec 25 2007, 15:23)  2. #define Freq 4000000 Длжно быть Freq 4000000UL Анатолий.
Это вообще то задается в Makefile... и тогда, действительно, UL не надо... Обоснуйте пожалуйста свое утверждение. Анатолий.
|
|
|
|
|
Dec 25 2007, 12:29
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(Qwertty @ Dec 25 2007, 14:56)  Уберите #include <avr/signal.h> Измените INTERRUPT(SIG_OVERFLOW1) на ISR(SIG_OVERFLOW1) И варнинги исчезнут. Спасибо большое! Все откомпилировалось без предупреждений. Прошил проц и он работает! У меня теперь другая проблема: Когда запускаю симулятор, выскакивает вот такая ошибка: **Runtime Error! This application has requested the Runtime to terminate it in an unusual way. и просят связаться с тех поддержкой для получения большей информации** Предлагается нажать ОК После успешного нажатия последней, AVR studio закрывается.
|
|
|
|
|
Dec 25 2007, 12:32
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(VassiL @ Dec 25 2007, 15:29)  Спасибо большое! Все откомпилировалось без предупреждений. Прошил проц и он работает! У меня теперь другая проблема: Когда запускаю симулятор, выскакивает вот такая ошибка: **Runtime Error! This application has requested the Runtime to terminate it in an unusual way. и просят связаться с тех поддержкой для получения большей информации** Предлагается нажать ОК После успешного нажатия последней, AVR studio закрывается. Версии WinAVR и AVRStudio? Анатолий.
|
|
|
|
|
Dec 25 2007, 12:35
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(aesok @ Dec 25 2007, 15:32)  Версии WinAVR и AVRStudio?
Анатолий. AVR studio: Version 4.12 Service Pack 3 WinAVR: 20050214
|
|
|
|
|
Dec 25 2007, 12:50
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
спасибо всем большое... программа больше не сбрасывается в отладчике... завтра проверю на железе... действительно, надо было изменить INTERRUPT на ISR... насчет #define Freq 4000000 вот цитата из моего Makefile... Я использовал стандартный, внеся туда соответствующие исправления... Код # Processor frequency. # This will define a symbol, F_CPU, in all source code files equal to the # processor frequency. You can then use this symbol in your source code to # calculate timings. Do NOT tack on a 'UL' at the end, this will be done # automatically to create a 32-bit value in your source code. # Typical values are: # F_CPU = 1000000 # F_CPU = 1843200 # F_CPU = 2000000 # F_CPU = 3686400 # F_CPU = 4000000 # F_CPU = 7372800 # F_CPU = 8000000 # F_CPU = 11059200 # F_CPU = 14745600 # F_CPU = 16000000 # F_CPU = 18432000 # F_CPU = 20000000 F_CPU = 4000000
Сообщение отредактировал Freeze Anti - Dec 25 2007, 12:51
--------------------
!!! All you need is LOVE !!!
|
|
|
|
|
Dec 25 2007, 12:58
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Freeze Anti @ Dec 25 2007, 15:50)  насчет #define Freq 4000000 вот цитата из моего Makefile... Я использовал стандартный, внеся туда соответствующие исправления... Код # Processor frequency. # This will define a symbol, F_CPU, in all source code files equal to the # processor frequency. You can then use this symbol in your source code to # calculate timings. Do NOT tack on a 'UL' at the end, this will be done # automatically to create a 32-bit value in your source code. ....... F_CPU = 4000000 А вот другая цитата из Makefile: CPPDEFS = -DF_CPU=$(F_CPU)UL Анатолий. Цитата(VassiL @ Dec 25 2007, 15:35)  AVR studio: Version 4.12 Service Pack 3 WinAVR: 20050214 Это версии совместимы. Точно у вас не WinAVR 2007? Анатолий.
|
|
|
|
|
Dec 25 2007, 13:20
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(aesok @ Dec 25 2007, 15:58)  А вот другая цитата из Makefile:
CPPDEFS = -DF_CPU=$(F_CPU)UL
Анатолий. Это версии совместимы. Точно у вас не WinAVR 2007?
Анатолий. Я прошу прощения, проморгал.. у меня и вправду 2007xxxx версия WinAVR. Сейчас поставил версию 20050214 и симулятор пошел. Спасибо большое! Сразу вопрос, может нужно найти новый патч на AVR studio или нужно скачать обновленную версию AVR studio? Поделитесь опытом пожалуйста!
|
|
|
|
|
Dec 25 2007, 13:25
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
Цитата(aesok @ Dec 25 2007, 15:58)  А вот другая цитата из Makefile:
CPPDEFS = -DF_CPU=$(F_CPU)UL Да я это к тому, что в Makefile уже задается частота... Не будет ли каких-либо конфликтов по ходу компиляции?.. Какое из этих занчений используется в хедерах?.. А вообще предпочитаю не переобъявлять ничего заново... Несколько проще читать потом...
--------------------
!!! All you need is LOVE !!!
|
|
|
|
|
Dec 25 2007, 13:30
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(Qwertty @ Dec 25 2007, 16:26)  Winavr2007 требует студию 4.13 Несмотря на то, что она бета, к ней уже 2 сервиспака вышли  Киньте ссылкой в меня пожалуйста, если есть таковая  или на мыло уже скачанное, если нетрудно. vasil07@inbox.ru
|
|
|
|
|
Dec 25 2007, 13:45
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(Qwertty @ Dec 25 2007, 15:26)  Winavr2007 требует студию 4.13 Несмотря на то, что она бета, к ней уже 2 сервиспака вышли  Бетой у Атмела, как и у Майкрософта, можно назвать любой релиз, даже финальный  . На сайте Атмела после выхода сервиспаков этот билд (aStudio4b528.exe) уже не позиционируется как бета. Цитата(VassiL @ Dec 25 2007, 15:30)  Киньте ссылкой в меня пожалуйста, если есть таковая  или на мыло уже скачанное, если нетрудно. vasil07@inbox.ru Здесь, как обычно.
|
|
|
|
|
Dec 25 2007, 13:53
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 20-12-07
Из: Таганрог
Пользователь №: 33 471

|
Цитата(IgorKossak @ Dec 25 2007, 16:45)  Бетой у Атмела, как и у Майкрософта, можно назвать любой релиз, даже финальный  . На сайте Атмела после выхода сервиспаков этот билд (aStudio4b528.exe) уже не позиционируется как бета. Здесь, как обычно. Спасибо, уже качаю! Спасибо большое всем участникам форума и его создателям! Теперь можно двигаться дальше. Всех с наступающим НГ!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|