Autor Tema: generar señal cuadrada  (Leído 3298 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado martos_iii

  • PIC10
  • *
  • Mensajes: 26
generar señal cuadrada
« en: 11 de Abril de 2005, 07:13:00 »
hola a todos, estoy intentando generar una señal cuadrada de aprox. 1Khz aprovechando el timer0 por uno de los puertos del pic. En ensamblador me sale sin problemas, pero estoy empezando ahora a programar en c y no se si no conecto bien el timer0 para generar la señal o hay otro problema. Lo q hago es que el timer0 se desborde cada 500us aprox y entonces testear si el bit del puerto estaba a 0 o a 1 y cambiar su estado. Pongo el codigo a ver si encontrais algun fallo

#include "D:programas cpantallabuena.h"


#use delay(clock=4000000)



void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

   set_tris_c(0xff); /*configuro el puerto c como salida*/
   setup_counters(RTCC_INTERNAL,RTCC_DIV_2|RTCC_8_BIT);
   set_rtcc(6);               /*cargo el tmr0 a este valor*/
   ENABLE_INTERRUPTS(INT_RTCC);
   ENABLE_INTERRUPTS(GLOBAL);
   output_low(pin_c3);               /*pongo el puerto de salida a 0 inicialmente*/

   
}

  #int_rtcc                         /*funcion que atiende la interrupcion del timer0
      interrupcion_timer0()
      {
         if(pin_c3==1)
         {
            output_low(pin_c3);
         }
         else
         {
            output_high(pin_c3);
         }
        set_rtcc(6);           /*vuelvo a cargar el tmr0*/
      }

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: generar señal cuadrada
« Respuesta #1 en: 11 de Abril de 2005, 09:48:00 »
He tenido que modificar un poco tu programa para que funcione:

Codigo:
#int_rtcc
interrupcion_timer0()
{
if(input(pin_c3)==1)  /* en esta línea es donde tenías el principal problema
el registro PIN_C3 no es de lectura, sólo de escritura, y para leerlo
hace falta usar la función INPUT */
{
output_low(pin_c3);
}
else
{
output_high(pin_c3);
}
set_rtcc(5); /*vuelvo a cargar el tmr0
he cambiado el 6 por un 5 para que sea más preciso*/
}

void main()
{

set_tris_c(0x00); /*configuro el puerto c como salida
aquí tenías otro fallo, si pones 0xFF configuras el puerto como entrada*/

// he borrado varias líneas que no eran imprescindibles

setup_counters(RTCC_INTERNAL,RTCC_DIV_2|RTCC_8_BIT);
set_rtcc(5); /*cargo el tmr0 a este valor*/
ENABLE_INTERRUPTS(INT_RTCC);
ENABLE_INTERRUPTS(GLOBAL);
output_low(pin_c3); /*pongo el puerto de salida a 0 inicialmente*/

while (1) // añado un bucle sin fin porque de lo contrario el programa finaliza
   {}

Desconectado martos_iii

  • PIC10
  • *
  • Mensajes: 26
RE: generar señal cuadrada
« Respuesta #2 en: 11 de Abril de 2005, 10:12:00 »
muchas gracias nocturno66, gracias a ti ya se un poco masSonrisa. La verdad es q despues de programar en ensamblador, y hacerlo en c se qeda uno agusto, pq para hacer esto en esnsamblador hay q escribir unas cuantas lineas de codigo. Bueno pues gracias y seguire programando.


 

anything