Ir ao conteúdo
  • Cadastre-se

Felipe Electronic

Membros Plenos
  • Total de itens

    9.922
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

160

1 Seguidor

Sobre Felipe Electronic

  • Data de Nascimento 3 de março

Informações gerais

  • Cidade e Estado
    Campinas
  • Sexo
    Masculino

Outros

  • Biografia
    Eng Elétrica, Mestrado em engenharia de controle.
  • Ocupação
    Engenheiro de firmware
  • Interesses
    De tudo um pouco :)
  1. @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
  2. @luizfelipecss, cara muito legal essas launchpad C2000, eu particularmente adoro essa familia de MCU com cara de DSP da TI, com qual familia está mexendo? Delfino ou Piccolo? Uma coisa que gosto de fazer com esses micros é não perder tempo codando em C, mas programar utilizando modelagem, como por exemplo o embedded coder do MATLAB que consegue gerar a firmware para os C2000 direto de modelos do simulink com simulação (e plottings em tempo real!), vale a pena dar uma conferida. Curiosidade, qual o proposito do conversor boost + controle PI? considerou utilizar compensadores como 2P2Z?
  3. @Paola Costa, tudo bem? Que tal começar dividindo seu problemão em problemas menores? Veja sua coqueteleira precisa: 1 - Receber o comando para fazer um drink; 2 - ler o sensor de posição para saber debaixo de qual garrafa está; 3 - planejar o movimento do servo para acessar as garrafas desejadas; 4 - comandar o motor ate a garrfa desejada ou seja : 5 - aciionar o motor ate que o sensor da garrafa desejada acione; 6 - abre a valvula por n segundos; 7 - repetir 4, 5, 6 até passar por todas as garrafas desejadas 8 - mover o drink para ser retirado e aguardar novo comando.. Tirando os problemas especificos de ler sensores e comandar botões percebe que a logica ai resume o funcionamento do seu tcc e cada passo se traduz em uma função? Agora conta pra gente o que voce consegue ler e comandar com seu PIC atualmente
  4. Esse problema tem algumas diferentes formas de se resolver, um meio fácil seria concatenar o nome da pessoa a um nome de arquivo comum, por exemplo cadastro_joao, cadastro_maria, isso pode ser feito sem dores usando a função strcat() (de string.h) que concatena duas strings, com resultado do strcat tu abre / cria um arquivo com a string resultante, o problema dessa solução é que dois nomes iguais podem gerar arquivos iguais, sendo uma outra opção incrementar um contador interno (salvo em outro arquivo) e adicionar ele no nome do arquivo, depois disso incremente-o. Links para ajudar com strcat: http://www.cplusplus.com/reference/cstring/strcat/
  5. Temos alguns problemas de formulação na sua solução: 1 - para printar os 10 ultimos valores do vetor, é necessário que o vetor tenha size = 10 pelo menos, seria legal checar os parametros da função antes de começar, caso contrario voce pode gerar um buffer overflow e crashar seu programa; 2 - entendi o fato de usar um pointeiro para o vetor, ok, super valido, mas por que o tamanho vocês está passando via vetor? porque não um int mesmo contendo o tamanho do vetor? 3 - A tua função não funciona para vetores maiores que 10, o ideal seria obter o tamanho do vetor, subtrair 10, e incializar o teu for com valor dessa subtração, afinal voce só quer os 10 ultimos. Existe uma ordem especifica para apresentar os valores no console?
  6. Pelo code style me parece que você está a usar a famigerada API do windows certo? Um ponto é que vai ser meio difícil mexer com esse bicho ai sem entender os fundamentos de como acessar um device no windowss sugiro começar pegando a documentação da função, isso pode ser facilmente feito pesquisando diretamente pelo nome dela, segue o link: https://docs.microsoft.com/en-us/windows/console/readconsoleinput Esse loop ai fica esperando que 1 elemento do tipo de ir_func seja recebido pelo stdin, que geralmente é o console do windows (e não o mouse) essa função é blocking, ou seja, ela vai entrar ai travar e só sair ao receber o evento de recepção de 1 ir_func, quando ela sai invoca a função coordenada de acordo com retorno da função de console pra finalmente entregar esse valor em bl_func. O codigo acima ta com contexto vago, o ideal seria tu postar o que quer e esse codigo que tu achou todo, pra melhorar a qualidade do help. Abs.
  7. VERDADE! isso que da ficar muito tempo sem mexer com CPP, o veio aqui perdeu a mão Acho bem curioso o fato do struct e o class serem iguais apenas mudando seus defaults, no struct é tudo publico no class tudo privado, me parece questão de semântica (ou legacy do C)
  8. Isso, o Arduino não é só para aquele cara que quer um projeto rápido, é também para o iniciante mais curioso, a quantidade de coisa desenvolvida e validada pela comunidade é enorme, além disso o ecossistema tem vários sabores, com várias particularidades mas tudo sempre usando as Arduino core libraries, se achar ruim tu pode programar em C ou mesmo em inline assembly, o Arduino não impede você disso o que faz dele digamos assim bem elástico, seja você iniciante ou não. Esses dias mesmo recebi um Arduino Vidor, que é constituido de um ARM e uma FPGA e advinha, você pode sair fazendo hardware programável ou... usar esse canhão com as core libraries do Arduino e ter seu projetinho rodando sem lag. Arduino pelo que ando vendo vai continuar sendo a grande porta de entrada no mundo de sistemas embarcados. "Ah mas arduino não é coisa de profissional com aquele software e memememememe" - Pra quem pensa esse tipo de coisa, da uma olhadinha aqui no Marlin Firmware, um controlador completo de impressão 3D que... roda num AVR de 8bits! https://github.com/MarlinFirmware/Marlin
  9. @Isadora Ferraz, tem até distribuidor oficial nacional dos chips das Espressif, a Intel ta usando uma variante do core deles (o Tensilica) como base para processador de Audio HIFI. Segue link do distribuidor BR (e é distribuidor bão): http://www.macnicadhw.com.br/produtos/semicondutores
  10. Na verdade até da pra fazer fora da main, em C++ até os construtores invocados rodam código fora da main sem aparente definição de função (tem a mágica do startup code ai, mas isso eh outra história), bastaria fazer um early initialize assim; struct ab { string nome }; struct ab x[5] = {{"fulano"}, {"siclano"},{"nomefeio"}, {"nomebonito"}, {"bla"}}; Além disso faltou o struct antes do x, o erro de typename está ocorrendo porque "ab" não é um tipo, "struct ab" é um tipo, toda variavel deve ser precedida atraves de um tipo valido ou uma struct, alternativamente daria pra fazer com typedef (pouco recomendado) para voce declarar x sem o struct ab: typedef struct { //Seliga no typedef ali string nome } ab; //e se liga que o ab veio pra frente //agora sim, ab sem o struct. ab x[5] = {{"fulano"}, {"siclano"},{"nomefeio"}, {"nomebonito"}, {"bla"}}; Divirta-se
  11. Acho que os colegas ja responderam com os investimentos, deixe - me complementar apenas com uma coisa algo que me chamou a atenção sobre o fato de algo que vai durar na sua experiência. Foque nos conceitos e não no dispositivo, usar PIC, AVR, ST ou mesmo Arduino vão te levar a praticamente aos mesmos caminhos com pequenas diferenças em termos de dificuldade e produtividade, ao começar no mundo dos sistemas embarcados você sempre vai precisar entender um pouquinho de aspectos de dispositivo de forma genérica, Ex.: Um periferico de timer é praticamente o mesmo independente do device, foque em entender como ele funciona, programar é o de menos, as API fornecidas pelo Arduino ou as HALs (peças de código que abstraem o baixo nível) podem fazer o trabalho duro de lidar com as diferenças específicas de cada plataforma. Dito isso, eu começaria sim pelo Arduino pela agilidade na assimilação de conceitos e ver funcionando, aproveite essa experiência para aprender a fazer projetos com a firmware portável, acredite nenhum ambiente é mais propicio pra te ensinar portabilidade de firmware do que Arduino, com seus projetos portáveis, foque em testar em MCU que tenham periféricos que não existam na sua Arduino, por exemplo microcontroladores ST com periferico de display gráfico, ou MCUs da TI que possuem aqueles PWMs maravilhos de altissima resolução para motores. E não menos importante: C ou Assembly? Ambos! E Basic, e Java, e C++, Python, o que vier, cada linguagem ensina um paradigma diferente na hora de abordar seu projeto, e quanto mais você as conhece mais consegue implementar as particularidades de cada linguagem para resolver uma limitação que outra tem... Por ora é isso, qualquer coisa, pergunta ae.
  12. @aphawk, é bom estar de volta. Nada, dropei o doutorado depois de 2 anos, cansei dessa vida, quero mesmo passar o tempo fazendo meus projetinhos pessoais e ganhando a vida com o que der. Falando de ensino, nos ultimos anos em que estive fora muita coisa aconteceu na vida profissional que me abriu demais a mente, e hoje entendo perfeitamente algo que li seu: "Não importa a cor do gato, desde que coma o rato". Em Basic, C, Java, Javascript (atenção pra esse novo queridinho que ta rodando em tudo que é microcontrolador), não importa a linguagem as dúvidas estão residindo nos conceitos e é como voce bem disse acima, eu ando mais preocupado em compartilhar ajuda na forma de conceito do que código pronto (ou solução pronta). Aliás: Basic é muito legal, só pra constar viu. C virou coisa de velho também, C++ ainda tá meio obscuro, mas pra PIC acho que programar em qualquer coisa serve e resolve, aquelas falácias (muitas ditas por mim) sobre processamento, PIC não aguenta, otimização, mano, se quiser desempenho muda de processador, até onde? até onde seu bolso der No mais é bom estar de volta, espero conseguir somar com você e o time que tomou conta daqui. Abs.
  13. como mencionado pelo @isrnick, isso está acontecendo pois o compilador entendeu que independente de colocar o incremento ou simplesmente atribuir o valor, o resultado será o mesmo, assim ele sempre vai partir pra abordagem de reduzir o número de instruções para um mesmo resultado, é a chamada otimização, que por default (considerando um GCC) é -O3 que sai otimizando tudo que ele achar redundante.
  14. @wBB, tudo bem? Minha sugestão é que remova o pull-up/down, a 485 é um barramento de comunicação diferencial, ou seja para geração dos simbolos (bits), diferentemente de uma UART comum, ela não considera VCC, 0V, mas sim a diferença de tensão entre A e B, o seu problema pode estar ocorrendo pela falta do resistor de terminação entre essas linhas (tipicamente 120R, mas atenção esse valor deve ser usado apenas para testes, a versão final você tem que adicionar esse resistor baseado no tamanho do cabo, número de nós e impedância desejada no barramento 485), remova os resistores e coloque dois resistores entre A e B nos dois extremos da linha (receptor e transmissor) e refaça os testes, do jeito que seu circuito está os diferenciais de robustez que a 485 oferecem não irão aparecer (sendo melhor usar a UART). Ah, tipicamente uma 485 é Half Duplex, não esqueça disso, você precisa controlar o fluxo de meensagens tanto no no D quanto no R para evitar colisão de pacotes.
  15. Tenho a impressão que tu clonou o código da @Isadora Ferraz, sem adaptar pro teu projeto De exemplo da solução acima, tu pode criar uma função estilo display_write() e internamente mapear bit a bit em o byte a ser escrito, pergunta, estamos falando de vários displays(aka multiplexação)?

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

×