Обсуждаем контроллеры компании Atmel.
Ответить

Atmega 128 неполучается заставить работать выход OC2

Пт авг 03, 2012 18:09:35

Здравствуйте.
Хотел сделать чтобы один таймер тактировал другой, но что-то не получается.
В чем может быть проблема?

Изображение
842x542(179.73 kB)

Загрузить фото


Код:
.include "m128def.inc"

;
.def  temp  =r16
.def index_1 = R8
.def index_2 = R9
.def index_3 = R10
.def index   = r7
   
   RJMP VECT_END
.org OVF3addr
   rjmp   over_a   


over_a:
   ldi ZL,low(MAS1<<1)
   ldi ZH,high(MAS1<<1)
   ADD ZL,index_1
   adc ZH,Index
   lpm
   sts OCR3AL,R0
   inc index_1
   cp  index_1,r14
   brne over_b
   clr index_1
over_b:
   ldi ZL,low(MAS1<<1)
   ldi ZH,high(MAS1<<1)
   ADD ZL,index_2
   adc ZH,index
   lpm
   sts OCR3BL,R0
   inc index_2
   cp  index_2,r14
   brne over_c
   clr index_2
over_c:
   ldi ZL,low(MAS1<<1)
   ldi ZH,high(MAS1<<1)
   ADD ZL,index_3
   adc ZH,Index
   lpm
   sts OCR3CL,R0
   inc index_3
   cp index_3,r14
   brne quit_over
   clr index_3
quit_over:
   reti


VECT_END:
   LDI r19,HIGH(RamEnd)
   OUT   SPH,r19
   LDI r19,LOW(RamEnd)
   OUT   SPL,r19
   
   LDI R16,0b11111111
   OUT DDRE,R16


     clr index
   CLR index_1
   ldi r16,33
   mov index_2,r16
    ldi r16,66
    mov index_3,r16
   LDI R16,100
   MOV R14,R16
   CLR  R11

   LDI R18, 0b00000000
   STS TIMSK,R18
   ldi r25, (1<<TOIE3)
   STS ETIMSK,R25
   LDI R16,(1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1) | (1<<WGM30)
   STS TCCR3A,R16

   LDI R17,(1<<CS31) | (1<<CS32) | (1<<WGM32)
   STS TCCR3B,R17

   LDI R16,0b11111111
   OUT DDRB,R16

   LDI R16,3
   out OCR2,R16

   LDI R17,(1<<COM20) | (1<<WGM21) | (1<<CS20)
   out TCCR2,R17

   SEI




LOOP:
   RJMP LOOP

MAS1:
.db 135,143,151,159,167,174,182,189,196,... (масив из 100 эл.)
Вложения
PWM CHASTOTA.zip
(37 KiB) Скачиваний: 162
Последний раз редактировалось gibiri Сб авг 04, 2012 04:44:07, всего редактировалось 1 раз.

Re: Atmega 128 неполучается заставить работать выход OC2

Сб авг 04, 2012 04:42:36

Я правильно настроил таймер для тактирования от внешнего источника?

Код:
   LDI R16,(1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1) | (1<<WGM30)
   STS TCCR3A,R16

   LDI R17,(1<<CS31) | (1<<CS32) | (1<<WGM32)
   STS TCCR3B,R17


Тактирование T3 осуществляется через PD6/T1 ?

Re: Atmega 128 неполучается заставить работать выход OC2

Сб авг 04, 2012 05:39:14

надо ножку выходом назначить. А лучше код мастером сделать - тогда будет работать точно.

Re: Atmega 128 неполучается заставить работать выход OC2

Сб авг 04, 2012 09:03:21

radio-kot писал(а):надо ножку выходом назначить. А лучше код мастером сделать - тогда будет работать точно.


PB7/OC2 ?
Я назначил:

Код:
   LDI R16,0b11111111
   OUT DDRB,R16

Re: Atmega 128 неполучается заставить работать выход OC2

Сб авг 04, 2012 17:01:18

код мастером сделать - тогда будет работать точно.

Re: Atmega 128 неполучается заставить работать выход OC2

Сб авг 04, 2012 23:41:58

radio-kot писал(а):код мастером сделать - тогда будет работать точно.

Это на CodeVisionAVR?
Я пока только ассемблер знаю.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 01:23:01

А от какой ноги осуществляется тактирование Т3?

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 06:46:21

gibiri писал(а):А от какой ноги осуществляется тактирование Т3?

Что-то мне подсказывает, что это нога PE6/T3/INT6

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 07:07:40

Хмм
Последний раз редактировалось astrgan Вс авг 05, 2012 12:52:59, всего редактировалось 1 раз.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 07:14:15

Во-первых выход ОС2 работает, во-вторых куда такие конденсаторы здоровые, аж на 10мкф? И провод перекинуть надо на РЕ6, смотри картинку:

Изображение

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 10:11:13

отлично
Последний раз редактировалось astrgan Вс авг 05, 2012 12:53:57, всего редактировалось 1 раз.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 10:34:11

Просто кондеры такой емкости гасят импульсы, на 22pF вполне достаточно, можно чуть побольше.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 10:37:02

gibiri писал(а):Это на CodeVisionAVR?
Я пока только ассемблер знаю.
Самое время на Си начать. Это легко и быстро +работает.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 13:50:36

Proteus-у можно доверять?
Если я буду смотреть как меняется частота в Proteus, то в реальном устройстве будет также или не очень?

P.S.
Настоящий осциллограф щас не достану.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 13:53:03

Скорей да чем нет. Можете перепровериь еще в авр студии и в vmlab

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 16:54:54

В протеусе на осциллографе кликаешь кнопку cursor, то можно измерить время одного периода, если отметить начало и конец периода, так и посчитаь частоту.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 17:25:21

zero648 писал(а):В протеусе на осциллографе кликаешь кнопку cursor, то можно измерить время одного периода, если отметить начало и конец периода, так и посчитаь частоту.

Спасибо.

Re: Atmega 128 неполучается заставить работать выход OC2

Вс авг 05, 2012 22:09:56

Кстати сказать, при моделировании в протеусе, на трех ШИМах наблюдаются провалы при максимальной ширине импульса, в константах МАS1 поменял значение 255 на 254 и стало гуд.

Re: Atmega 128 неполучается заставить работать выход OC2

Пн авг 06, 2012 03:25:21

zero648 писал(а):Кстати сказать, при моделировании в протеусе, на трех ШИМах наблюдаются провалы при максимальной ширине импульса, в константах МАS1 поменял значение 255 на 254 и стало гуд.

Иии еще раз большое СПАСИБО!
Ответить