LusoRobótica - Robótica em Português
Sistemas específicos => PIC => Tópico iniciado por: iyahdub 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 ?!?
#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);
}
}
-
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);
-
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.
-
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
-
Tens razao, beirao...Esqueco-me cnstantemente q estou em hexadecimal, traduzindo para binario E NAO DECIMAL lol lol
E obrigado senso...Ja faz sentido !
-
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
-
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 !
-
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.
-
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.
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.
:)