Jump to content

Таймер ATtiny13A каждый такт на частоте 9.6 МГц


dubrovkin
 Share

Recommended Posts

Недавно столкнулся с таким, файл проекта для GD32 с кодировкой UTF8, часть кода с этого файла, только латиница,  перенес в другой файл, но кодировка windows 1251, Кеил не ругается, компилятор GNU99 компилит без ошибок и варнингов, зашиваю в контроллер не работает. При отладке не попадаю на перенесеный код. Стираю перенесеный код и набираю его с клавиатуры, после этого все нормально работает.

У тебя есть кириллица, может и с кодировкой связано.

Link to comment
Share on other sites

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Вывел от ассемблера через команду:

-a=Log.txt

Вот что там:

GAS LISTING 00.asm 			page 1


   1               	
   2               	.equ PINB,0x16
   3               	.equ DDRB,0x17
   4               	.equ PORTB,0x18
   5               	
   6               	.data
   7               	
   8               	.section .text
   9               	.org 0x0000
  10               	
  11               	vectors:
  12 0000 00C0      		rjmp main
  13 0002 00C0      		rjmp vectors
  14 0004 00C0      		rjmp vectors
  15 0006 00C0      		rjmp vectors
  16 0008 00C0      		rjmp vectors
  17 000a 00C0      		rjmp vectors
  18 000c 00C0      		rjmp vectors
  19 000e 00C0      		rjmp vectors
  20 0010 00C0      		rjmp vectors
  21 0012 00C0      		rjmp vectors
  22               	
  23               	main:
  24 0014 F894      		cli
  25               		
  26 0016 07B3      		in R16,DDRB
  27 0018 16B3      		in R17,PINB
  28               		
  29 001a 0260      		sbr R16,0x02
  30 001c 1D7F      		cbr R17,0x02
  31               		
  32 001e 07BB      		out DDRB,R16
  33 0020 16BB      		out PINB,R17
  34               		
  35 0022 22E0      		ldi R18,0x02
  36               	
  37               	mainLoop:
  38 0024 1227      		eor R17,R18																	; 1 cycle
  39 0026 16BB      		out PINB,R17																; 1 cycle
  40               		
  41 0028 00C0      		rjmp mainLoop																; 2 cycles
GAS LISTING 00.asm 			page 2


DEFINED SYMBOLS
              00.asm:2      *ABS*:0000000000000016 PINB
              00.asm:3      *ABS*:0000000000000017 DDRB
              00.asm:4      *ABS*:0000000000000018 PORTB
              00.asm:11     .text:0000000000000000 vectors
              00.asm:23     .text:0000000000000014 main
              00.asm:37     .text:0000000000000024 mainLoop

NO UNDEFINED SYMBOLS

Как видно, прыгает он уже не так как нужно.

Link to comment
Share on other sites

Реле, разъемы, вентиляторы, корпуса, микросхемы, конденсаторы и много другое!

Скидки до 20% на сайте электронного дискаунтера ТМ Электроникс.

Бесплатная доставка в любую точку России + кэшбэк 15%.

Подробнее

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Материалы вебинара «Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока»

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Скачайте VMLAB 3.15. Хоть она и не поддерживает AtTiny13 в полном режиме IDE, но avrasm32 в ней есть (для командной строки) и он никогда не подводил. Работа с наиболее популярными МК типа Atmega - одно удовольствие.

Link to comment
Share on other sites

Комплексные решения с литиевыми батареями EVE для интеллектуальных систем безопасности

Литиевые химические источники тока EVE по своим характеристикам являются идеальным выбором для современных интеллектуальных систем безопасности. EVE разрабатывает литиевые батареи, опираясь на многолетние исследования таких областей применения, как беспроводная связь стандартов Bluetooth, LoRa, Wi-Fi, NB-IoT и ZigBee. Рассмотрим решения для систем безопасности с использованием батарей EVE. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

3 минуты назад, donec сказал:

У тебя есть кириллица, может и с кодировкой связано.

А где она там у меня?

 

2 минуты назад, donec сказал:

$ avr-objdump -D ex1.elf > ex1.lst

Выдаёт:


00.o:     file format elf32-avr


Disassembly of section .text:

