Autor Tema: Contador externo en los PIC18  (Leído 2749 veces)

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

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Contador externo en los PIC18
« en: 28 de Enero de 2004, 12:45:00 »
A ver si me podeis hechar una mano.

Intento programar el TMR0 en los PIC18 para que actue como contador externo y no me sale.

Le meto: setup_timer_0 (RTCC_EXT_L_TO_H | RTCC_8_BIT)

Lo precargo con: set_timer0(248) para que cuente 8 piezas por RA4 y se desborde provocando una interrupción, pero no hay manera solo cuenta 3 piezas.

Algo me dejo, ¿que leches será?

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Contador externo en los PIC18
« Respuesta #1 en: 28 de Enero de 2004, 14:03:00 »
hola POCHER, mira si es como en los 16 te falta programar el prescaler para que no divida ese puede se el probelma, son los tres primeros bits del registro option en los 16 por ahi es lo mismo, pero de igual modo creo que ese el es problema.

saludos

Ariel
saludos
PikMan

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Contador externo en los PIC18
« Respuesta #2 en: 28 de Enero de 2004, 15:39:00 »
Tiene pinta de se eso. Y para que tenga un preescaler 1:1, asignas el preescaler al WDT y luego no usa (o sí, vamos, según necesites). Y ya tienes ese preescaler 1:1 para el timer 0. Eso al menos en los 16. Pero supongo que el los 18 será igual.

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Contador externo en los PIC18
« Respuesta #3 en: 28 de Enero de 2004, 23:20:00 »
Sí, si está claro que es el preescaler, pero como se hace.

En los PIC16 para que el TMR0 se comporte como contador con entrada de pulsos por RA4 hacía setup_counters (RTCC_EXT,L_TO_H,WDT_18MS) y funcionaba de maravilla, pero en los PIC18 no admite el WDT_18MS para que asigne el Preescaler al perrito y se comporte como contador el TMR0.

Desconectado kikelc

  • PIC10
  • *
  • Mensajes: 22
RE: Contador externo en los PIC18
« Respuesta #4 en: 29 de Enero de 2004, 00:57:00 »
Hola a todos

Pues ami tambien me entro la curiosidad y me puse a probar y despues de un rato, me puse a leer la ayuda del SET_TIMER0

y sorpresa: Timer 0 (AKA RTCC) gets an 8 bit int except on the PIC18XXX where it needs a 16 bit int.

En Los PICs 18 se trabaja con un 16 bits...cuando nos hiba a salir jejeje,  aki esta el ejemplo que hice enciende la salida B0 despues de 8 pulsos por el contador externo...

#include <18F458.h>                                  
#use standard_io(B)

#INT_Timer0
void DesbordeTimer0()
{
    Output_bit(PIN_B0,1);
}
                                                   
main()                                            
{                                                  
  SETUP_TIMER_0(RTCC_DIV_1|RTCC_EXT_L_TO_H);        
  SET_TIMER0(0xFFF8);
  ENABLE_INTERRUPTS ( INT_Timer0 );
  ENABLE_INTERRUPTS ( GLOBAL );                        

  while(1)                                          
  {                                              
     restart_wdt();
  }                                              
}

Aprobecho para preguntar, consegui un Pic 18LF458, que diferencia me ocaciona la "L" o que significa?

Saludos a todos

kikelc

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Contador externo en los PIC18
« Respuesta #5 en: 29 de Enero de 2004, 06:06:00 »
Gracias kikelc por tu colaboración.

El TMR0 puede actuar como 8 bits o como 16.

Yo lo quería hacer actuar como 8 bits. Por fin he encontrado la solución:

#include <18F458.h>
//#fuses HS, NOPROTECT, NOWRT, PUT, NOWDT, NOLVP, NOCPD   //No funciona PROTEUS  
//#use standard_io(B)
#use fast_io(B) //Para que funcione hay que añadir los tris correspondientes

#INT_Timer0
void DesbordeTimer0()
{
   output_bit(PIN_B0,!input(PIN_B0)); //Cada 5 impulsos cambia de valor
   SET_TIMER0(251);       
}

main()
{
   output_b(0x00);
   set_tris_a(0xFF);
   set_tris_b(0x00);
//   SETUP_TIMER_0(RTCC_DIV_1|RTCC_EXT_L_TO_H); //TMR0 con 16 bits
//   SET_TIMER0(0xFFF8);
   
   SETUP_TIMER_0(RTCC_DIV_1|RTCC_EXT_L_TO_H | RTCC_8_BIT); //TMR0 con 8 bits
   SET_TIMER0(251);    
   
   ENABLE_INTERRUPTS ( INT_Timer0 );
   ENABLE_INTERRUPTS ( GLOBAL );

   while(1)
   {
   restart_wdt();
   }
}

En cuanto a lo de la L que preguntabas hace referencia a los márgenes de alimentación del PIC. Por ejemplo ya que estamos con la serie 18:

PIC18LFxx2 --> desde 2V a 5.5V (mayor rango)

PIC18Fxx2 ---> desde 4.2V a 5.5V

PD. En el manual de CCS no viene el preescaler de 1, empieza por el de 2 ... lo podían haber puesto.

Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Contador externo en los PIC18
« Respuesta #6 en: 29 de Enero de 2004, 08:40:00 »
Bueno, el timer0 en los 18 se controla desde el T0CON ( Timer0ControlRegister), desde este se puede prescalar, asignar y elegir si se implementa de 8 o 16 bits de igual modo desde el CCS es mas FACIL, yo cuando no se como configurar uso el wizard  del CCS y creo toda la configuracion inicial de un proyecto es muy util se los recomiendo.

saludos

Ariel
saludos
PikMan

Desconectado lu6vg

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 313
RE: Contador externo en los PIC18
« Respuesta #7 en: 29 de Enero de 2004, 09:59:00 »
Escrito originalmente por kikelc
Aprobecho para preguntar, consegui un Pic 18LF458, que diferencia me ocaciona la "L" o que significa?



La L generalmente significa que trabajan a menor tension que los pics normales. Tienen el rango mas amplio, por ejemplo en vez de trabajar de 4,5 a 5,5 lo hacen desde 2,5 a 5,5. (no son datos reales)

Saludos

Luis


Desconectado pikman

  • Moderador Local
  • PIC24F
  • *****
  • Mensajes: 679
RE: Contador externo en los PIC18
« Respuesta #8 en: 29 de Enero de 2004, 15:15:00 »
Hola, LUIS , bienvenido,  efectivamente, todos los indicados LF, creo que el rango en donde empiezan es 2.0 volt hasta 3.0

saludos

Ariel
saludos
PikMan


 

anything