Moderadores: andre_luis, 51, guest2003, Renie
[VCC]
|
(motor)
|c
|/
saída pwm---------[470R]--| b
|\
|e
[gnd]
proex escreveu:Amplificador Operacional com capacidade de 500mA? Onde vc achou isso?
.
ze escreveu:Veja esta parte física
A princípio basta
- Código: Selecionar todos
[VCC]
|
(motor)
|c
|/
saída pwm---------[470R]--| b
|\
|e
[gnd]
TIP29 p.ex. Nem precisa dissipador. Se for usar o tal ampop 500mA (?) aí sim.
Quanto a parte 'espiritual' ccs não é minha religião
boa sorte
Andre_Cruz escreveu:Olá gvigano seja bem vindo !
Só pra saber, você já vez o PIC funcionar o pisca led ?
#include <16F628A.h>
#device adc = 10
#FUSES NOWDT //Watch Dog Timer desabilitado
#FUSES XT //oscilador cristal <= 4mhz
#FUSES PUT //Power Up Timer
#FUSES NOPROTECT //sem proteção para leitura da eprom
#FUSES BROWNOUT //Resetar quando detectar brownout
#FUSES MCLR //Reset habilitado
#FUSES NOLVP // prog.
#use delay(clock=4000000) //Definição do Clock = 4 MHz
//******************************************************************************************//
//Configuração I/O //
//*****************************************************************************************//
#BYTE PORTA = 0X05 //DEFINE PORTA
#BYTE PORTB = 0X06 //DEFINE PORTB
//******************************************************************************************//
// VARIÁVEIS //
//*****************************************************************************************//
int16 duty; //Variável para definição da largura do pulso PWM
//******************************************************************************************//
// PROGRAMA PRINCIPAL //
//******************************************************************************************//
void main ()
{
setup_timer_2(T2_DIV_BY_4,255,1); //Configuração Timer2 para uso do PWM
//Frequência do PWM = 5KHz
setup_ccp1(CCP_PWM); //Configura canal CCP1 como PWM
set_tris_a(0b11111111); //Define entradas e saídas
set_tris_b(0b00000000);
duty=0;
set_pwm1_duty(0);
while (TRUE) //Laço de leitura das entrada digitais e ajuste do Duty
{
if (input (pin_A0 == 1 && duty < 1000) //se botao RA0 pressionado
{
delay_ms(40);
duty = duty + 100; //incrementa duty em 100
set_pwm1_duty(duty); //altera o duty cycle
}
if (input (pin_A1)== 1 && duty >0) //se botao RA1 pressionado
{
delay_ms(40);
duty = duty - 100; //decrementa duty em 100
set_pwm1_duty(duty);
}
Delay_ms(10); // Altera a velocidade lentamente
} //Término laço principal
} //Término Programa principal
gvigano escreveu:Minha ideia é a seguinte: preciso criar um temporizador virtual e uma variável contadora. Se eu pressionar o botão por 100 ms então a variável duty = duty + 100. Caso o tempo seja menor que 100 ms (no caso de um ruído) ele não cai na condição de incremento do duty.
Delay_ms(40)
que voce usou pode ser suficiente.main()
. Tenho exemplos de debounce bem bolados, mas pra encaixar no seu programa, voce teria de primeiro o alterar para incluir uma interrupção, como por exemplo do TIMER0.Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante