LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: nunosilvarocha em 15 de Junho de 2012, 01:34
-
Boa noite,
Estou a programar um pic 18f4550 e necessito usar o timer1 ou timer3.
Neste momento já estou a usar o timer0 e o timer2 e preciso ainda de mais um timer, mas não sei como configurar nenhum dos dois!!
Se alguém me poder ajudar eu agradecia...
-
Já deste uma olhadela na datasheet?
Como é que estás a usar 2 timers e não sabes configurar outro?
A base é sempre a mesma.
-
Já deste uma olhadela na datasheet?
Como é que estás a usar 2 timers e não sabes configurar outro?
A base é sempre a mesma.
Já tentei ler o datasheet e ainda não percebi o que me falta, não tive problema a configurar os outros dois deve estar a faltar-me algo nestes pois a configuração dos timers e diferente em todos eles.
De momento não tenho nenhum dos testes para mostrar o meu código.
-
Num programa rápido e sem tempos previamente definidos, não consigo nada.
Para já a ideia é fazer um breakepoint dentro da interrupção, e isso não está a acontecer.
#include<htc.H>
__CONFIG(1, HS);
__CONFIG(2, WDTDIS);
__CONFIG(3, MCLREN);
__CONFIG(4, DEBUGEN&LVPDIS);
void interrupt ISR(void)
{
if (TMR1IF==1)
{
RD0!=RD0;
TMR1L = 100;
TMR1H = 100;
TMR1IF=0;
}
}
void main(void)
{
TRISD = 0b00000000;
PORTD = 0b00000000;
GIE=1;
PEIE=1;
TMR1IE = 1;
TMR1IP = 1;
T1CON = 0b11110011;
TMR1L = 100;
TMR1H = 100;
while(1);
}
-
o bit T1RUN do registo T1CON está a 1. Não será a 0 ? Não tens nenhum oscilador externo no RC0 e RC1 pois nao? portanto é a 0. deve ser disso... porque assim nao conta!
-
Depois de voltar a ler o datasheet decidi juntar algumas coisas ao código.
Pelo que percebi o Timer1 trabalha com um oscilador externo em RC0,RC1 ou com um oscilador interno.
Visto que já tenho o resto dos pinos ocupados, tenho que usar o oscilador interno (este é só um programa de teste).
Isto ainda não está muito bem, pois parece-me que ele está a usar o oscilador interno par o Timer1 como oscilador principal.
Outro problema é, na simulação, por mais que varie o valor do TMR1 o tempo da interrupção é sempre o mesmo.
Alguém me pode ajudar?
#include<htc.H>
__CONFIG(1, HS&IESOEN);
__CONFIG(2, WDTDIS);
__CONFIG(3, MCLREN&LPT1DIS);
__CONFIG(4, DEBUGEN&LVPDIS);
void interrupt ISR(void)
{
if (TMR1IF==1)
{
RD0!=RD0;
TMR1 = 0;
TMR1IF=250;
}
}
void main(void)
{
TRISD = 0b00000000;
PORTD = 0b00000000;
T1CON = 0b10111001;
TMR1 = 0;
GIE=1;
PEIE=1;
TMR1IF = 0;
TMR1IE = 1;
TMR1IP = 1;
OSCCON = 0b11111101;
while(1);
}
-
O Oscilador interno que falas é o oscilador que o PIC tem ou o cristal que lhe colocas (nos pin 13 e 14). Tens algum esquematico das ligações do PIC?
Depois, ele faz a interrupçao? e na interrupcao tens:
RD0!=RD0;
TMR1 = 0;
TMR1IF=250;
Está errado. é TMR1F = 0;
-
Tenho um oscilador de 20 MHz nos pinos 13 e 14. Mas pelo que li o timer1 ou trabalha com um oscilador interno, ou com um externo nos pinos 15 e 16. Não sei se existe alguma forma de usar o timer1 com o oscilador dos pinos 13 e 14.
Neste momento não tenho nenhum esquemático das ligações.
O TMR1F já foi corrigido e não era dai o problema.
-
Até agora nada!! Alguém me consegue ajudar?
-
experimenta o registo T1CON = 0b10000001;
-
Parece que assim já tenho algum resultado.
Mas de momento não tenho muito tempo para isto, vou ter que testar mais tarde.
Obrigado pela ajuda beirao