Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

30/05/2013 #1


Tacometro con 18f4550
ante todo saludar a los compañeros de este foro, en esta oportunidad quisiera que me ayudaran,estoy intentado tomar datos de las revoluciones por minuto de pequeño motor de 24v dc,el detalle es que estoy estoy usando la comunicacion cdc usb de pic 18f4550 y el hyperterminal para tomar los datos y guardarlos en txt,el problema que consigo es que no se como hacer para que reiniciar mi contador por RB0 cada segundo para asi poder tener los pulsos contados por segundo y hallar las revoluciones por minuto,pero no se como configurar el timer0 ademas uso un cristal externo de 20MHz ,para asi alcanzar los 48MHZ para la coneccion usb.


el codigo en ccs que uso para contar los pulsos provenientes de un encoder es:

Código:
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5
#use delay(clock=48000000)
#include <usb_cdc.h>

#BYTE TRISA=0xF92
#BYTE PORTA=0xF80
#BYTE TRISB=0xF93
#BYTE PORTB=0xF81
#BYTE TRISC=0xF94
#BYTE PORTC=0xF82
#BYTE TRISD=0xF95
#BYTE PORTD=0xF83

int16 x=0;

#Int_Ext                        // Interrupción Externa por RB0: Decodificación de Encoder.
Void IntRB0()                       
{                                   
   // CCS se encarga de desactiva automáticamente cualquier interrupción.
   // No hace falta guardar contextos de registros.
                                         
   If (Bit_Test(PortB, 0))      // Si RB0 se ha puesto a 1 (flanco de subida),
           x++;                 // entonces incrementar una unidad el valor de X.
       
   }
 

void main(){
   usb_cdc_init();
   usb_init();
   Port_B_Pullups(FALSE);

   Ext_Int_Edge(0,L_TO_H);        // Inicialmente detectar interrupción por flanco de subida.
   Enable_Interrupts(Int_Ext);  // Activar Interrupción Externa por RB0/INT.
   Enable_Interrupts(GLOBAL);   // Interrupciones Generales Activadas.

   Set_Tris_B(0b11111111);      // Puerto B todo entradas (sólo usamos las entradas RB0 y RB1).
   
   // ---------- Programa Principial ----------

 While (True)
   {        
           usb_task();
           if (usb_enumerated()) {
               printf(usb_cdc_putc," %Lu\n\r",x);
               delay_ms(100);
               
           }
            }
   }

acepto todas sus sugerencias, espero que me puedan apoyar
desde ya muchas gracias
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.