Boa Tarde pessoal, estou tentando controlar um servo por pwm (sinals em 50hz e largura de pulso de 1ms até 2ms). Procurei até na pagina 19 do google e não encontrei algo satisfatório. Tentei com meu pouco conhecimento gerar um pseudo-pwm (output_high... delay....) e não ficou certo tb.
Até que achei um código do Claudio Larios: http://larios.tecnologia.ws/iBlog/archives/4271
Porem ele utiliza botões e eu gostaria de utilizar um potenciômetro.
Alguma dica de como alterar esse código ou então de como gerar um código do 0?
A minha linha de raciocino era essa:
E esse código não dá certo.
Tags:
Oi Rodrigo, boa tarde.
Eu escrevi um code PWM bitbang, para o PIC12F675, já que o 12F675 não tem o HW do PWM.
Mas eu escrevo em Hi-Tech. C
Voce usa qual compilador?
Veja também este código do Claudio Larios:
http://larios.tecnologia.ws/iBlog/archives/6395,
talvez vc consiga adapta-lo para seu uso.
Rui
Olá Rui,
Eu utilizo o mplab com ccs (achei muito fácil o aprendizado).
O 12f675 realmente não tem hardware de pwm, porem pelo tamanho dele e facilidade de aquisição, é uma boa escolha. Tentei achar algum com hardware pwm e dip8, mas não encontrei para comprar aqui no brasil.
Código que não sei como funciona, mas funciona ahhahaha e resolveu meus problemas.
Fonte: Lários Tecnologia
/*******************************************************************************
TESTA_SERVO_V2.C
Objetivo: Testar servos de 1 a 2 ms com um PIC12f675 e um potenciômetro
Autor: Cláudio Lários
Data: 10/12/2014
Este arquivo é parte integrante do blog LÁRIOS.TECNOLOGIA.WS
*******************************************************************************/
#include <12F675.h>
#device adc=8
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT
#zero_ram
#byte tris_gpio =0x85
#byte adcon0 = 0x1f
#byte adressh = 0x1e
#byte ansel = 0x9f
#bit go = 0x1f.1
#bit admf = 0x1f.7
#bit on_adc = 0x1f.0
#bit flagtmr0 = 0x0b.2
#bit out = 0x05.2 //pino 5
int8 valor;
void main() {
setup_adc_ports(sAN3 | VSS_VDD); //seleciona AN3 e 5v como referência
setup_adc(ADC_CLOCK_DIV_8 );// ajusta o clock do adc
set_adc_channel(3); //ajusta para o pino 3 (AN3)
delay_us(10); //delay
setup_counters(RTCC_INTERNAL,RTCC_DIV_8);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
tris_gpio=0b111011;
out=0;
WHILE(1){
valor = READ_ADC();// lê valor da tensão de entrada do pino 3
out=1;
flagtmr0=0;
set_timer0(160);
while(!flagtmr0);//aguarda estouro com 1ms
flagtmr0=0;
set_timer0(~(valor));
while(!flagtmr0);//aguarda estouro com 1ms
out=0;
delay_ms(15);
}
}
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por