00000000 <vectors>:
   0:	00 c0       	rjmp	.+0      	; 0x2 <vectors+0x2>
   2:	00 c0       	rjmp	.+0      	; 0x4 <vectors+0x4>
   4:	00 c0       	rjmp	.+0      	; 0x6 <vectors+0x6>
   6:	00 c0       	rjmp	.+0      	; 0x8 <vectors+0x8>
   8:	00 c0       	rjmp	.+0      	; 0xa <vectors+0xa>
   a:	00 c0       	rjmp	.+0      	; 0xc <vectors+0xc>
   c:	00 c0       	rjmp	.+0      	; 0xe <vectors+0xe>
   e:	00 c0       	rjmp	.+0      	; 0x10 <vectors+0x10>
  10:	00 c0       	rjmp	.+0      	; 0x12 <vectors+0x12>
  12:	00 c0       	rjmp	.+0      	; 0x14 <main>

00000014 <main>:
  14:	f8 94       	cli
  16:	07 b3       	in	r16, 0x17	; 23
  18:	16 b3       	in	r17, 0x16	; 22
  1a:	02 60       	ori	r16, 0x02	; 2
  1c:	1d 7f       	andi	r17, 0xFD	; 253
  1e:	07 bb       	out	0x17, r16	; 23
  20:	16 bb       	out	0x16, r17	; 22
  22:	22 e0       	ldi	r18, 0x02	; 2

00000024 <mainLoop>:
  24:	12 27       	eor	r17, r18
  26:	16 bb       	out	0x16, r17	; 22
  28:	00 c0       	rjmp	.+0      	; 0x2a <mainLoop+0x6>

 

Link to comment
Share on other sites

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

4 минуты назад, dubrovkin сказал:

Как видно, прыгает он уже не так как нужно.

Видно, что он у ВАс не понимает метки - все rjmp одинаковые (0x00С0) и даже в mainloop.

Link to comment
Share on other sites

Только что, donec сказал:

Кодировка файла какая?

ANSI/UTF-8. Разницы никакой, так как там нет ни одного символа за пределами 128 диапазона и нет BOM.

Link to comment
Share on other sites

Если ещё хочешь с ним возиться, то напиши на СИ сохрани с ключом  S в листинг asm, попробуй скомпилировать файл .S , тогда может и будет что то понятно.

А так или как Геннадий написал или АтмелСтудию ставь, не помню в MPLAB X есть поддержка или нет, это только завтра смогу посмотреть

 

Link to comment
Share on other sites

8 минут назад, Геннадий сказал:

все rjmp одинаковые (0x00С0)

Именно так, какая-то проблема с метками.

@dubrovkin , попробуйте вручную посчитать и написать без меток: rjmp PC + xx, rjmp PC - xx

Link to comment
Share on other sites

3 минуты назад, donec сказал:

Если ещё хочешь с ним возиться, то напиши на СИ сохрани с ключом  S в листинг asm, попробуй скомпилировать файл .S , тогда может и будет что то понятно.

А так или как Геннадий написал или АтмелСтудию ставь, не помню в MPLAB X есть поддержка или нет, это только завтра смогу посмотреть

 

Что же так сложно-то. Конкретно в данном случае же не нужен мне C. Есть же отдельная утилитка avr-as. И есть ассемблерный файл. Неужели просто нельзя?!

2 минуты назад, ДядяВован сказал:

Именно так, какая-то проблема с метками.

@dubrovkin , попробуйте вручную посчитать и написать без меток: rjmp PC + xx, rjmp PC - xx

Я даже подбирать не стал. Просто на бум так указал значения и он всё равно генерирует для них один и тот же опкод.

Link to comment
Share on other sites

В общем удалось добиться чтобы он выдавал это:

00000000 <.sec1>:
   0:   09 c0           rjmp    .+18            ;  0x14
   2:   18 95           reti
   4:   18 95           reti
   6:   18 95           reti
   8:   18 95           reti
   a:   18 95           reti
   c:   18 95           reti
   e:   18 95           reti
  10:   18 95           reti
  12:   18 95           reti
  14:   f8 94           cli
  16:   07 b3           in      r16, 0x17       ; 23
  18:   16 b3           in      r17, 0x16       ; 22
  1a:   02 60           ori     r16, 0x02       ; 2
  1c:   1d 7f           andi    r17, 0xFD       ; 253
  1e:   07 bb           out     0x17, r16       ; 23
  20:   16 bb           out     0x16, r17       ; 22
  22:   22 e0           ldi     r18, 0x02       ; 2
  24:   12 27           eor     r17, r18
  26:   16 bb           out     0x16, r17       ; 22
  28:   fd cf           rjmp    .-6             ;  0x24

Завтра буду уже тестировать. Всем спасибо за помощь)

Link to comment
Share on other sites

10 минут назад, dubrovkin сказал:

удалось добиться чтобы он выдавал это

А почему значение адреса удвоенное? :unknw:

В AVR должно быть так:

    28: .ORG 0x0000
    29: 000000   C0CA  rjmp    Reset   ; 0x0000 RESET
    30: 000001   9518  RETI            ; 0x0001 INT0
    31: 000002   9518  RETI            ; 0x0002 PCINT0
    32: 000003   9518  RETI            ; 0x0003 TIMER1 COMPA
    33: 000004   C036  rjmp    pT1_INT ; 0x0004 TIMER1 OVF
    34: 000005   9518  RETI            ; 0x0005 TIMER0 OVF
    35: 000006   9518  RETI            ; 0x0006 EE READY
    36: 000007   9518  RETI            ; 0x0007 ANALOG COMP
    37: 000008   C088  rjmp    pADC_INT; 0x0008 ADC
    38: 000009   9518  RETI            ; 0x0009 TIMER1 COMPB
    39: 00000A   C004  rjmp    pT0_INT ; 0x000A TIMER0 COMPA
    40: 00000B   9518  RETI            ; 0x000B TIMER0 COMPB

Если мне нужен простейший цикл, то я пишу rjmp PC - 1 и получаю переход на адрес 124 (125 - 1)

    86: 000124   FF05  sbrs    rFlags, cNeedCalc_b ;
    87: 000125   CFFE  rjmp    PC - 1              ;

По Вашему листингу мне бы пришлось написать PC - 2 ? Ерунда какая-то...

Link to comment
Share on other sites

2 часа назад, dubrovkin сказал:

Вот только я не понял как этот ассемблер скачать

Не понял какой ассемблер, вот скачал установил студию для AVR

https://www.microchip.com/en-us/tools-resources/develop/microchip-studio#Downloads

Компиляторы установились с ним, не отдельно как обычно

Link to comment
Share on other sites

6 часов назад, ДядяВован сказал:

Если мне нужен простейший цикл, то я пишу rjmp PC - 1 и получаю переход на адрес 124 (125 - 1)

    86: 000124   FF05  sbrs    rFlags, cNeedCalc_b ;
    87: 000125   CFFE  rjmp    PC - 1              ;

По Вашему листингу мне бы пришлось написать PC - 2 ? Ерунда какая-то...

Это у Вас ерунда какая-то.  rjmp k  это команда перехода относительно счетчика команд (в нем РС+1) на константу k , по правилу PC <- (PC+1) + k.
Если Вы присвоите k = PC - 1 = 125-1 , то счетчик команд перейдет на   250-й адрес...

То, что Вы пишите, справедливо для команды jmp k, где  k - абсолютный адрес счетчика команд. Тогда если РС=125, то  jmp PC - 1 даст адрес 124.

Link to comment
Share on other sites

56 минут назад, IMXO сказал:

Это у Вас ерунда какая-то

Ну-ну, продолжайте...
От кого уж, а от Вас я такого не ожидал.

57 минут назад, IMXO сказал:

То, что Вы пишите, справедливо для команды jmp k

Вы утверждаете, что для rjmp я не могу в ассемблере указать метку??? А должен использовать выражения типа "PC - метка" и "PC + метка" ??? Причем плюс или минус наверное я тоже должен сам определить?
Открою Вам секрет, всем этим занимается компилятор. Что jmp, что rjmp - везде пишется метка. А метка есть АДРЕС !
В листинге есть код для этого rjmp CFFE, можете его дизассемблировать и посмотреть какой там адрес перехода.

PS Эти фрагменты листинга от работающей программы.

Link to comment
Share on other sites

Posted (edited)

Мои вчерашние потуги , недопиленные .

PIC.png.141ce659ec51d46367307eb4c64b94c6.png

 

Несколько соображений.

Команда sbi занимает два такта . Одним тактом можно грузить выход через out из кеша (R0-R31)

