Ir ao conteúdo

Posts recomendados

Postado

Olá a todos. Tudo bem com vcs? Então é o seguinte, eu to com um  PIC24FJ256GB106, e cara, completamente diferente das famílias dos 18F para trás, levei um surra já com ele , virei a noite tentando entender melhor ele, mas o que eu não to dando conta, é de configurar o PWM dele, alguém tem um exemplo de como fazer isso? Já olhei o datasheet e nada, não to conseguindo, e tipo assim, se já tiver mastigadinho e tudo mais kkk seria muito legal kkk Mas é serio, se alguém poder me ajudar, ficaria muito grato. Obrigado pela atenção.  

  • Membro VIP
Postado

Qual parte do datasheet que você leu e não entendeu? Publique o pdf dele, a página, qual bit te deixou dúvida, desenhos, o que você fez e não deu certo, o que você achou que devera ocorrer e não ocorreu e etc, tudo mastigadinho que pode-se tentar avaliar pra você...

  • Haha 1
Postado

seve o PDF todo? porque eu não entendi nada da parte de PWM, se não eu printo a tela mesmo e mando 

PIC24FJ256GB110.pdf

adicionado 4 minutos depois
agora, Luan Borges disse:

seve o PDF todo? porque eu não entendi nada da parte de PWM, se não eu printo a tela mesmo e mando 

PIC24FJ256GB110.pdf

Eu quero controlar ele da mesma forma que controlo o do 18F4550, que é bem mais fácil, Que o mesmo eu controlo via UART.

         

...

             case '3':{DP +=10; delay_ms(10);}break;
             case '4':{DP -=10; delay_ms(10);}break;
             case 'A':{DP = 255;delay_ms(10);}break;
             case 'S':{DP = 0;  delay_ms(10);}break;

 

....

 PWM1_Set_Duty(DP);

.....

 

aumentar e diminuir a intensidade dele... 

Postado

@Luan Borges, bem vindo ao mundo dos MCUS acima de 8bits, as coisas daqui pra frente mudam um pouco quando comparados com os MCUs de 8bits, e a primeira coisa que você deve entender é que, agora os periféricos são fisicamente separados dos pinos de I/O.

O que isso significa? Que basicamente agora você tem duas tarefas em vez de uma, ao mexer com um periférico em nível de registrador, a primeira é configurar o periferico em si, a segunda é rotear os sinais de saida do periferico no pino que ele suporta.

No seu caso específico voce precisa configurar o PWM escolhendo um dos 5 timers disponiveis, cada timer suporta o modo free runing (contagem), capture e compare, esse ultimo é o que gera PWM.

Na seção 14 do datasheet ele descreve os registradores que você precisa configurar para obter o periférico em PWM, são três simples registradores, configure-os e escolha qual timer vai ser o "motor" desse PWM, em seguida va para a seção 11 - 13 dependendo do timer escolhido e configure ele para gerar o periodo desejado do seu PWM, basta colocar ele em moto auto-reload e carregar 1 vez o periodo de expiração dele.

Feito isso, o próximo passo é olhar seu PIC, e dependendo do encapsulamento verificar qual compare sai em cada pino, descoberto isso, va para a seção 10.04 do datasheet e configure o PPS para rotear seu compare para os pinos desejados.

Lembrando que isso que disse ai em cima, é alto nível agora você precisa ler as seções nessa ordem, para conseguir entender como a coisa funciona, nos micros maiores, para configurar um periférico, você sempre deve dividir sua configuração em problemas menores senão a coisa fica confusa mesmo.

Alternativamente você pode simplificar esses passos usando a Peripheral Library da Microchip, que ja possui as funções de configuração implementadinhas em C (esqueça essa lenda de acessar o registrador é mais rápido, os compiladores evoluiram muito em termos de otimização da firmware), vai ai on link:
https://www.microchip.com/SWLibraryWeb/product.aspx?product=PIC24 MCU dsPIC Peripheral Lib
 

Outra opção é usar o Code Configurator do MPLABX para gerar o codigo de inicialização dos periféricos, segue o link:

https://www.microchip.com/mplab/mplab-code-configurator

 

Bom por ora é isso, qualquer coisa da um berro,

Felipe

  • Curtir 1
  • Membro VIP
Postado

Dei uma lidinha rápida. De fato a dica do amigo@Felipe Electronic foi muito boa mas mesmo assim você precisa praticar um pouco. Essencialmente você precisa criar seu próprio...

1 hora atrás, Luan Borges disse:

 PWM1_Set_Duty(DP);

Mas olha que fofo...

The PWM duty cycle is specified by writing to the OCxRS and OCxR registers

