TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pocher 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á?
-
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
-
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!!
-
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.
-
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
-
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.
-
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
-
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
-
Hola, LUIS , bienvenido, efectivamente, todos los indicados LF, creo que el rango en donde empiezan es 2.0 volt hasta 3.0
saludos
Ariel