01.02.2015, 17:04
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
elon, А принцип связки частота / огибающая можно узнать? Два шима задействованы?
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
05.02.2015, 22:17
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Если кто нить еще почитывает данный пост, подскажите "бестолковому"...
Для трех меандров свершилось: поочередный перебор каналов с частотой прибл. 70 кгц вполне удовлетворительный результат.
Теперь о грустном: на 16Ф628 задействовал шим, период задается по периоду ноты, описывается форма - массив и RETLW. Для симметрии для "1" полупериода прибавляю к среднему (50%) шима, для "0" соотв вычитаю. Как бы для одного канала всё ясно.
Как быть, если каналов больше одного, с разными периодами? Даже для одного с разной частотой (хотя бы в два раза) уже "красота сигнала" пропадает.
Скорее всего решение простое, видать пошел ложным путём.
Опережая: никакой коммерции. Как - то ни разу ни сталкивался с подобной задачей, а теперь уперся. Проснулся спортивный интерес.
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
05.02.2015, 22:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
rusyvochka, может Вам стоит изучить принцип работы DDS.
Зачем смешивать 3 меандра, можно ведь смешать 3 гармонических сигнала типа "в уме", а потом уже смешанный сигнал запускать на выход используя ШИМ.
|
|
|
|
05.02.2015, 23:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Код:
|
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
unsigned int temp_res, temp_res_2, temp_res_3;
char txt[7],txt_2[7];
unsigned short i=0,l=0;
void main()
{
TRISB.RB0=1;
TRISB.RB1=1;
OPTION_REG=0x7f;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Sound_Init(&PORTC, 0);
while(1)
{
if(temp_res_3!=ADC_Read(1))
{
temp_res_3 = ADC_Read(1);
}
if(temp_res!=ADC_Read(0))
{
temp_res = ADC_Read(0);
temp_res_2=temp_res*2;
}
//================================================== ============================
if (Button(&PORTB, 0, 1, 0)&&i==0)
{
i=1;
temp_res_2++;
}
if (Button(&PORTB, 0, 1, 1)&&i==1)
{
i=0;
}
//================================================== ============================
if (Button(&PORTB, 1, 1, 0)&&l==0)
{
l=1;
temp_res_2--;
}
if (Button(&PORTB, 1, 1, 1)&&l==1)
{
l=0;
}
IntToStr(temp_res_2, txt);
IntToStr(temp_res_3, txt_2);
Lcd_Out(1,6,txt);
Lcd_Out(2,6,txt_2);
Sound_Play(temp_res_2, temp_res_3);
}
} |
вот вам музыкальный код на АЦП
|
|
|
|
05.02.2015, 23:18
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Сообщение от alvadep
|
Зачем смешивать 3 меандра
|
С меандрами все получилось. Пусть будет три синусоиды разной частоты. Высчитывать значение каждой в момент времени, суммировать и в канал. Для 3-х фиксированных частот - нет проблем. Частоты меняются, период соотв тоже. Тут пока топчусь....
За отсылание к "мудрым" спасибо, проштудирую.
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
05.02.2015, 23:21
|
|
Гражданин KAZUS.RU
Регистрация: 30.05.2008
Адрес: Запорожье, Украина
Сообщений: 505
Сказал спасибо: 190
Сказали Спасибо 95 раз(а) в 56 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Сообщение от vavan1983
|
вот вам музыкальный код на АЦП
|
Это не Ассемблер...
__________________
Смотрящий под ноги - звёзды видит в лужах.
|
|
|
|
05.02.2015, 23:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Сообщение от rusyvochka
|
Это не Ассемблер...
|
Ну чего вы удумали? На несчастном 12f музыку писать? Совсем ту ту?
Код:
|
_main:
;Код.c,17 :: void main()
;Код.c,19 :: TRISB.RB0=1;
BSF TRISB+0, 0
;Код.c,20 :: TRISB.RB1=1;
BSF TRISB+0, 1
;Код.c,21 :: OPTION_REG=0x7f;
MOVLW 127
MOVWF OPTION_REG+0
;Код.c,22 :: Lcd_Init();
CALL _Lcd_Init+0
;Код.c,23 :: Lcd_Cmd(_LCD_CLEAR);
MOVLW 1
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;Код.c,24 :: Lcd_Cmd(_LCD_CURSOR_OFF);
MOVLW 12
MOVWF FARG_Lcd_Cmd_out_char+0
CALL _Lcd_Cmd+0
;Код.c,25 :: Sound_Init(&PORTC, 0);
MOVLW PORTC+0
MOVWF FARG_Sound_Init_snd_port+0
CLRF FARG_Sound_Init_snd_pin+0
CALL _Sound_Init+0
;Код.c,26 :: while(1)
L_main0:
;Код.c,28 :: if(temp_res_3!=ADC_Read(1))
MOVLW 1
MOVWF FARG_ADC_Read_channel+0
CALL _ADC_Read+0
MOVF _temp_res_3+1, 0
XORWF R0+1, 0
BTFSS STATUS+0, 2
GOTO L__main20
MOVF R0+0, 0
XORWF _temp_res_3+0, 0
L__main20:
BTFSC STATUS+0, 2
GOTO L_main2
;Код.c,30 :: temp_res_3 = ADC_Read(1);
MOVLW 1
MOVWF FARG_ADC_Read_channel+0
CALL _ADC_Read+0
MOVF R0+0, 0
MOVWF _temp_res_3+0
MOVF R0+1, 0
MOVWF _temp_res_3+1
;Код.c,31 :: }
L_main2:
;Код.c,33 :: if(temp_res!=ADC_Read(0))
CLRF FARG_ADC_Read_channel+0
CALL _ADC_Read+0
MOVF _temp_res+1, 0
XORWF R0+1, 0
BTFSS STATUS+0, 2
GOTO L__main21
MOVF R0+0, 0
XORWF _temp_res+0, 0
L__main21:
BTFSC STATUS+0, 2
GOTO L_main3
;Код.c,35 :: temp_res = ADC_Read(0);
CLRF FARG_ADC_Read_channel+0
CALL _ADC_Read+0
MOVF R0+0, 0
MOVWF _temp_res+0
MOVF R0+1, 0
MOVWF _temp_res+1
;Код.c,36 :: temp_res_2=temp_res*2;
MOVF R0+0, 0
MOVWF _temp_res_2+0
MOVF R0+1, 0
MOVWF _temp_res_2+1
RLF _temp_res_2+0, 1
RLF _temp_res_2+1, 1
BCF _temp_res_2+0, 0
;Код.c,37 :: }
L_main3:
;Код.c,39 :: if (Button(&PORTB, 0, 1, 0)&&i==0)
MOVLW PORTB+0
MOVWF FARG_Button_port+0
CLRF FARG_Button_pin+0
MOVLW 1
MOVWF FARG_Button_time_ms+0
CLRF FARG_Button_active_state+0
CALL _Button+0
MOVF R0+0, 0
BTFSC STATUS+0, 2
GOTO L_main6
MOVF _i+0, 0
XORLW 0
BTFSS STATUS+0, 2
GOTO L_main6
L__main19:
;Код.c,41 :: i=1;
MOVLW 1
MOVWF _i+0
;Код.c,42 :: temp_res_2++;
INCF _temp_res_2+0, 1
BTFSC STATUS+0, 2
INCF _temp_res_2+1, 1
;Код.c,43 :: }
L_main6:
;Код.c,44 :: if (Button(&PORTB, 0, 1, 1)&&i==1)
MOVLW PORTB+0
MOVWF FARG_Button_port+0
CLRF FARG_Button_pin+0
MOVLW 1
MOVWF FARG_Button_time_ms+0
MOVLW 1
MOVWF FARG_Button_active_state+0
CALL _Button+0
MOVF R0+0, 0
BTFSC STATUS+0, 2
GOTO L_main9
MOVF _i+0, 0
XORLW 1
BTFSS STATUS+0, 2
GOTO L_main9
L__main18:
;Код.c,46 :: i=0;
CLRF _i+0
;Код.c,47 :: }
L_main9:
;Код.c,49 :: if (Button(&PORTB, 1, 1, 0)&&l==0)
MOVLW PORTB+0
MOVWF FARG_Button_port+0
MOVLW 1
MOVWF FARG_Button_pin+0
MOVLW 1
MOVWF FARG_Button_time_ms+0
CLRF FARG_Button_active_state+0
CALL _Button+0
MOVF R0+0, 0
BTFSC STATUS+0, 2
GOTO L_main12
MOVF _l+0, 0
XORLW 0
BTFSS STATUS+0, 2
GOTO L_main12
L__main17:
;Код.c,51 :: l=1;
MOVLW 1
MOVWF _l+0
;Код.c,52 :: temp_res_2--;
MOVLW 1
SUBWF _temp_res_2+0, 1
BTFSS STATUS+0, 0
DECF _temp_res_2+1, 1
;Код.c,53 :: }
L_main12:
;Код.c,55 :: if (Button(&PORTB, 1, 1, 1)&&l==1)
MOVLW PORTB+0
MOVWF FARG_Button_port+0
MOVLW 1
MOVWF FARG_Button_pin+0
MOVLW 1
MOVWF FARG_Button_time_ms+0
MOVLW 1
MOVWF FARG_Button_active_state+0
CALL _Button+0
MOVF R0+0, 0
BTFSC STATUS+0, 2
GOTO L_main15
MOVF _l+0, 0
XORLW 1
BTFSS STATUS+0, 2
GOTO L_main15
L__main16:
;Код.c,57 :: l=0;
CLRF _l+0
;Код.c,58 :: }
L_main15:
;Код.c,59 :: IntToStr(temp_res_2, txt);
MOVF _temp_res_2+0, 0
MOVWF FARG_IntToStr_input+0
MOVF _temp_res_2+1, 0
MOVWF FARG_IntToStr_input+1
MOVLW _txt+0
MOVWF FARG_IntToStr_output+0
CALL _IntToStr+0
;Код.c,60 :: IntToStr(temp_res_3, txt_2);
MOVF _temp_res_3+0, 0
MOVWF FARG_IntToStr_input+0
MOVF _temp_res_3+1, 0
MOVWF FARG_IntToStr_input+1
MOVLW _txt_2+0
MOVWF FARG_IntToStr_output+0
CALL _IntToStr+0
;Код.c,61 :: Lcd_Out(1,6,txt);
MOVLW 1
MOVWF FARG_Lcd_Out_row+0
MOVLW 6
MOVWF FARG_Lcd_Out_column+0
MOVLW _txt+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;Код.c,62 :: Lcd_Out(2,6,txt_2);
MOVLW 2
MOVWF FARG_Lcd_Out_row+0
MOVLW 6
MOVWF FARG_Lcd_Out_column+0
MOVLW _txt_2+0
MOVWF FARG_Lcd_Out_text+0
CALL _Lcd_Out+0
;Код.c,63 :: Sound_Play(temp_res_2, temp_res_3);
MOVF _temp_res_2+0, 0
MOVWF FARG_Sound_Play_freq_in_hz+0
MOVF _temp_res_2+1, 0
MOVWF FARG_Sound_Play_freq_in_hz+1
MOVF _temp_res_3+0, 0
MOVWF FARG_Sound_Play_duration_ms+0
MOVF _temp_res_3+1, 0
MOVWF FARG_Sound_Play_duration_ms+1
CALL _Sound_Play+0
;Код.c,64 :: }
GOTO L_main0
;Код.c,65 :: }
GOTO $+0
; end of _main |
Последний раз редактировалось vavan1983; 05.02.2015 в 23:33.
|
|
|
Сказали "Спасибо" vavan1983
|
|
|
05.02.2015, 23:51
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Сообщение от vavan1983
|
вот вам музыкальный код на АЦП
|
На АЦП???? и в тексте кода тоже "ADC_Read". интересно, что за новая методика.
Топикстартеру:
Поскольку меандр - это прямоугольный сигнал с равными длительностями 1 и 0, то ШИМ как бы тут лишний, можно просто изменять 1 и 0 на любом выходе программно
В пределах октавы есть 12 музыкальных интервалов (7 нот и 5 полутонов), достаточно иметь всего 12 предустановок периода, которые вызывать по команде на воспроизведение нужной ноты с нужного канала. На один выход объединить логическими операциями
|
|
|
|
06.02.2015, 00:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 26.12.2007
Сообщений: 1,198
Сказал спасибо: 70
Сказали Спасибо 80 раз(а) в 69 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
Ну вот как можно аж три меандры в один выход?
Так эта схема не три меандры в один выход.
Схема.rar
Я для работы LM567 делал.
|
|
|
|
06.02.2015, 00:28
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: На досуге - 12F629: 3 меандра на один выход
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 06.02.2015 в 00:31.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:16.
|
|