реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> МК не отвечает :(
TwisteR
сообщение Jul 25 2008, 17:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 25-07-08
Из: Киев
Пользователь №: 39 212



Приветствую специалистов!
Я недавно начал осваивать микроконтроллеры, решил остановиться на линейке AVR. Собрал STK200/300 по этой схеме, купил МК ATmega8535, подключил всё это дело к компу. Какое то время МК нормально определялся (правда, при чтении одних и тех же участков памяти я получал разные данные, но это другая история, подробности тут).

Но недавно МК вообще перестал определсятья sad.gif Произошло это во время получения очередной порции "рандомных данных" - в один прекрасный момент вместо беспорядочного набора байт я стал получатьодни 0xFF, а при следующем запуске avrdude и вовсе не обнаружил МК:
Код
tfsoft-3 avr # avrdude -p m8535 -c stk200 -t -F

avrdude: AVR device not responding
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0xffffff
avrdude: Yikes!  Invalid device signature.
avrdude: Expected signature for ATMEGA8535 is 1E 93 08
avrdude> quit
>>> quit

avrdude: safemode: Fuses OK

avrdude done.  Thank you.


Пробовал и avreal:
Код
tfsoft-3 avr # ./avreal-126r0 -p/dev/parport0 -as +ATMEGA8535 -% -e -!

avreal/LINUX  -  AVR controllers LPT programmer by Redchuk Alexandr
v1.26rev0 (Jul 10 2008 17:50:25)  http://www.ln.ua/~real/avreal
bug-reports, suggestions and so on mail to avreal@real.kiev.ua
Command: -p/dev/parport0 -as +ATMEGA8535 -% -o1MHZ -e -!
        % Parallel port `/dev/parport0' found, ioctl interface activated
        % assume that LPT data writes not faster then 1uS
        % Atmel adapter for STK*00 found
        % STK mode
        % osc = 1000kHz -> setup=2, hold=2,1
        % Reset
        % PgmOn reply  FF FF FF FF
        % Try 1 to resync by reset pulse        % PgmOn reply  FF FF FF FF
        % Try 2 to resync by reset pulse        % PgmOn reply  FF FF FF FF
        % Try 3 to resync by reset pulse        % PgmOn reply  FF FF FF FF
        % Try 4 to resync by reset pulse        % PgmOn reply  FF FF FF FF
Can't resync

Reset pin released
Adapter disabled


По совету с другого форума укоротил шлейф до 10 см и повесил резистор 10К между RESET и VCC, ничего не изменилось. Щупал осциллографом - во время выполнения команды "dump flash 0 20000" на RESET, как и положено - 0, на SCK видны прямоугольные импульсы, на MOSI видна передача данных, а на MISO - глухо.

Прикрепляю фото программатора и тестовой платы с МК.

Кто подскажет, куда копать и как диагностировать неисправность МК? Буду благодарен за любую помощь smile.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jul 25 2008, 17:47
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(TwisteR @ Jul 25 2008, 21:22) *
По совету с другого форума укоротил шлейф до 10 см и повесил резистор 10К между RESET и VCC, ничего не изменилось. Щупал осциллографом - во время выполнения команды "dump flash 0 20000" на RESET, как и положено - 0, на SCK видны прямоугольные импульсы, на MOSI видна передача данных, а на MISO - глухо.

Прикрепляю фото программатора и тестовой платы с МК.

Кто подскажет, куда копать и как диагностировать неисправность МК? Буду благодарен за любую помощь smile.gif

Начните с подачи внешнего тактового сигнала на XTAL1. Avreal умеет это делать сам, но лучше прямо на тестовой плате иметь свой. Хотя бы резонатор керамический со встроенными конденсаторами.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 25 2008, 18:19
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Дорожки облудить.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Ильдус
сообщение Jul 25 2008, 18:28
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 5-07-05
Пользователь №: 6 552



Прочитайте "Отчет от замене AT90S2313 на ATtiny2313" на http://caxapa.ru/?id=36834 - может быть у вас нечто подобное.
Go to the top of the page
 
+Quote Post
TwisteR
сообщение Jul 25 2008, 19:57
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 25-07-08
Из: Киев
Пользователь №: 39 212



Цитата(Qwertty @ Jul 25 2008, 19:47) *
Начните с подачи внешнего тактового сигнала на XTAL1. Avreal умеет это делать сам, но лучше прямо на тестовой плате иметь свой. Хотя бы резонатор керамический со встроенными конденсаторами.

Спасибо большое, всё заработало. Я думал, что если к XTAL1 и 2 ничего не подключено - будет использоваться встроенный осциллятор.

Теперь другой вопрос - нужен ли внешний генератор или кварцевый резонатор, если при программировании я указал частоту встроенного:
CODE
tfsoft-3 avr # ./avreal-126r0 -p/dev/parport0 -as +ATMEGA8535 -% -o0 -fcksel=4 -w

avreal/LINUX - AVR controllers LPT programmer by Redchuk Alexandr
v1.26rev0 (Jul 10 2008 17:50:25) http://www.ln.ua/~real/avreal
bug-reports, suggestions and so on mail to avreal@real.kiev.ua
Command: -p/dev/parport0 -as +ATMEGA8535 -o0 -fcksel=4 -w
Device connected, MEGA8535 detected
Chip not locked
Fuses
OSCCALs = B1 B2 A8 AB
BODLEVEL = 0
BODEN = 0
SUT = 0
CKSEL = 0
BLB1 = 3
BLB0 = 3
S8535C = 1
WDTON = 0
CKOPT = 0
EESAVE = 0
BOOTSZ = 1
BOOTRST = 0
Programming fuses
New fuses value
OSCCALs = B1 B2 A8 AB
BODLEVEL = 0
BODEN = 0
SUT = 0
CKSEL = 4
BLB1 = 3
BLB0 = 3
S8535C = 1
WDTON = 0
CKOPT = 0
EESAVE = 0
BOOTSZ = 1
BOOTRST = 0
Reset pin released
Adapter disabled


Второй вопрос - почему я в avrdude в терминальном режиме не могу писать в flash
CODE
avrdude> write flash 0 1 2 3 4 5 6 5 4 3 2 1 0
>>> write flash 0 1 2 3 4
avrdude (write): error writing 0x01 at 0x00000 cell=0xff
avrdude (write): error writing 0x02 at 0x00001 cell=0xff
avrdude (write): error writing 0x03 at 0x00002 cell=0xff
avrdude (write): error writing 0x04 at 0x00003 cell=0xff
avrdude (write): error writing 0x05 at 0x00004 cell=0xff

avrdude> dump flash 0 16
>>> dump flash 0 200
0000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|

А в eeprom - могу. Это при том, что и avrdude, и ponyprog и avreal нормально пишут указанные файлы .hex. Впрочем, это не существенно, т.к. МК программируется нормально. Просто интересно smile.gif

И третий вопрос. Я прошил МК простой программкой, вот её код:
CODE
#include <avr/io.h>
#include <util/delay.h>
#define F_CPU 8000000UL

int main(void)
{
DDRD = 0xff;
while (1)
{
PORTD = 0xff;
_delay_ms(1000);
PORTD = 0x00;
_delay_ms(1000);
}
}

Подключил к ножке 14 (PD0) светодиод, отключил программатор, но светодиод так и не замигал. Зато на осциллографе я увидел то, что в аттаче. Где моя ошибка?
Заранее большое спасибо за ответы.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Flasher
сообщение Jul 25 2008, 21:33
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



посмотри в ассемблерный листинг, каких комманд он там насовал.
Go to the top of the page
 
+Quote Post
TwisteR
сообщение Jul 25 2008, 22:03
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 25-07-08
Из: Киев
Пользователь №: 39 212



Цитата(Flasher @ Jul 25 2008, 23:33) *
посмотри в ассемблерный листинг, каких комманд он там насовал.

Если бы я только что то понимал... biggrin.gif
CODE

main.elf: file format elf32-avr

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000007c 00000000 00000000 00000054 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .stab 0000036c 00000000 00000000 000000d0 2**2
CONTENTS, READONLY, DEBUGGING
2 .stabstr 00000054 00000000 00000000 0000043c 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_aranges 00000020 00000000 00000000 00000490 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_pubnames 0000001b 00000000 00000000 000004b0 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_info 0000015d 00000000 00000000 000004cb 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_abbrev 000000c7 00000000 00000000 00000628 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_line 000000e5 00000000 00000000 000006ef 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_frame 00000020 00000000 00000000 000007d4 2**2
CONTENTS, READONLY, DEBUGGING
9 .debug_str 000000ca 00000000 00000000 000007f4 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_loc 00000018 00000000 00000000 000008be 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
0: 14 c0 rjmp .+40 ; 0x2a <__ctors_end>
2: 2d c0 rjmp .+90 ; 0x5e <__bad_interrupt>
4: 2c c0 rjmp .+88 ; 0x5e <__bad_interrupt>
6: 2b c0 rjmp .+86 ; 0x5e <__bad_interrupt>
8: 2a c0 rjmp .+84 ; 0x5e <__bad_interrupt>
a: 29 c0 rjmp .+82 ; 0x5e <__bad_interrupt>
c: 28 c0 rjmp .+80 ; 0x5e <__bad_interrupt>
e: 27 c0 rjmp .+78 ; 0x5e <__bad_interrupt>
10: 26 c0 rjmp .+76 ; 0x5e <__bad_interrupt>
12: 25 c0 rjmp .+74 ; 0x5e <__bad_interrupt>
14: 24 c0 rjmp .+72 ; 0x5e <__bad_interrupt>
16: 23 c0 rjmp .+70 ; 0x5e <__bad_interrupt>
18: 22 c0 rjmp .+68 ; 0x5e <__bad_interrupt>
1a: 21 c0 rjmp .+66 ; 0x5e <__bad_interrupt>
1c: 20 c0 rjmp .+64 ; 0x5e <__bad_interrupt>
1e: 1f c0 rjmp .+62 ; 0x5e <__bad_interrupt>
20: 1e c0 rjmp .+60 ; 0x5e <__bad_interrupt>
22: 1d c0 rjmp .+58 ; 0x5e <__bad_interrupt>
24: 1c c0 rjmp .+56 ; 0x5e <__bad_interrupt>
26: 1b c0 rjmp .+54 ; 0x5e <__bad_interrupt>
28: 1a c0 rjmp .+52 ; 0x5e <__bad_interrupt>

0000002a <__ctors_end>:
2a: 11 24 eor r1, r1
2c: 1f be out 0x3f, r1 ; 63
2e: cf e5 ldi r28, 0x5F ; 95
30: d2 e0 ldi r29, 0x02 ; 2
32: de bf out 0x3e, r29 ; 62
34: cd bf out 0x3d, r28 ; 61

00000036 <__do_copy_data>:
36: 10 e0 ldi r17, 0x00 ; 0
38: a0 e6 ldi r26, 0x60 ; 96
3a: b0 e0 ldi r27, 0x00 ; 0
3c: ec e7 ldi r30, 0x7C ; 124
3e: f0 e0 ldi r31, 0x00 ; 0
40: 02 c0 rjmp .+4 ; 0x46 <.do_copy_data_start>

00000042 <.do_copy_data_loop>:
42: 05 90 lpm r0, Z+
44: 0d 92 st X+, r0

00000046 <.do_copy_data_start>:
46: a0 36 cpi r26, 0x60 ; 96
48: b1 07 cpc r27, r17
4a: d9 f7 brne .-10 ; 0x42 <.do_copy_data_loop>

0000004c <__do_clear_bss>:
4c: 10 e0 ldi r17, 0x00 ; 0
4e: a0 e6 ldi r26, 0x60 ; 96
50: b0 e0 ldi r27, 0x00 ; 0
52: 01 c0 rjmp .+2 ; 0x56 <.do_clear_bss_start>

00000054 <.do_clear_bss_loop>:
54: 1d 92 st X+, r1

00000056 <.do_clear_bss_start>:
56: a0 36 cpi r26, 0x60 ; 96
58: b1 07 cpc r27, r17
5a: e1 f7 brne .-8 ; 0x54 <.do_clear_bss_loop>
5c: 01 c0 rjmp .+2 ; 0x60 <main>

0000005e <__bad_interrupt>:
5e: d0 cf rjmp .-96 ; 0x0 <__heap_end>

00000060 <main>:
#include <util/delay.h>
#define F_CPU 8000000UL // 8 MHz


int main(void) // начало основой программы
{
60: 8f ef ldi r24, 0xFF ; 255
62: 81 bb out 0x11, r24 ; 17
64: 2f ef ldi r18, 0xFF ; 255
66: e0 e0 ldi r30, 0x00 ; 0
68: f0 e0 ldi r31, 0x00 ; 0

DDRD = 0xff; /* все выводы порта D сконфигурировать как выходы */

while (1) { // Бесконечный цикл

PORTD = 0xff; /* установить "1" на всех линиях порта D */
6a: 22 bb out 0x12, r18 ; 18
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
6c: cf 01 movw r24, r30
6e: 01 97 sbiw r24, 0x01 ; 1
70: f1 f7 brne .-4 ; 0x6e <main+0xe>

_delay_ms(1000); // Ждем 1 сек.

PORTD = 0x00; /* установить "0" на всех линиях порта D */
72: 12 ba out 0x12, r1 ; 18
74: cf 01 movw r24, r30
76: 01 97 sbiw r24, 0x01 ; 1
78: f1 f7 brne .-4 ; 0x76 <main+0x16>
7a: f7 cf rjmp .-18 ; 0x6a <main+0xa>


Пробовал так же этот код:
CODE
.include "m8535def.inc"
.def TMP = R16
.def VERT = R17
.def COUNT1 = R18
.def COUNT2 = R19
.def COUNT3 = R20

.org 0
reset:
ldi TMP, 0xFF
out DDRD, TMP

enable:
ldi TMP, 0xFF
out PORTD, TMP

ldi COUNT3, 16
wait1:
dec COUNT1
brne wait1
dec COUNT2
brne wait1
dec COUNT3
brne wait1

disable:
ldi TMP, 0x00
out PORTD, TMP

ldi COUNT3, 16
wait2:
dec COUNT1
brne wait2
dec COUNT2
brne wait2
dec COUNT3
brne wait2

rjmp enable

Результат - светодиод горит постоянно, осциллограмма не изменилась.

Сообщение отредактировал TwisteR - Jul 25 2008, 22:06
Go to the top of the page
 
+Quote Post
Flasher
сообщение Jul 25 2008, 22:47
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



Попробуй сначала в порт писать 0 до самой первой задержки. Если на осциолограмме что-то будет, значит походе на ватчдог...
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jul 26 2008, 10:42
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



У AVR фьюзы как бы "наоборот" - 0 - запрограммирован. Соотетственно WDTON = 0 это включенный ватчдог.
Задержка в 1000мс не получится, почитайте в delay.h о ограничениях.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 23:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01447 секунд с 7
ELECTRONIX ©2004-2016