Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
linikersoares

[DUVIDA] Gerar interrupcao no propeller clock!!?

Recommended Posts

Olá a todos programadores,

tenho realizado um projeto de tcc, estou tendo algumas dificuldades .

Preciso criar um temporizador por timer a executar determinada funcao.

exemplo:

está executando hora();

depois de um tempo

chama funcao

data();

segue o codico

#include <16f627A.h>

#fuses intrc_io, nowdt, noprotect, put, nobrownout, mclr, nolvp, nocpd
#use delay(clock=4000000)
#use fast_io(

#define BOTAO1 PIN_a0 //Boto de escolha de ajuste das funes.
#define BOTAO_INCREMENTO PIN_a1 //Boto incremento de variveis.
#define BOTAO_DECREMENTO PIN_a2
int conta_pulsos=0;
#byte porta = 0x05
#byte portb = 0x06

//Boto de decremento das variveis.
int apagado = 0; //apagado
int a;
int n,i=0,valor;
int h=12;
int m=5;
int s=14;
int dezena, unidade, digito;
int seg=0,q;
int contador=0;
int dia=29; //Variável dos dias do mês. 0 a 31.
int mes=6;
int ano=12;
//Tabela com os digitos
const unsigned char table[11][5] = {
0b01111110,0b01000010,0b01000010,0b01000010,0b01111110,//0
0b00000010,0b00100010,0b01111110,0b00000010,0b00000010,//1
0b01011110,0b01010010,0b01010010,0b01010010,0b01110010,//2
0b01010010,0b01010010,0b01010010,0b01010010,0b01111110,//3
0b01110000,0b00010000,0b00010000,0b00010000,0b01111110,//4
0b01110010,0b01010010,0b01010010,0b01010010,0b01011110,//5
0b01111110,0b01010010,0b01010010,0b01010010,0b01011110,//6
0b01100000,0b01000000,0b01000000,0b01000000,0b01111110,//7
0b01111110,0b01001010,0b01001010,0b01001010,0b01111110,//8
0b01110010,0b01010010,0b01010010,0b01010010,0b01111110,//9
0x00, 0x36, 0x36, 0x00, 0x00, // :

#int_TIMER1
void temp1s(void)
{
q++;
seg++;
if(seg==4){
seg=0;
i++;
}
if(i==4){
i=0;
}
set_timer1 (3036); //Preload do Timer1
}


void caracter(digito) { //chr contem 2 digitos (hh,mm o ss)
dezena = (digito/10); // dezenas
unidade = (digito-(dezena*10)); //e as unidades

for (n=0;n<5;n++) { //preparar a tabela para primeiro digito
output_b(table[dezena][n]);
output_high(pin_b0);
output_high(pin_b7);

delay_us(900) ;//160useg cada pixel horizontal
}
delay_us(700); //pausa entre digitost
output_high(pin_b0);
output_high(pin_b7);
output_b(0x00);
output_high(pin_b0);
output_high(pin_b7);
delay_us(700); //pausa entre digitos*/

for (n=0;n<5;n++) {
output_b(table[unidade][n]);
output_high(pin_b0);
output_high(pin_b7); //unidades
delay_us(700);
output_high(pin_b0);
output_high(pin_b7);
}
delay_us(700); //pausa entre digitos
output_b(0x00);
delay_us(700); //pausa entre digitos*/
output_high(pin_b0);
output_high(pin_b7);
}

void doispontos()

{
for (n=0;n<5;n++) { //preparar tabela para primeiro digito
output_b(table[10][n]);
output_high(pin_b0);
output_high(pin_b7);
delay_us(400); //160useg cada pixel horizontal
}
delay_us(400); //pausa entre digitost
output_b(0x00);
output_high(pin_b0);
output_high(pin_b7);
delay_us(400); //pausa entre digitos*/
}

void barra()

{
for (n=0;n<5;n++) { //preparar tabela para primeiro digito
output_b(table[32][n]);
delay_us(100); //160useg cada pixel horizontal
}
delay_us(600); //pausa entre digitost
output_b(0x00);
delay_us(600); //pausa entre digitos
}




void hora()
{
caracter(h);
doispontos();
caracter(m);
doispontos();
caracter(s);
}

void data()
{
caracter(dia);
barra();
caracter(mes);
barra();
caracter(ano);
}
void main() { //bucle principal
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8); //Configurao do Timer1 para clock interno = 1E6 dividido por 8
set_timer1 (3036);
enable_interrupts(INT_TIMER1); //Habilita interrupo timer1
enable_interrupts(global); //habilita interrupco global
set_tris_b(0);

a=0;

while (1) {

output_high(pin_b0);
output_high(pin_b7);
if (!input(BOTAO1)) //Teste do boton.
{
delay_ms (300); //Para evitar retorno.
if (contador>2) //Se maior q 11, zera o contador.
{
contador=0;
}

contador++; //Incremento da varivel contador.
}

switch (contador) //Depois de incrementada, a varivel CONTADOR
{ //assume um dos casos a seguir:
case 1: //Menu de ajuste da HORA.
{
output_low(pin_b7);

if (!input (BOTAO_INCREMENTO)) //Incrementa a varivel H(hora).
{
delay_ms (300);
h++;

if (h>23) //Se a hora for maior que 23, reset.
{
h=0;
}
}

if (!input (BOTAO_DECREMENTO)) //Decrementa a varivel H(hora).
{
delay_ms (300);
h--;

if (h==255) //H uma varivel inteira de 8 bits.
{ //Quando decrementada para um valor
h=23; //menor que zero, se torna 255. Ou seja,
} //deve voltar para 23.
}

q=0; //Quando se est em algum menu, Q resetada. //Mantenha na tela.

break;
}

case 2: //Menu de ajuste do MINUTO. Idem ao anterior.
{
output_high(pin_b7);
output_low(pin_b7);
output_high(pin_b7);

if (!input (BOTAO_INCREMENTO))
{
delay_ms (300);
m++;

if (m>59) //Diferente aqui.
{
m=0;
}
}

if (!input (BOTAO_DECREMENTO))
{
delay_ms (300);
m--;

if (m==255) //Igual aqui.
{
m=59;
}
}

q=0;

break;
}

default: //Menu principal. Mostra todas as informações.
{
s=q/2; //A variável Q incrementa a 2Hz, então os segundos
//devem ser a metade.
if (s==60) //Se for igual a 60, reset em Q e S. M incrementa.
{
q=0;
s=0;
m++;

}


if (m>59)
{
m=0;
h++;
}

if (h>23) //Se H(horas) for maior q 23, reset. DIA DA SEMANA
{ //e DIA DO MÊS incrementam.


h=0;
}






while(input(pin_a3)) { //so rodoa se pinoa3 =1
delay_ms(10);
output_high(pin_b0);
output_high(pin_b7);
hora();




}
}

}
}
}

