Отговори на тема  [ 6 мнения ] 
импулс 38Khz 0,2 секунди 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение импулс 38Khz 0,2 секунди
Здравейте !
опитвам се да напиша подпрограма за импулс с продължителност 0.2 секунди модулиран с честота 38Khz.
До тук успях да модулирам импулса с 38Khz ,но не мога да го накарам да трае 0.2 секунди.
Ето и подпрограмата :

Wait movlw D'148'; при делител 1:8
movwf Counter
clrf TMR0
again bcf INTCON,T0IF
loop btfss INTCON,T0IF
goto loop
decfsz Counter,f
goto again
return

main
check btfsc PORTB,1
goto check
call flash



flash bsf PORTB,5
call Wait
bcf PORTB,5
goto main


Сря Ное 08, 2006 1:01 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Добави си една променлива примерно tmr_status, в която ще пишеш 0 при пускане на импулса и 1 когато таймера ти отброи тия 0.2s. Във функцията, с която човръкаш 38-те KHz проверяваш дали тая променлива е 0 и изпълняваш само при това условие....примерно


Сря Ное 08, 2006 1:17 pm
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Препълваш стека! От подпрограма се излиза с "return", а не с "goto", както си направил в подпрограмата "flash"! Какъв е процесора? Някои имат вградени USART или PWM модули и ако не ги ползваш, защо да не генерираш 38кHz с някой от тях?
Освен това в 0,2 секунди има точно 7600 периода на 38кНz. За да отмериш времето, можеш просто да ги изброиш.

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Сря Ное 08, 2006 2:12 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
Направи си PWM модула да генерира 38кХц формулата за сметките на периода (1/freq) ги има в даташийта и го командвай него като записваш 0 или половината от периода в CCP регистъра за времето което ти е нужно 0.2 сек при тебе

нещо от сорта

CCP = 50; <--това е стойнос която ти прави 1/2 от периода за да е 50% ЗАПЪЛВАНЕ
wait(200ms);
CCP = 0;
напиши си го на ASM


Сря Ное 08, 2006 2:36 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл
Аватар

Регистриран на: Пет Окт 27, 2006 6:23 pm
Мнения: 162
Местоположение: Севлиево
Мнение 
Пика е 16F84.
забравих да поясня :)


Сря Ное 08, 2006 6:52 pm
Профил ICQ
Ранг: Напреднал
Ранг: Напреднал

Регистриран на: Нед Авг 14, 2005 1:08 pm
Мнения: 433
Местоположение: Казанлък
Мнение 
еееее та тая 84 е два пъти по съпа от 627/8 а там си има PWM абе какви хора сте бе :) върти цикли тогава


Сря Ное 08, 2006 9:20 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 10 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни