Ir ao conteúdo
  • Cadastre-se

PIC So falta entender o que o PR2 do timer2 faz!


Ir à solução Resolvido por aphawk,

Posts recomendados

@Carlosfrances ,

 

Tava esperando alguém responder, mas acho que a turma não estuda mais os datasheets, usam linguagens de alto nível agora kkkkkk

 

O registro PR2 tem o valor máximo da contagem, enquanto o registro TMR2 tem o valor inicial.

É bem mais "arcaico" que os times dos Avrs, mas fazem a mesma coisa, só que de maneira mais complicada kkkk !

 

Veja aqui uma explicação completa :

 

 http://www.microcontrollerboard.com/pic-timer2-tutorial.html

 

Paulo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Carlosfrances ,

 

Não é de maneira genérica ... a família PIC16 é bem antiga, já as famílias PIC18 em diante são bem mais modernas.

 

Mas olhe pelo mundo : você encontra 10x mais projetos com os Avrs ( incluindo os Arduínos ) do que com Pic , justamente pela melhor relação custo/benefício dos Avrs.

 

Paulo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@aphawk pelos mais entendidos que eu , irei aderir depois que aprender o máximo sobre os pics os avrs, bom seria que a universidade em seus estudos acadêmicos , mostrasse de forma clara , uma leitura suave , sobre os microcontroladores assim como se estuda o SAP 1 e 2 os primeiros microprocessadores  , na minha opinião os professores não são tão bons , os alunos têm um péssimo rendimento , e agora que as bolsas federais estão sendo cortadas vala me nossa senhora kkkkk

Link para o comentário
Compartilhar em outros sites

@Carlosfrances ,

 

Continue aprendendo com os Pics, porque em termos de hardware os Avrs fazem a mesma coisa, porém mais rápido , com um custo/benefício melhor, e com muito mais exemplo de programas e de projetos pelo mundo.

 

Os microcontroladores básicos de hoje em dia são bem parecidos, todos se baseiam em alguns módulos internos como Timers ( CTC ), Serial, Conversor A/D e controlador de interrupção. Não tem muito o que dizer de diferenças entre eles, quando você entende bem esses módulos, tudo fica muito mais simples.

 

Imagina a dificuldade na minha época de aprendizado, o Z-80 era o “top”, e não tinha nenhum desses módulos dentro dele, aliás nem memória RAM, e nem memória de programa ( EPROM naquela época), tudo eram chips e mais chips interligados, barramentos de dados e de endereços, enfim uma baita complicação dos diabos...

 

Concordo com você quando diz que as faculdades são muito fracas, eu vejo pelo nîvel dos trabalhos de formatura que aparecem por aqui kkkkk

 

Eu ainda afirmo que nenhuma faculdade vai te ensinar mais do que se você mesmo resolvesse aprender sem ela !

 

Hoje tem Internet, existem milhares de bons tutoriais sobre qualquer assunto, e muitos sites que se dispõem a divulgar e ensinar a quem precisar, mas .... você tem de ler Inglês técnico fluentemente !

 

Aprender a pelo menos traduzir a parte técnica vai te facilitar demais o aprendizado!

 

Desde que eu entrei aqui no CDH eu falo a mesma coisa : eu me formei pela E.E. Mauá, na época era considerada uma das duas mais difíceis de se formar em 5 anos ( tirando o ITA claro ), e olha : quando saí, aumentei meu conhecimento em menos de 25% do que eu já sabia quando entrei !!!!

 

Sempre fui autodidata, vivia montando coisas, comprando revistas , e aprendendo com minhas montagens e com meus erros... 

 

Você pode fazer a mesma também, meu amigo !

 

Se ficar esperando pelos teus professores, vai ser apenas mais um Mané que sai com um diploma que não vale nada no mercado, e vai acabar indo trabalhar em outra área.

 

Compre um kit tipo Arduino, compre alguns módulos básicos, como display LCD, Leds, alguns wireless para brincar ( ESP8266 ) , e vai inventando e fazendo !

 

Se mexe que o mundo espera quem corre na frente da manada de braços abertos !

 

Paulo

  • Haha 1
Link para o comentário
Compartilhar em outros sites

@aphawk o rapaz apenas quer saber rsrsrs sobre como faz pra criar a onda senoidal com modulação por largura de pulso defasada ou seja varias ondas quadrada imitando uma onda senoidal , ele está com dúvida na parte do deslocamento essa aqui hoo kkkkkk PDC0H = seno [passo] >>8; porque não ensina aphawk ? Kkkkkkkkkkkkk🤣😂😂😂😂😂😂🤣😂😂

Link para o comentário
Compartilhar em outros sites

@Linguagem c ,

 

Bom, não me pareceu ser essa a dúvida deste tópico !

 

Quanto a técnica de criar 3 ondas senoidais defasadas de 120 graus, eu

ví um cara usar os três Timers de um Atmega48 , cada um deles passava por um integrador RC, e assim obteve as três senóides ... tudo por hardware apenas, bastou programar adequadamente os registros envolvidos.

 

Mas isso que você mostrou é em linguagem C .... eu não entendo nada disso, me desculpe kkkkk !

 

Paulo

  • Haha 1
Link para o comentário
Compartilhar em outros sites

5 minutos atrás, aphawk disse:

@Linguagem c ,

 

Bom, não me pareceu ser essa a dúvida deste tópico !

 

Quanto a técnica de criar 3 ondas senoidais defasadas de 120 graus, eu

ví um cara usar os três Timers de um Atmega48 , cada um deles passava por um integrador RC, e assim obteve as três senóides ... tudo por hardware apenas, bastou programar adequadamente os registros envolvidos.

 

Mas isso que você mostrou é em linguagem C .... eu não entendo nada disso, me desculpe kkkkk !

 

Paulo

Se bem que em eletrônica digital , eu sou mais esse atmega aí , por que em vez de programar você tá passando pra hardware , as vezes a programação é tão difícil pra alguns que chegam até desistir e passar pra hardware 😂 RC é  um filtro né?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Carlosfrances ,

 

Sim, é um simples resistor em série com um capacitor, normalmente chamado de filtro passa baixas ou também Integrador.

 

O melhor é conhecer o hardware interno do microcontrolador,  e saber programá-lo para ele fazer algo que queremos, SEM precisar de nenhuma assistência do software depois disso !

Evita um hardware à parte !

 

Programar é algo que depende muito da linguagem escolhida. Alguns se sentem à vontade com C, outros como eu com o Assembly, cada um deve procurar usar a linguagem que entenda melhor o que cada comando faz.

 

Paulo

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP
15 horas atrás, Carlosfrances disse:

as vezes a programação é tão difícil pra alguns que chegam até desistir e passar pra hardware 😂 RC é  um filtro né

De fato. De fato fiz isso há .. alguns anos. Tinha que ler um sinal de corrente todo detonado. Ler de tempos em tempos, armazenar, somar, fazer a média aff. Um simples filtro rc fez isso tudo pra mim deixando a vdc média certinha, retinha, bunitinha, coisa mais fofa na entrada do mc.

 

3 minutos atrás, aphawk disse:

vontade com C, outros como eu com o Assembly

Assembly não é como c. ... cada um tem o seu.. (!!😁).

Cada um acende um led de uma maneira diferente... literalmente. O c é quase igual pra todos mas com mínimo conhecimento do hw do mc. Já arduíno, os cara tentaram facilitar ainda + . é tudo a lesma lerda o tal digitalwrite() serve pra avr até esp32. Eu (eu) pisquei um led com o esp32@arduino sem nunca tê-lo visto na vida em alguns minutos. Se fosse assembly ou os comandos at dele levaria horas, dias, semanas, meses... sei lá.

 

A proposito, tava perdendo muito tempo pesquisando na época, aí pra escrever 8 bits nuns leds no esp32 apelei e fiz isso

#define PORT digitalWrite

void wport8(unsigned char d)
{
  PORT(15,(d>>0)&1); //!
  PORT(2, (d>>1)&1);
  PORT(4, (d>>2)&1);
  PORT(16,(d>>3)&1);
  PORT(17,(d>>4)&1);
  PORT(5, (d>>5)&1);
  PORT(18,(d>>6)&1);
  PORT(19,(d>>7)&1);
}

Você conhece algo como escrever 8 bits direto no port do bicho?

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Isadora Ferrazoperador de deslocamento bi a bit faz isso ate no vetor ele escre em uma posição de memoria esse seu codigo é parecido com o seno[passoA]>>8; do meu vetor controle de motor bldc

void wport8(unsigned char d) { PORT(15,(d>>0)&1); //! PORT(2, (d>>1)&1); PORT(4, (d>>2)&1); PORT(16,(d>>3)&1); PORT(17,(d>>4)&1); PORT(5, (d>>5)&1); PORT(18,(d>>6)&1); PORT(19,(d>>7)&1); } saberia me indicar um bom livro que me passe uma boa didatica ! com operador de deslocamento bit a bit? caramba parece que nem ficaram contentes em rever um amigo kkkkkkkkkkkkk

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz como eu disse antes o pwm chega ate 14 bits sendo que estou utilizando 10 bits ,então vou converter em uma tabela  todos os vetores

de 10 bits de decimal para binario e depois deslocar para a direita 8 vezes os bits

e ver qual o duty cycle do pwm ! depois que confirmar que  e´10 bits

vou controlar o duty cyclo com ifs e na entrada eu configuro os o AD do Pic! para receber os sinais dos sensores Hall eu apenas coloco alguns pinos como entrada digital e pronto  ,simples não ? kkkk ainda estou engatinhando ,  acho que vai dar certo! vou tentar colocar um especie de acelerador no codigo rsrs aceito sugestões

Link para o comentário
Compartilhar em outros sites

agora, aphawk disse:

@Mr.KOala ,

 

14 bits de PWM no Pic ?

Já fêz as contar para ver qual a máxima frequência que vai ter essa resolução?

 

Paulo

paulo voce me conhece das antigas sabe que eu nunca Matheus nunca  erra quando é sobre os timers dos pics  kkkkkkkk eu não tenho uma boa didatica mais serei breve ,de mente clara ,pretem atenção kkkk o meu ciclo de maquina é de 40 mega estou colocando tambem o pll junto ,  e o prescaler de 1:1 deu 100ns com um prescaler de 1:4 deu 400ns a cada 4 ciclos de maquina ocorre um incremento do time ,ate aqui estou dominando bem  rsrsr ufa kkk e a frequencia do pwm eu escolhi 39,3 Khz com a formula da resolução que isadora disse que preferia ter olhado no datashet em vez de calcular eu calculei e deu 10 bits pra você encontrar a formula da frequencia de pwm é simples

 

Tpwm = C.M*prescaler*postcaler*<PTPERH:PTPERL>

Tpwm= 100ns 1*1*255 =25,500us

Fpwm =1/Tpwm

Fpwm=1/25,500us

Fpwm=39,3KHz

eu quero um like kkkkkk

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Confuso e indeciso amigo... ndv pwm com deslocamento de bit. Vejamos...

Se o mc trabalhar com 8 e seu pwm tem 10 bits, geralmente é só questão de posicionamento dos bytes no registro algo como

//na maior largura = 1023 ou 0x3ff => 10 bits
H_byte_dutty_PWM=0x03; //nome do registro onde se localizam os 2 bits MSb
L_byte_dutty_PWM=0xff; //nome do registro onde se localizam os 8 bits LSb

por função:

setduttycycle(unsigned int ds)
{
L_byte_dutty_PWM=ds>>8; //* nome do registro onde se localizam os 2 bits MSb ... posição bits 1 e 0
H_byte_dutty_PWM=ds; //nome do registro onde se localizam os 8 bits LSb 
}
//* só um pouqinho a ver. De fato é só pra posicionar corretamente nos bits 1 e 0 mas 
//estes MSb poderiam estar em qualquer posição. Consulte o d.s.

Na maioria dos casos, pra girar motor bastam 8 bits de pwm o que torna o sistema mais rápido e otimizado pra mc de 8 bits

  • Haha 1
Link para o comentário
Compartilhar em outros sites

agora, Isadora Ferraz disse:

Confuso e indeciso amigo... ndv pwm com deslocamento de bit. Vejamos...

Se o mc trabalhar com 8 e seu pwm tem 10 bits, geralmente é só questão de posicionamento dos bytes no registro algo como


//na maior largura = 1023 ou 0x3ff => 10 bits
H_byte_dutty_PWM=0x03; //nome do registro onde se localizam os 2 bits MSb
L_byte_dutty_PWM=0xff; //nome do registro onde se localizam os 8 bits LSb

por função:


setduttycycle(unsigned int ds)
{
L_byte_dutty_PWM=ds>>8; //* nome do registro onde se localizam os 2 bits MSb ... posição bits 1 e 0
H_byte_dutty_PWM=ds; //nome do registro onde se localizam os 8 bits LSb 
}
//* só um pouqinho a ver. De fato é só pra posicionar corretamente nos bits 1 e 0 mas 
//estes MSb poderiam estar em qualquer posição. Consulte o d.s.

Na maioria dos casos, pra girar motor bastam 8 bits de pwm o que torna o sistema mais rápido e otimizado pra mc de 8 bits

so que se eu escolher com 10 bits o meu pwm ira fazer com que o motor bldc tenha menos vibrações indesejados e maior eficiencia e menos dissipação de calor! por que estou me aproximando imitando uma  onda sinusoidal! Ahannn rsrsr e os meus calculos estão corretos kkkkkkkkk os dois registradores de pwm desse micro que estou utilizando é de 14 bits no calculo isadora somente 10 bits estão sendo utilizados pic18f4431 ok?

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

... acho que depois de ler o d.s., fiz isso pra um pic16f628...

void duty(unsigned int dt)
{
CCPR1L=dt>>2; //MSB (byte + significativo)
#if !defined mikroc
CCP1Y=dt<<4; //LSB (bit4 pro CCP1Y)
CCP1X=dt<<5; //LSB (bit5 pro CCP1X)
#else
CCP1CON.CCP1Y=dt<<4; //LSB (bit4 pro CCP1Y)
CCP1CON.CCP1X=dt<<5; //LSB (bit5 pro CCP1X)
#endif
}

... e isso prum 16f876

void duty(unsigned int dt)
{
CCP1Y=CCP2Y=dt; //LSB (bit0 pro bit4 de CCP1CON)
dt>>=1;
CCP1X=CCP2X=dt; //LSB (bit1 pro bit5 de CCP2CON)
dt>>=1;
CCPR1L=CCPR2L=dt; //MSB (byte + significativo)
}

Se for forte, leia o d.s. e entenda bit a bit... Ou se for fraco, veja se seu compilador tem função pwm mastigada... continue fazendo parte da maioria...

  • Haha 1
Link para o comentário
Compartilhar em outros sites

agora, Isadora Ferraz disse:

... acho que depois de ler o d.s., fiz isso pra um pic16f628...


void duty(unsigned int dt)
{
CCPR1L=dt>>2; //MSB (byte + significativo)
#if !defined mikroc
CCP1Y=dt<<4; //LSB (bit4 pro CCP1Y)
CCP1X=dt<<5; //LSB (bit5 pro CCP1X)
#else
CCP1CON.CCP1Y=dt<<4; //LSB (bit4 pro CCP1Y)
CCP1CON.CCP1X=dt<<5; //LSB (bit5 pro CCP1X)
#endif
}

... e isso prum 16f876


void duty(unsigned int dt)
{
CCP1Y=CCP2Y=dt; //LSB (bit0 pro bit4 de CCP1CON)
dt>>=1;
CCP1X=CCP2X=dt; //LSB (bit1 pro bit5 de CCP2CON)
dt>>=1;
CCPR1L=CCPR2L=dt; //MSB (byte + significativo)
}

Se for forte, leia o d.s. e entenda bit a bit... Ou se for fraco, veja se seu compilador tem função pwm mastigada... continue fazendo parte da maioria...

muito bom ,esta correto os ifs é assim que pretendo fazer rsrsr mais estou utilizando apenas 10 bits o meu vetor so chega  ate 1022 em decimal ok? o calculo da frequencia do pwm que deu 39,3 Khz me permite 10 bits é isso!

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Mr.KOala disse:

so que se eu escolher com 10 bits o meu pwm ira fazer com que o motor bldc tenha menos vibrações indesejados e maior eficiencia e menos dissipação de calor!

 

Conceito físico errado, meu amigo ....

 

A vibração é devido 100% à frequência escolhida no PWM, a resolução não tem nada, mas nada mesmo, a ver com isso !

voce pretende controlar o seu motor em quantos níveis diferentes de potência ?

Com 8 bits você já tem 256 níveis, o que é mais do que suficiente para controlar !

Mesmo os ESC's usados em RC usam 8 bits, apenas os top de linha trabalham com 10 bits, e aí vem você e fala em 14 bits ?????????

A grande maioria dos Esc's trabalham com menos de 8 Khz de frequência....

 

Paulo

 

  • Haha 1
Link para o comentário
Compartilhar em outros sites

Em 17/09/2019 às 18:41, aphawk disse:

 

Conceito físico errado, meu amigo ....

 

A vibração é devido 100% à frequência escolhida no PWM, a resolução não tem nada, mas nada mesmo, a ver com isso !

voce pretende controlar o seu motor em quantos níveis diferentes de potência ?

Com 8 bits você já tem 256 níveis, o que é mais do que suficiente para controlar !

Mesmo os ESC's usados em RC usam 8 bits, apenas os top de linha trabalham com 10 bits, e aí vem você e fala em 14 bits ?????????

A grande maioria dos Esc's trabalham com menos de 8 Khz de frequência....

 

Paulo

 

Se a resolução não tem nada , mais nda aver com isso rsrsr então explique o de onda quadrada com pouca resolução pois o mesmo é puramente digital.

uma das desvantagem desse tipo de controle é produzir variações maiores de torque se comparado ao analogico(PWM)  e as perdas decorrentes a correntes parasitas nos rolamentos do motor são maiores  do mesmo modo que a dissipação de calor,ocasionando maiores vibrações e ruidos e contribuindo para diminuir a vida util do motor !

Link para o comentário
Compartilhar em outros sites

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...