collapse

* Links de Robótica

* Posts Recentes

Feira de electricidade e eletrónica por artur36
[Ontem às 23:07]


Power_OK Enermax por almamater
[Ontem às 12:10]


Recomendação de um opamp para um DAC r2r por jm_araujo
[23 de Novembro de 2017, 10:48]


RN42 e TP-Link MR3020 por doiga
[22 de Novembro de 2017, 19:22]


Ajuda Projecto IR / RF por senso
[22 de Novembro de 2017, 13:15]


Ideias para construir um quadrúpede simples por dropes
[21 de Novembro de 2017, 22:43]


Ajuda com TRIAC por senso
[17 de Novembro de 2017, 18:00]


TV LG White Screen por almamater
[15 de Novembro de 2017, 08:37]


Pergunta sobre prototipagem ( Pesquisa ) por luisjustin
[14 de Novembro de 2017, 23:22]


Medir Agua que está no Poço por Njay
[14 de Novembro de 2017, 13:28]

Autor Tópico: HITECH com PIC16F887  (Lida 3083 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
HITECH com PIC16F887
« em: 12 de Julho de 2012, 23:19 »
Ja referi que so faz pouco tempo ganhei coragem para comecar a enterrar o cabecorro na arquitectura dos PIC.
Tenho andado com Assembly( que afinal nao e nenhum bicho de 7 cabecas) e agora tb ando a mexer devagarinho com C, ja que e onde me sinto mais a vontade.
DUVIDA:
PIC16F887 em HITECH lite version
Porque so me aceita os delays depois de inserir o #define _XTAL_FREQ ?!?!
Outra coisa- Pq que quando acaba o loop, faz o reset automatico a porta, nao sendo preciso definir o bit clear para 0 3 led ?!?
Código: [Seleccione]
#include<htc.h>
#include<pic.h>
#define _XTAL_FREQ 4000000

//__CONFIG(FOSC_HS|WDTE_OFF|PWRTE_ON|LVP_OFF|DEBUG_OFF);
__CONFIG(FOSC_HS|WDTE_OFF|PWRTE_ON|BOREN_OFF|LVP_OFF|CPD_OFF|WRT_OFF|DEBUG_OFF|CP_OFF);

void main(void)
{
TRISD=0;

while(1)
{
PORTD=0x01;   //turn on LED at RD0.
            __delay_ms(100);
            PORTD=0x00;   //turn off LED at RD.
PORTD=0x02;   //turn on LED at RD1. 
            __delay_ms(100);
PORTD=0x00;   //turn off LED at RD.
PORTD=0x04;   //turn on LED at RD2.
__delay_ms(100);
}
}
« Última modificação: 12 de Julho de 2012, 23:22 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: HITECH com PIC16F887
« Responder #1 em: 12 de Julho de 2012, 23:28 »
não percebi a pergunta de fazer reset automatico ao porto... isso acende o led0, depois acende só o 2 e depois só o 3. Já agora, para fazer esse ciclo de acender três leds, um de cada vez, pode fazer só:

                PORTD=0x01;   //turn on LED at RD0.
               __delay_ms(100);
      PORTD=0x02;   //turn on LED at RD1. 
               __delay_ms(100);
      PORTD=0x04;   //turn on LED at RD2.
      __delay_ms(100);
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.402
  • Helpdesk do sitio
Re: HITECH com PIC16F887
« Responder #2 em: 12 de Julho de 2012, 23:30 »
Só te aceita delays depois de definires a frequencia do cristal, porque sem ela o compilador não tem maneira de saber quantos nops/instruções tem de fazer para passar X tempo.
Avr fanboy

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.494
Re: HITECH com PIC16F887
« Responder #3 em: 12 de Julho de 2012, 23:31 »
Acho que já percebi a questão do reset.. tá a dizer que ao recomeçar o loop ele apaga o led3 e acende o led1 ? Está certo, porque ao fazer PORTD = 0x01, (que é igual a 0b00000001) tá a dizer que todos os leds são 0 excepto o primeiro. Se quiser apenas mexer num dos leds, e não no porto todo ao mesmo tempo, é fazer PORTDbits.RD1 = 1;. Neste caso iria colocar a "1" a saída do pin RD1 sem mexer no resto do porto
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: HITECH com PIC16F887
« Responder #4 em: 12 de Julho de 2012, 23:44 »
Tens razao, beirao...Esqueco-me cnstantemente q estou em hexadecimal, traduzindo para binario E NAO DECIMAL lol lol
E obrigado senso...Ja faz sentido !
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: HITECH com PIC16F887
« Responder #5 em: 13 de Julho de 2012, 14:42 »
Acho que já percebi a questão do reset.. tá a dizer que ao recomeçar o loop ele apaga o led3 e acende o led1 ? Está certo, porque ao fazer PORTD = 0x01, (que é igual a 0b00000001) tá a dizer que todos os leds são 0 excepto o primeiro. Se quiser apenas mexer num dos leds, e não no porto todo ao mesmo tempo, é fazer PORTDbits.RD1 = 1;. Neste caso iria colocar a "1" a saída do pin RD1 sem mexer no resto do porto


Sendo bastante conveniente usar as opções de comutar pinos no formato (PORTxbits.Rx0 = 1 ou 0), o mesmo não é aconselhado devido à estrutura interna de como é feita esta comutação no micro. Ler sobre isto no datasheet :: " read-modify-write"

Para comutar pinos, o melhor é usar um OR ou AND lógicos :::

SET RB0::  PORTB |= 0b00000001;

CLEAR RB0:: PORTB &= 0b11111110;


Vejam o ASM de saída do compilador, para ver como é feito em assembler, possivelmente algo como isto ::

SET RB0:
MOVLW b'00000001'
IORWF PORTB, F       ;destino da operação de volta para PORTB

CLEAR RB0:
MOVLW b'11111110'
ANDWF PORTB, F      ;destino da operação de volta para PORTB

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: HITECH com PIC16F887
« Responder #6 em: 13 de Julho de 2012, 18:55 »
Sena, ja agora, tendo o meu pequeno codigo como exemplo, como farias ?!?
E ja agora, posso assumir que o teu conselho tem a ver com a arquitectira do PIC, somente, correcto ?!
E que estou a verificar a parte da datasheet, mas como ainda estou aprender tudo o que tenha a ver com low level, nao me faz muito sentido.
Outra pergunta- o Debug configurado no s configurations bits, e para in line debugging...Como tenho o PickIt 2, poderia usar ele tb em vez do pick it?!? Ou quando escolho debugging no Mplab, ele activa autiomaticamente o pickIt2 debugging ?!? Ou e apenas o do software ?!?
Eu sei que algumas destas respostas poderia encontrar na documentacao, mas e tao complicado encontrar algo por vezes( sobre os PICS) que sempre foi algo que me manteve afastado deles ate agora...Por isso e sempre bom ter alguem com bastante experiencia como voces a quem perguntar...

Obrigado em avanco !
« Última modificação: 13 de Julho de 2012, 20:26 por iyahdub »
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: HITECH com PIC16F887
« Responder #7 em: 13 de Julho de 2012, 23:18 »
Sena, ja agora, tendo o meu pequeno codigo como exemplo, como farias ?!?


     TRISA=0;
     TRISB=0;
     TRISC=0;
     TRISD=0;
     TRISE=0;



E ja agora, posso assumir que o teu conselho tem a ver com a arquitectira do PIC, somente, correcto ?!

Com qualquer arquitectura. Embora hoje os micros já automaticamente activem os pull-ups internos, de propósito, quando o pino está como entrada.
Um pino de entrada digital, é um circuito de alta-impedância. Logo, é como se fosse uma antena no ar: capta todo o tipo de ruidos. Às vezes basta aproximar a mão do circuito, sem lhe tocar, para que haja todo o tipo de comportamentos estranhos, nomeadamente oscilações nas entradas e subsequentes oscilações na linha de MCLR interno.

Não estou a afirmar que poderá ser agora o problema, mas...




Outra pergunta- o Debug configurado no s configurations bits, e para in line debugging...Como tenho o PickIt 2, poderia usar ele tb em vez do pick it?!? Ou quando escolho debugging no Mplab, ele activa autiomaticamente o pickIt2 debugging ?!? Ou e apenas o do software ?!?

Quando escolhes o Debbuging, de entre vários, podes escolher o MPLAB SIM ou o PICKIT2.
O SIM é para simular o código no MPLAB. O PICKIT2 é para programar e fazer debbug em "tempo-real" no hardware.





Eu sei que algumas destas respostas poderia encontrar na documentacao, mas e tao complicado encontrar algo por vezes( sobre os PICS) que sempre foi algo que me manteve afastado deles ate agora...Por isso e sempre bom ter alguem com bastante experiencia como voces a quem perguntar...

Não é complicado. Até há muita muita informação na internet. É questão é de saber o que se procura.
Até há bem pouco tempo, encontrar informação PIC era extremamente mais facil do que AVR. Agora, com o advento do Arduino, está perfeitamente equiparado.

Offline iyahdub

  • Mini Robot
  • *
  • Mensagens: 277
Re: HITECH com PIC16F887
« Responder #8 em: 13 de Julho de 2012, 23:40 »
Obrigado.
Dou bastante valor ajuda de membros como tu, o Senso, e outros( desculpem so neomear alghuyns lol), que torna foruns como este algo importantissimos.
Acho que ja tinha dito, mas talvez devesses ajudar com a tal revista com uns artigos de introducao aos PICS( ja que e a tua area) e o Senso e o Dropes com AVR ?!? Tenho a certeza que muita gente os usaria como incentivo a enterrarem mais o cabecorro nas questoes mais tecnicas, tal como tu me incentivaste a nao ter medo do assembly e dos PIC(que ate a altura, me assustavam)
ps-Desculpen a falta de pontuacao, mas vivo no estrangeiro e os teclados sao xenofobos !!

Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
Re: HITECH com PIC16F887
« Responder #9 em: 13 de Julho de 2012, 23:42 »
Obrigado.
Dou bastante valor ajuda de membros como tu, o Senso, e outros( desculpem so neomear alghuyns lol), que torna foruns como este algo importantissimos.
Acho que ja tinha dito, mas talvez devesses ajudar com a tal revista com uns artigos de introducao aos PICS( ja que e a tua area) e o Senso e o Dropes com AVR ?!? Tenho a certeza que muita gente os usaria como incentivo a enterrarem mais o cabecorro nas questoes mais tecnicas, tal como tu me incentivaste a nao ter medo do assembly e dos PIC(que ate a altura, me assustavam)


Obrigado pelas palavras, ajudarei sempre no que possivel.
:)