Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Тема закрыта

Re: Пожалуйста помогите найти ошибку в программе для avr.

Ср июн 06, 2012 16:50:28

А как тут быть?
В регистры r20, r21,r22 записывается только ff.


Код:
.include "m128def.inc"

.DSEG

MAS1: .DB 0x1A,0x2A,0x3A,0x4A
   
MAS2: .DB 0x1B,0x2B,0x3B,0x4B
     
MAS3: .DB 0x1C,0x2C,0x3C,0x4C


VECT_END:

.CSEG
   LDI ZL,LOW(MAS1*2)
   LDI ZH,HIGH(MAS1*2)

   LDI YL,LOW(MAS2*2)
   LDI YH,HIGH(MAS2*2)

   LDI XL,LOW(MAS3*2)
   LDI XH,HIGH(MAS3*2)
;***** инициализация стека

   ldi r19,0x04   
   out   SPH,r19   
   ldi r19,0x5F
   out   SPL,r19
;*****
loop:

   LD r22,Z+
   LD r21,Y+
   LD r20,X+

   rjmp loop

Re: Пожалуйста помогите найти ошибку в программе для avr.

Ср июн 06, 2012 18:08:35

Я так понял, что Вы так и не исправили первую ошибку. Ну а по поводу второй , Вы читаете данные из SRAM , а там могут быть и 0xFF и что угодно , тем более , что Вы даже обращаетесь скорее не к SRAM или FLASH , а чёрт знает куда.

Re: Пожалуйста помогите найти ошибку в программе для avr.

Пн июн 18, 2012 17:20:32

Все первую часть программы дописал. Ошибки постарался исправить и вроде работает.
Еще раз всем кто помогал большое спасибо!

P.S.
Делал 3-фазный ШИМ выдающий синусоиду.
И возник еще вопрос как правильно расчитать фильтр который будет сглаживать получинные импульсы до синусоиды.

Код:
.include "m128def.inc"


;***** ВЕКТАРА ПРЕРЫВАНИЯ ТАЙМЕРА-СЧЕТЧИКА Т3

   RJMP VECT_END
.ORG $0034      ;Вектор прерывания таймера T1 при совпадении (КАНАЛ А)
   RJMP SINOUTA
.ORG $0036       ;Вектор прерывания таймера T1 при совпадении (КАНАЛ B)
   RJMP SINOUTB
.ORG $0038         ;Вектор прерывания таймера T1 при совпадении (КАНАЛ C)
   RJMP SINOUTC   

;***** МАССИВ ДАННЫХ

MAS1:

.DB 152, 176, 198, 217, 233, 245, 252, 255, 252, 245, 233,217, 198, 176
.DB 152, 128, 103, 79, 57, 38, 22, 10, 3, 1, 3, 10, 22, 38, 57, 79, 103, 127

   
MAS2:
.DB 223, 205, 184, 160, 136, 111, 87, 64, 44, 27, 14, 5, 1, 2
.DB 7, 18, 32, 56, 71, 95,119, 144, 168, 191, 211, 211, 241, 256, 254, 253, 248, 237
     
MAS3:
.DB 7, 2, 1, 5, 14, 27, 44, 64, 87, 111, 136, 160, 184, 205
.DB 223, 237, 248, 253, 254, 250, 241, 228, 211, 191, 168, 168, 119, 95, 71, 50, 32, 18



VECT_END:
   CLR R20
   CLR R21
   CLR R22
   LDI R24,32

      
.DEF TIMER=R16
   CLR TIMER

   LDI R28,0b00000111
   OUT DDRA,R28

   LDI R28,0b00000001
   MOV R10,R28
   MOV R14,R28
   LDI R28,0b00000010
   MOV R11,R28
   MOV R15,R28
   LDI R28,0b00000100
   MOV R12,R28
   MOV R9,R28


;***** ИНИЦИАЛИЗАЦИЯ СТЕКА

   LDI r19,0x04   
   OUT   SPH,r19   
   LDI r19,0x5F
   OUT   SPL,r19

   RJMP RAM

START:

   LDI ZL,LOW(MASSIN_1)
   LDI ZH,HIGH(MASSIN_1)

   LDI   YL,low(MASSIN_2)
   LDI YH,High(MASSIN_2)

   LDI XL,LOW(MASSIN_3)
   LDI XH,HIGH(MASSIN_3)

   CLR R0      
   STS OCR3AH, R0      ;в регистр совпадений таймера T1
   LD R1,Z+
   STS OCR3AL, R1      ;в регистр совпадений таймера T1
   INC R20
         
   STS OCR3BH, R0      ;в регистр совпадений таймера T1
   LD R2,Y+
   STS OCR3BL, R2      ;в регистр совпадений таймера T1
   INC R21
         
   STS OCR3CH, R0      ;в регистр совпадений таймера T1
   LD R3,X+   
   STS OCR3CL, R3      ;в регистр совпадений таймера T1
   INC R22
;НАСТРОЙКА ПРЕРЫВАНИЯ

   LDI R18, 0b00000000
   STS TIMSK,R18
   LDI R25,0b00011010
   STS ETIMSK,R25
   SEI

;TCCR НАСТРОИМ НА 8-БИТЫЙ БЫСТРЫЙ ШИМ C ПЕРЕКЛЮЧЕНИЕМ ВЫВОДОВ ОС

   LDI R16,0b01010101     
   STS TCCR3A,R16

   LDI R17,0b00001010
   STS TCCR3B,R17


loop:
   RJMP loop

SINOUTA:
   CLI
   LDI R16,0b00000000
   STS TCCR3A,R16

   LDI R17,0b00000000
   STS TCCR3B,R17
   

   CLR R0      
   STS OCR3AH, R0      ;в регистр совпадений таймера T1
   LD R1,Z+   
   STS OCR3AL, R1      ;в регистр совпадений таймера T1


   COM R10
   AND R10,R14
   OUT PORTA,R10
   
   INC R20
   CP R20,R24
   BREQ TERMS

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI

   RETI
TERMS:
   RJMP TERMS_SINOUTA

SINOUTB:

   CLI
   LDI R16,0b00000000
   STS TCCR3A,R16

   LDI R17,0b00000000
   STS TCCR3B,R17
   

   CLR R0      
   STS OCR3BH, R0      ;в регистр совпадений таймера T1
   LD R2,Y+   
   STS OCR3BL, R2      ;в регистр совпадений таймера T1

   COM R11
   AND R11,R15
   OUT PORTA,R11

   INC R21
   CP R21,R24
   BREQ TERMS2

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI

   RETI
TERMS2:
   RJMP TERMS_SINOUTB



SINOUTC:

   CLI
   LDI R16,0b00000000
   STS TCCR3A,R16

   LDI R17,0b00000000
   STS TCCR3B,R17
   
   CLR R0      
   STS OCR3CH, R0      ;в регистр совпадений таймера T1
   LD R3,X+   
   STS OCR3CL, R3      ;в регистр совпадений таймера T1


   COM R12
   AND R12,R9
   OUT PORTA,R12

   INC R22
   CP R22,R24
   BREQ TERMS3

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI

   RETI
TERMS3:
   RJMP TERMS_SINOUTB





RAM:

.DSEG

MASSIN_1: .BYTE 32
MASSIN_2: .BYTE 32
MASSIN_3: .BYTE 32

.CSEG



   

   LDI YL, low(MASSIN_1)
   LDI YH, High(MASSIN_1)
   LDI ZL, low(MAS1*2)
   LDI ZH, High(MAS1*2)

MAS_A:
   INC TIMER
   LPM R17,Z+
   ST y+,R17
   CPI TIMER,32
   BREQ MAS_B
   RJMP MAS_A

MAS_B:

   CLR TIMER

   LDI YL, low(MASSIN_2)
   LDI YH, High(MASSIN_2)
   LDI ZL, low(MAS2*2)
   LDI ZH, High(MAS2*2)

MAS_B1:

   INC TIMER
   LPM R17,Z+
   ST y+,R17
   CPI TIMER,32
   BREQ MAS_C
   RJMP MAS_B1


MAS_C:

   CLR TIMER

   LDI YL, low(MASSIN_3)
   LDI YH, High(MASSIN_3)
   LDI ZL, low(MAS3*2)
   LDI ZH, High(MAS3*2)

MAS_C1:

   INC TIMER
   LPM R17,Z+
   ST y+,R17
   CPI TIMER,32
   BREQ END_MSA
   RJMP MAS_C1
END_MSA:
   RJMP START

TERMS_SINOUTA:

   LDI ZL,LOW(MASSIN_1)
   LDI ZH,HIGH(MASSIN_1)
   CLR R20

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI
   RETI
TERMS_SINOUTB:

   LDI   YL,low(MASSIN_2)
   LDI YH,High(MASSIN_2)
   CLR R21

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI

   RETI
TERMS_SINOUTC:

   LDI XL,LOW(MASSIN_3)
   LDI XH,HIGH(MASSIN_3)
   CLR R22

   LDI R16,0b01010101
   STS TCCR3A,R16

   LDI R17,0b00001001
   STS TCCR3B,R17
   SEI

   RETI

Re: Пожалуйста помогите найти ошибку в программе для avr.

Вт июн 19, 2012 09:27:28

Ну, фильтр (ФНЧ) должен пропускать синусоиду и не пропускать всё остальное.

Re: Пожалуйста помогите найти ошибку в программе для avr.

Вт июн 19, 2012 13:19:05

А как его расчитать?

Re: Пожалуйста помогите найти ошибку в программе для avr.

Вт июн 19, 2012 13:21:39

:facepalm:
У ФНЧ (и ФВЧ) есть основной параметр — частота среза. Это такая частота, на которой мощность сигнала падает в 2 раза. Надо чтобы частота среза была выше частоты твоей синусоиды. По фильтрам есть куча программ и море инфы в инете.

Re: Пожалуйста помогите найти ошибку в программе для avr.

Вт июн 19, 2012 18:16:47

Частота процесора 8Мгц, таймер тикает до 256 с тактовой частотой. Значит один период ШИМ будет равен 8000 000/256 = 31250Гц

Частота полученной синусоиды с помощью ШИМ будет такая-же?

Подскажите простую программку для расчета фнч.

Re: Пожалуйста помогите найти ошибку в программе для avr.

Ср июн 20, 2012 06:34:09

Пожалуйста подскажите готовый фильтр для частоты 50 Гц

Re: Пожалуйста помогите найти ошибку в программе для avr.

Ср июн 20, 2012 07:46:47

Банальный RC-фильтр:
fсреза=1/(2*pi*R*C)
pi=3,1415926535897932384626433832795 (и никак иначе! :) )
[R]=Ом
[C]=Фарад
[fсреза]=Гц

Re: Пожалуйста помогите найти ошибку в программе для avr.

Ср июн 20, 2012 08:26:41

частота ШИМ получается 1MHz / пределител 64 / 256 = 61 Hz
На сколько больше должна быть частота среза?

Re: Пожалуйста помогите найти ошибку в программе для avr.

Пт июн 22, 2012 08:35:00

Любой сигнал состоит из кучи гармоник, кратных основной частоте
если у тебя основная частота 61Гц, то вторая гармоника будет 122Гц, третья - 183Гц и т.д.
исходя из этого и выбирай частоту среза

Re: Пожалуйста помогите найти ошибку в программе для avr.

Пт июн 22, 2012 08:47:03

GP1 писал(а):Любой сигнал состоит из кучи гармоник

Синусоидальный сигнал состоит из одной гармоники :wink:

Re: Пожалуйста помогите найти ошибку в программе для avr.

Пт июн 22, 2012 08:52:43

А ты попробуй на МК чистую синусоиду получить :wink:
Тема закрыта