Микроконтроллеры AVR - применение и Краткий Курс - часть 10

 
1 32 33 34 35 36 37 38
UA Non-conformist #26.04.2013 13:32  @GOGI#26.04.2013 13:01
+
-
edit
 

Non-conformist

аксакал

Скомпилировал. Сейчас ошибок нет, остались три прежние замечания по uart.c (см. выше). Можно прошивать?
Skype: a_schabanow  

GOGI

координатор
★★★★
Xan> Как теперь?
Компилируется нормально. Proteus опять стал виснуть на этой прошивке.
Xan> А структуры есть?
Да, конечно. Все стандартное сишное там есть.
1  20.020.0
UA Non-conformist #26.04.2013 13:40  @GOGI#26.04.2013 13:35
+
-
edit
 

Non-conformist

аксакал

Прошил; лог (три раза подавал питание на устройство) в общей папке. Вроде всё нормально?
Skype: a_schabanow  
KZ Xan #26.04.2013 13:56  @Non-conformist#26.04.2013 13:40
+
-
edit
 

Xan

координатор

Non-conformist> Прошил; лог (три раза подавал питание на устройство) в общей папке. Вроде всё нормально?

Нет.
МК перезагружается постоянно.
 10.010.0

Xan

координатор

Сделал, чтоб при старте посылалась строчка "Старт".

Ну и надо понять, почему рестартает.
Сторожевой таймер работает?
 10.010.0
UA Non-conformist #26.04.2013 14:58  @Xan#26.04.2013 14:07
+
-
edit
 

Non-conformist

аксакал

Проверил цепь RST - при подаче питания на ноге 4 наблюдаю +5 В. Вот на всякий случай текущая схема:
Прикреплённые файлы:
 
Skype: a_schabanow  
KZ Xan #26.04.2013 15:06  @Non-conformist#26.04.2013 14:58
+
-
edit
 

Xan

координатор

Non-conformist> Проверил цепь RST

В МК есть WDT, который надо периодически сбрасывать специальной командой. Иначе он сбросит (железно) МК. Это сделано от зависаний при случайных сбоях.

Поищи в доках слово WDT, как выглядит команда его сброса?
 10.010.0
UA Non-conformist #26.04.2013 15:43  @Xan#26.04.2013 15:06
+
-
edit
 

Non-conformist

аксакал

Assembly Code Example
code text
  1. WDT_off:
  2. ; reset WDT
  3. wdr
  4. ; Write logical one to WDTOE and WDE
  5. in r16, WDTCR
  6. orir16, (1<<WDTOE)|(1<<WDE)
  7. outWDTCR, r16
  8. ; Turn off WDT
  9. ldir16, (0<<WDE)
  10. outWDTCR, r16
  11. ret


C Code Example
code text
  1. voidWDT_off(void)
  2. {
  3. /* reset WDT */
  4. _WDR();
  5. /* Write logical one to WDTOE and WDE */
  6. WDTCR |= (1<<WDTOE) | (1<<WDE);
  7. /* Turn off WDT */
  8. WDTCR = 0x00;
  9. }
Skype: a_schabanow  
UA Non-conformist #26.04.2013 15:48  @Non-conformist#26.04.2013 15:43
+
-
edit
 

Non-conformist

аксакал

• Bits [7:5] – Reserved Bits
These bits are reserved bits in the ATmega32 and will always read as zero.

• Bit 4 – WDTOE: Watchdog Turn-off Enable
This bit must be set when the WDE bit is written to logic zero. Otherwise, the Watchdog will not be disabled. Once written to one,hardware will clear thisbit after four clock cycles. Refer to the description of the WDE bit for a Watchdog disable procedure.

• Bit 3 – WDE: Watchdog Enable
When the WDE is written to logic one, the Watchdog Timer is enabled, and if the WDE is written to logic zero, the Watchdog Timer function is disabled. WDE can only be cleared if the WDTOE bit has logic level one. To disable an enabled Watchdog Timer, the following procedure must be followed:
1. In the same operation, write a logic one to WDTOE and WDE. A logic one must be writ-ten to WDE even though it is set to one before the disable operation starts.
2. Within the next four clock cycles, write a logic 0 to WDE. This disables the Watchdog.

• Bits [2:0] – WDP2, WDP1, WDP0: Watchdog Timer Prescaler 2, 1, and 0
The WDP2, WDP1, and WDP0 bits determine the Watchdog Timer prescaling when the Watch-dog Timer is enabled.
Skype: a_schabanow  
KZ Xan #26.04.2013 16:32  @Non-conformist#26.04.2013 15:43
+
-
edit
 

Xan

координатор

Non-conformist>

Что-то вставил в main.c, попробуй.
 10.010.0
UA Non-conformist #26.04.2013 16:33  @Non-conformist#26.04.2013 15:48
+
-
edit
 

Non-conformist

аксакал

Чтобы отключить сторожевой таймер, нужно записать "0" в WDE. Но записать этот "0" получится только тогда, когда в WDTOE записана "1". Таким образом, процедура отключения сторожевого таймера выглядит следующим образом:

1. В одной и той же инструкции пишем "1" в WDE и WDTOE. Бит WDE должен быть установлен в "1" даже в том случае, если там уже была "1" до начала процедуры отключения сторожевого таймера.
2. В течение последующих четырёх тактов пишем "0" в WDE.
Skype: a_schabanow  
UA Non-conformist #26.04.2013 16:37  @Xan#26.04.2013 16:32
+
-
edit
 

Non-conformist

аксакал