só isso. Essencialmente, imagine um contador - um timer -  rodando livre e sendo comparado o tempo todo com um valor padrão. Se menor... saída =0, se maior... saída =1. Então seu PWM1_Set_Duty() só vai ter que fazer algo como...

PWM1_Set_Duty(unsigned int DP)

{

OC1R=DP;

//OC1RS=DP;//não me aprofundei sobre este registro auxiliar...

}

e o hw vai fazer o resto sozinho.

Claro isso depois de você ajustar corretamente os registros de controle da saída, pinos, timer, modo pwm e etc diretamente nos registros (minha opção pessoal) ou através dos mastigados inteligentemente sugeridos pelo amigo Felipão...

Vá por partes e tente  uma simulação. O próprio MPlab tem como simular o status do pino. Me lembro que era algo como mplab logic analyser

 

Postado

 

T

1 hora atrás, Luan Borges disse:

tá vamos lá, estou configurando assim:

 

 //TIME5...
   T5CON = 0x8010;
   PR5     ?? (Aqui que eu digo quando vai acontecer o overflow não é?) Mas se eu conseguir entender, quando chegar no numero que eu po ali, a flag T5IF_bit vai ser igual a 1 não é isso? Me corrija se estiver errado, e eu tenho que seta ela pra zero pra reiniciar, mas onde eu farei isso? Gente, é serio, EU TO MUUUUITO PERDIDO, Porque nas outras famílias fazia assim :

 

 if(TMR1IF_bit)
    {TMR1IF_bit = 0x00;
     TMR1L      = 0xB0;
     TMR1H      = 0x3C;
     baset1 +=1;
     baset2 +=1;
     baset3 +=1;
     baset4 +=1;
     basetemp();
    }

Como eu vou rei

Aqui no caso ele se alto reiniciaria é isso? E em qual parte fala sobre esse bit?

 

 

 

Aaaaaah o mais triste é que aulas sobre essa família não encontro nada em PT, não queria dar tanto trabalho pra vcs 

 

 

Postado

Gente achei um código, e deu certo, estou brincando com ele, Descobrir o que é PPS e achei muito fo**, Mas assim eu só consigo controlar uma unica saída de PWM???? 

adicionado 22 minutos depois

COnseguiiiiiiiiiiir, Achei em um site, Vocês são fod*s ❤️ amo vcs.

 

Então, Queria mastigadinho porque eu entendo melhor sabe? Eu vejo o código, entendo entender,  e faço o meu em cima do que eu aprendi, to fazendo o mesmo, nem sabia como funcionava esse PPS e conseguir entender, achei brilhante a ideia do PPS, aprendi até  ligas os outros PWM que tava apanhando kkkk Ta ai o Código pra quem  quiser e a ajuda de vcs pra complementar e frisar tudo. 

 

 

 

#define PWM_PERIOD 62500
#define PWM_PERIOD1 62500
void PwmInit(void)
{

/* Reset PWM */
OC1CON1 = 0x0000;
OC1CON2 = 0x0000;
OC2CON1 = 0x0000;
OC2CON2 = 0x0000;

/* set PWM duty cycle to 50% */
OC1R =  PWM_PERIOD >> 5;
OC1RS = PWM_PERIOD - 1; /* set the period */
OC2R =  PWM_PERIOD1 >> 5;
OC2RS = PWM_PERIOD1 - 1; /* set the period */

/* configure PWM */
OC1CON2 = 0x001F;
OC1CON1 = 0x1C0E; /* Clock sourc Fcyc, trigger mode 1, Mode 0 (disable OC1) */
OC2CON2 = 0x001F;
OC2CON1 = 0x1C0E;


RPOR5bits.RP11R=18;
RPOR6bits.RP13R=19;

}


void main()
{

//---------------- PORT's ----------------//
  TRISB = 0x00;
  PORTB = 0x00;

  TRISC = 0x00;
  PORTC = 0x00;

  TRISD = 0x00;
  PORTD = 0x00;

  TRISE = 0x00;
  PORTE = 0x00;

  TRISF = 0x00;
  PORTF = 0x00;

  TRISG = 0x00;
  PORTG = 0x00;

PwmInit();

while(1)
{
//OC1R=PWM_PERIOD;
 //OC2R=PWM_PERIOD1;
//Delay_ms(1000);

//OC1R=0.5*PWM_PERIOD;
OC2R=0.5*PWM_PERIOD1;


//OC1R=0.3*PWM_PERIOD;
//OC2R=0.3*PWM_PERIOD1;
//Delay_ms(1000);

OC1R=0.1*PWM_PERIOD;
//OC2R=0.1*PWM_PERIOD1;
Delay_ms(1000);


}

}

 

 

Vou mexer em muita coisa aqui pra fica como eu quero. E mais uma vez. Muito Obrigadddoooo Pela atenção ❤️ 

 

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...