ME AJUDEM! <3

Editado por linikersoares
Inserir CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • bom amigo me ajudou um pouco

    o ccp nao esta sendo aceito no meu programa

    e quando uso nao esta dando certo o timer

    olhe a logica que fiz e espero sua ajuda

    ps: estou usando esta variavel no mesmo timer1 do programa

    #int_timer1
    tempo++

    while(input(pin_a3)) { //so rodoa se pinoa3 =1


    if(tempo>1)
    {
    hora ();
    tempo=0;

    }
    if (tempo>3)
    {
    data();

    tempo=0;
    }
    }

    Editado por Bcpetronzio
    Inserir Code.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Ë povo anda muito ocupado

    USHUASHASUH

    se alguem tiver uma solucao do meu problema!

    respondem please

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Ainda não entendi qual o problema que você está enfrentando. Você quer fazer um relógio com data? Isso não tem muito segredo. Basta configurar o timer1 para interromper o programa a cada 10ms e usar uma variável para contar até 100, então você terá 1 segundo. Agora implementar a data é algo mais complicado devido ao nosso calendário precisar de correções (ano bisexto), e é um pouco difícil obter precisão absoluta no software (deve-se contabilizar o tempo de execução da rotina de interrupção.

    Eu recomendaria usar o DS1307, facilitaria muito o projeto, livraria o pic da contagem da data e pode ser usado com uma bateria auxiliar para manter a data durante falta de energia.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Eu recomendaria usar o DS1307, facilitaria muito o projeto, livraria o pic da contagem da data e pode ser usado com uma bateria auxiliar para manter a data durante falta de energia.

    Assino embaixo. Por isso passei aquele link. O projeto já está completo.

    Falou

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • sim creio que seria a melhor opcao sim,porém...

    minha pci ja esta pronta, mas no entando conseguir realizar a mudanca das interface

    e agora estou querendo usar a instrucao sleep do pic para hibernar meu programa quando eu desligar a energia (colocarei uma bateria ) como seria a logica para isto?

    pensei em ativar o Brown-Out quando sair a tensão da fonte entra a bateria e o PIC hiberna

    mas nao sei como devo usar o comando sleep ():

    me ajudem!!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Dê uma olhada no exemplo EX_WAKUP.C

    Fica dentro da pasta exemples do PICC.

    Falou

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • obrigado, creio que ela ira me ajudar

    mas pelo que vi esta habilitado a uma interrupcao externa no portB certo?

    caso eu queira usar o portA (pic16f627A)

    ou a mesma duvida,pelo Brown-Out teria um exemplo na questao de hibernar atraves do (BOR)?

    segue o video de como esta ficando meu projeto

    disposto a receber criticas e ideias

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×