Много времени занимают строчки сдвига и счета  16,23,30 . Тоже требуется изменения (алгоритма)

По сути 1 и 0 передаются через ШИМ . Можно попробовать микросхему с PLL .

Но времени пока нет .

п.с. Ранее вопрос был про симулятор . Это 8-й proteus взятый "во временное пользование" . В нем же есть отладка .

Edited by dodik
Link to comment
Share on other sites

34 минуты назад, ДядяВован сказал:

Что jmp, что rjmp - везде пишется метка. А метка есть АДРЕС !

те Вы хотите сказать что проставив в  rjmp .124  Вы перейдете на абсолютный адрес 124 ?
Тогда почему отличие в описании команд rjmp и jmp ???

wert.jpg

Link to comment
Share on other sites

6 минут назад, IMXO сказал:

перейдете на абсолютный адрес 124 ?

Да. Я могу менять в исходном тексте jmp на rjmp и наоборот без изменения меток (метка=адрес). Разумеется, для rjmp указанный адрес должен быть в необходимой близости, иначе компилятор выдаст ошибку.

10 минут назад, IMXO сказал:

Тогда почему отличие в описании

Потому что команды выполняется за разное количество тактов и занимают различное количество памяти программ. Ну и если кодировать вручную (без компилятора), то необходимо взять на себя задачу расчёта относительных переходов.

Link to comment
Share on other sites

Posted (edited)

Попробуйте этот код:

main:
		rcall		send_pack	;отправка всего пакета данных
rjmp main
;===========================================================
;пакет состоит из 3-х байт (RGB) на один светодиод
send_pack:
		ldi		r23,0x55
		rcall		send_wire
		ldi		r23,0xAA
		rcall		send_wire
		ldi		r23,0xF0
		rcall		send_wire
		ret
;===========================================================
;отправка одного байта
send_wire:
		ldi		r16,8	;счетчик отправленных бит
cyc_send_wire:
		sbi		PORTB,0
		lsr		r23
		brcc		send_zero
send_one:
		nop
		nop
		nop
		nop
		nop
		cbi		PORTB,0
		dec		r16
		brne		cyc_send_wire	
		rjmp		exit_send_wire	
send_zero:
		cbi		PORTB,0
		nop
		nop
		nop				
control_full:
		dec		r16
		breq		exit_send_wire
		rjmp		cyc_send_wire
exit_send_wire:
		ret

Инициализацию периферии и сигнал TReset - на Ваше усмотрение. Основная попытка была привести сигнал к максимально приближенному виду по datasheet.

Edited by Геннадий
Link to comment
Share on other sites

Не ругайтесь ребята. Может быть ваше ПО показывает по-другому. А тут, на сколько я понял, показывается всё кратное двум, так как команды занимают 2 байта. Вот и получается, чтобы прыгнуть на самого себя, нужно отойти назад на 2.

Link to comment
Share on other sites

Да мы и не думали ругаться)) Просто хотим прояснить истину.

3 минуты назад, dubrovkin сказал:

нужно отойти назад на 2.

Пытаюсь себя заставить этому поверить и не могу. Полное противоречие с организацией памяти программ в AVR. Счётчик команд (PC) считает словами, а не байтами.

Link to comment
Share on other sites

Счётчик команд - это одно дело. А вот GCC - это другое. Вот фрагмент кода:

vectors:
	rjmp main
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors
	rjmp vectors

main:

А вот результат:

   0:   09 c0           rjmp    .+18            ;  0x14
   2:   fe cf           rjmp    .-4             ;  0x0
   4:   fd cf           rjmp    .-6             ;  0x0
   6:   fc cf           rjmp    .-8             ;  0x0
   8:   fb cf           rjmp    .-10            ;  0x0
   a:   fa cf           rjmp    .-12            ;  0x0
   c:   f9 cf           rjmp    .-14            ;  0x0
   e:   f8 cf           rjmp    .-16            ;  0x0
  10:   f7 cf           rjmp    .-18            ;  0x0
  12:   f6 cf           rjmp    .-20            ;  0x0
  14:   f8 94           cli

Как видно всё совпадает. Такая вещь, как .-4 указывает, что, если там было бы .-2, он бы прыгнул на самого себя, а он прыгает на .-4, то есть на инструкцию выше. А там как раз раз метка vectors.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...