Xan> Что-то вставил в main.c, попробуй.
Ругается:
Warning[Pe223]: function "_WDR" declared implicitly C:\Мои документы\Dropbox\Новая папка (1)\main.c 108
Error[e46]: Undefined external "_WDR" referred in main ( C:\Мои документы\Dropbox\Новая папка (1)\Debug\Obj\main.r90 )
Skype: a_schabanow  
KZ Xan #26.04.2013 16:42  @Non-conformist#26.04.2013 16:37
+
-
edit
 

Xan

координатор

Non-conformist> Ругается:

Ну, надо специалиста звать.

В пиках это делается одной строкой
CLRWDT();
а как в атмелях — не знаю.
 10.010.0
UA Non-conformist #26.04.2013 16:43  @Xan#26.04.2013 16:42
+
-
edit
 

Non-conformist

аксакал

Да, похоже приехали. Опечаток не вижу, однако. Судя по тексту ошибки, это какой-то чисто ИАРовский прикол, в рамках проекта, а не отдельно взятого текста. Что-то не так объявили...
Skype: a_schabanow  
KZ Xan #26.04.2013 16:51  @Non-conformist#26.04.2013 15:48
+
-
edit
 

Xan

координатор

Non-conformist>

Попробуй ещё раз.

Асмовый вариант вставил.
 10.010.0

GOGI

координатор
★★★★
В IAR можно
__watchdog_reset();
1  20.020.0

Xan

координатор

GOGI> В IAR можно
GOGI> __watchdog_reset();

Вставил, можно пробовать.
 10.010.0
UA Non-conformist #26.04.2013 19:05  @Xan#26.04.2013 17:17
+
-
edit
 

Non-conformist

аксакал

Прошил, вижу мелькание цифр, но в лог почему-то ничего не пишется. Пустой файл генерируется, и всё. Нажал "вью лог" - по-моему там то же самое, что и было. Почти всё нули одни.

Дай, пожалуйста, ссылку на последнюю версию своего монитора (который с двумя строчками в окне).
Skype: a_schabanow  
KZ Xan #26.04.2013 19:22  @Non-conformist#26.04.2013 19:05
+
-
edit
 

Xan

координатор

Non-conformist> Прошил, вижу мелькание цифр, но в лог почему-то ничего не пишется.

В меню Hex надо выбрать Ascii.
В меню CS — disable

Прога при старте должна передавать строчку "Start". И это должно быть в логе.

Non-conformist> Дай, пожалуйста, ссылку на последнюю версию своего монитора (который с двумя строчками в окне).

Старый должен тоже работать.
Немножко новый:
https://dl.dropboxusercontent.com/u/6706516/Comport2.rar [zero size or time out]
Строчек можно много сделать, но они для ответов на команды.
 10.010.0
KZ Xan #26.04.2013 19:24  @Non-conformist#26.04.2013 19:05
+
-
edit
 

Xan

координатор

Non-conformist> Прошил, вижу мелькание цифр, но в лог почему-то ничего не пишется.

Размер файла нулевой?
Если нет, выложи.
 10.010.0
UA Non-conformist #26.04.2013 20:04  @Xan#26.04.2013 19:24
+
-
edit
 

Non-conformist

аксакал

Записал лог со старого монитора. То что-то глюкануло.

Не вижу никаких изменений.
Skype: a_schabanow  
KZ Xan #26.04.2013 20:09  @Non-conformist#26.04.2013 20:04
+
-
edit
 

Xan

координатор

Non-conformist> Не вижу никаких изменений.

У тебя что-то старое в железе.
Перекомпилируй и загрузи заново.
 10.010.0
KZ Xan #26.04.2013 20:15  @Non-conformist#26.04.2013 20:04
+
-
edit
 

Xan

координатор

Non-conformist> Записал лог со старого монитора.

Расшифровка лога в файле Comport_2013-04-26_19-01-00.txt
Посмотри для интереса. :)

Непечатные байты в лог пишутся как две hex-цифры в угловых скобках:
0x04 =
 10.010.0
Это сообщение редактировалось 26.04.2013 в 20:23

GOGI

координатор
★★★★
Ксан, я уж пока не буду лезти. Добавь вывод регистра MCUCSR.
Узнаем, есть ли перезагрузка и от чего
• Bit 4 – JTRF: JTAG Reset Flag
This bit is set if a reset is being caused by a logic one in the JTAG Reset Register selected by
the JTAG instruction AVR_RESET. This bit is reset by a Power-on Reset, or by writing a logic
zero to the flag.
• Bit 3 – WDRF: Watchdog Reset Flag
This bit is set if a Watchdog Reset occurs. The bit is reset by a Power-on Reset, or by writing a
logic zero to the flag.
• Bit 2 – BORF: Brown-out Reset Flag
This bit is set if a Brown-out Reset occurs. The bit is reset by a Power-on Reset, or by writing a
logic zero to the flag.
• Bit 1 – EXTRF: External Reset Flag
This bit is set if an External Reset occurs. The bit is reset by a Power-on Reset, or by writing a
logic zero to the flag.
• Bit 0 – PORF: Power-on Reset Flag
This bit is set if a Power-on Reset occurs. The bit is reset only by writing a logic zero to the flag.
1  20.020.0
UA Non-conformist #26.04.2013 20:27  @Xan#26.04.2013 20:09
+
-
edit
 

Non-conformist

аксакал

В main.c вижу инструкцию
__watchdog_reset();

Жму в компиляторе полный ребилт, подключаю программатор, стираю кристалл, шью 1.hex из папки Release. Подключаю мост - та же фигня, слова "Старт" нет, и почти одни нули.

Подключаю программатор, стираю кристалл. Подключаю мост, открываю монитор - ничего нет. Т.е. программатор таки работает.
Skype: a_schabanow  
1 32 33 34 35 36 37 38

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru