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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
astrgan
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт мар 08, 2012 01:13:30

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

Сообщение astrgan »

А как тут быть?
В регистры 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
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Я так понял, что Вы так и не исправили первую ошибку. Ну а по поводу второй , Вы читаете данные из SRAM , а там могут быть и 0xFF и что угодно , тем более , что Вы даже обращаетесь скорее не к SRAM или FLASH , а чёрт знает куда.
Реклама
astrgan
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт мар 08, 2012 01:13:30

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

Сообщение astrgan »

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

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

Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Ну, фильтр (ФНЧ) должен пропускать синусоиду и не пропускать всё остальное.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
Эиком - электронные компоненты и радиодетали
astrgan
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт мар 08, 2012 01:13:30

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

Сообщение astrgan »

А как его расчитать?
Реклама
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

:facepalm:
У ФНЧ (и ФВЧ) есть основной параметр — частота среза. Это такая частота, на которой мощность сигнала падает в 2 раза. Надо чтобы частота среза была выше частоты твоей синусоиды. По фильтрам есть куча программ и море инфы в инете.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Реклама
gibiri
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Сб июн 16, 2012 07:20:55

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

Сообщение gibiri »

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

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

Подскажите простую программку для расчета фнч.
astrgan
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт мар 08, 2012 01:13:30

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

Сообщение astrgan »

Пожалуйста подскажите готовый фильтр для частоты 50 Гц
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

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

Сообщение hybroid »

Банальный RC-фильтр:
fсреза=1/(2*pi*R*C)
pi=3,1415926535897932384626433832795 (и никак иначе! :) )
[R]=Ом
[C]=Фарад
[fсреза]=Гц
astrgan
Встал на лапы
Сообщения: 103
Зарегистрирован: Чт мар 08, 2012 01:13:30

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

Сообщение astrgan »

частота ШИМ получается 1MHz / пределител 64 / 256 = 61 Hz
На сколько больше должна быть частота среза?
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

Любой сигнал состоит из кучи гармоник, кратных основной частоте
если у тебя основная частота 61Гц, то вторая гармоника будет 122Гц, третья - 183Гц и т.д.
исходя из этого и выбирай частоту среза
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

GP1 писал(а):Любой сигнал состоит из кучи гармоник
Синусоидальный сигнал состоит из одной гармоники :wink:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

А ты попробуй на МК чистую синусоиду получить :wink:
Чем дальше, тем больше становлюсь занудой...
Изображение
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»