Страница 1 из 1

Две синусоиды из одного порта

Добавлено: Сб апр 26, 2014 19:42:27
EXtReMe_
Всем привет. Подскажите, как организовать вывод 2х синусоид разных частот из одного порта мк на 2 ЦАПа - на один допустим 1000гц на другой 15гц? Ноги LE цапов подключены к Р3.0 Р3.1. Не могу понять как реализовать програмно попеременное вклчение ЦАПов + к этому попеременный вывод синуса на них.

Модель
СпойлерИзображение

Программа на Ассемблере
Спойлер

Код: Выделить всё

Tic		EQU		-(260-10)
	call	Timer
	
MainLoop:
	call	SIN
	jmp		MainLoop

Timer:
	mov		TMOD,#00000001b
	ret

Delay:
	mov		TH0,#high(Tic)	
	mov		TL0,#low(Tic)
	setb	TR0			
	jnb		TF0,$		
	clr		TF0			
	clr		TR0	
	ret
	
SIN:
	mov	  	DPTR,#tabl	
	mov	  	R7,#1		
	mov	  	R6,#255
K:	
	CLR     A          
    MOVC        A,@A+DPTR 
    	
    MOV     P0,A   	
    CLR     A
    INC     DPTR
    MOVC 	A,@A+DPTR 
	
	MOV     P2,A
	SETB    P3.0
	NOP
	NOP
	CLR     P3.0
    MOV     A,DPL
    ADD     A,R7            
    MOV     DPL,A
    JNC     NC          
    INC     DPH       
NC:
    DJNZ        R6,K        
    JMP     SIN
    RET
	
tabl:
	dw 2047,2097,2147,2198,2248,2297,2347,2397,2446,2495,2544,2593
	dw 2641,2689,2736,2783,2830,2876,2922,2967,3011,3055,3099,3142
	dw 3184,3225,3266,3306,3345,3383,3421,3458,3494,3529,3563,3596
	dw 3629,3660,3691,3720,3748,3776,3802,3828,3852,3875,3897,3918
	dw 3938,3956,3974,3990,4005,4019,4032,4044,4054,4064,4072,4078
	dw 4084,4088,4091,4093,4094,4093,4092,4089,4084,4079,4072,4064
	dw 4055,4045,4033,4020,4006,3991,3975,3958,3939,3919,3898,3876
	dw 3853,3829,3804,3778,3750,3722,3693,3662,3631,3599,3565,3531
	dw 3496,3460,3424,3386,3348,3308,3268,3228,3186,3144,3102,3058
	dw 3014,2970,2925,2879,2833,2786,2739,2692,2644,2596,2547,2498
	dw 2449,2400,2350,2301,2251,2201,2151,2100,2050,2000,1950,1900
	dw 1850,1800,1750,1700,1651,1602,1553,1504,1456,1408,1361,1314
	dw 1267,1221,1175,1130,1085,1041,998,955,913,872,831,791
	dw 751,713,675,638,602,567,533,500,467,436,405,376
	dw 347,320,293,268,244,221,198,177,158,139,121,105
	dw 89,75,62,51,40,31,23,16,10,6,3,1
	dw 0,1,2,5,9,15,21,29,38,49,60,73
	dw 87,102,118,135,154,173,194,216,239,263,288,315
	dw 342,370,400,430,461,493,526,561,596,631,668,706
	dw 744,783,823,864,905,947,990,1033,1077,1121,1166,1212
	dw 1258,1305,1352,1399,1447,1495,1544,1592,1641,1691,1740,1790
	dw 1840,1890,1940,1990
END

Re: Две синусоиды из одного порта

Добавлено: Сб апр 26, 2014 19:47:08
Chat_vert
Всем привет.
Ну привет.

А нафик тебе два ЦАП ?
Перемножь два числа перед выводом в порт командой MUL и всё.

Re: Две синусоиды из одного порта

Добавлено: Сб апр 26, 2014 19:53:36
EXtReMe_
Chat_vert писал(а):А нафик тебе два ЦАП ?
Амплитудная модуляция.

Re: Две синусоиды из одного порта

Добавлено: Сб апр 26, 2014 19:59:15
EXtReMe_
Подсказывали такой вариант

CLR P3.0
RRC A
MOV P0,A
....
....
....
RRC A
MOV P2,A
SETB P3.1
CLR P3.1

Но я не понял подсказки)))

Re: Две синусоиды из одного порта

Добавлено: Сб апр 26, 2014 23:21:14
Chat_vert
EXtReMe писал(а):Амплитудная модуляция.
Напиши определение амплитудной модуляции из учебника прям тут.
Сразу ж понятно что
нафик два ЦАП
Если не понятно то незачёт и нафик из ВУЗ нам так преп. всегда говорит.

Re: Две синусоиды из одного порта

Добавлено: Вс апр 27, 2014 01:12:05
EXtReMe_
Как програмно реализовать??? EQU -4 соответствует 1000гц -260 15гц. Таблица синусов одна. Я совершенно не понимаю алгоритм(

Re: Две синусоиды из одного порта

Добавлено: Вс апр 27, 2014 09:53:46
Chat_vert
Привет.

Картинку под спойлер убери пожалуйста, а то гориз.скрол напрягает блин.

А чё определение АМ не написал ?

Синусоиду на сколько промежутков поквантовал ?

Там таймеров два один настрой на N*15 Гц второй на N*1000Гц по прерыванию с первого клади в R2 синус по прерыванию со второго клади в R3
потом mov B,R2 ; mov A,R3 ; mul ; mov P2,A ;

А вобще спроси кто лучше меня знает а то я не очень в этих мк
Но писал я сам никого не просил сделать за меня чё то даже понял но у меня другое задание было

Re: Две синусоиды из одного порта

Добавлено: Вс май 04, 2014 22:19:31
misyachniy
Обычно применяют счетчики с разным числом для суммирования.

Например 15 герц выводите добавляя по 1 к счетчику для поиска текущего значения в таблице.
А для 1000 добавляете 67.

Затем отбрасываете старшие биты чтобы остаток "влез" в таблицу и выбираете значение.

Естественно частота вывода должна быть хотя-бы в 16 раз больше чем 100 герц.