Ir ao conteúdo
  • Cadastre-se

Felipe Electronic

Membro Pleno
  • Posts

    3.312
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de Felipe Electronic em Array de Struct - C++ foi marcado como solução   
    O Colega acima ja respondeu. Ambas as formas são válidas do ponto de vista de OBEDECER A SINTAXE da linguagem, do ponto de vista de desenvolvimento vai depender muito mais da aplicação de das restrições de alocação de memória que você tiver, por exemplo ao usar o operador new, a memoria alocada vem de uma região chamada heap, e mesmo que você aloque memoria dentro de uma função, com o new, sem dar delete depois do uso aquela memoria ficará alocada e sem condições de ser reutilizada, sendo de um modo geral pouco recomendado o seu uso (existem momentos certos para o uso de alocação dinamica com o new/delete mas foge ao escopo do topico).

     
  2. O post de Felipe Electronic em Duvida com programação em assembly para pic foi marcado como solução   
    é esse tipo de comentário que acaba com a credibilidade do fórum. Inclusive se a turma do assembly ler isso...
     
     
    @Vicente Cesar, para resolver suas dúvida existe mais de um caminho, o dito timer que você aparenta querer,  é o famigerado delay,  aquele que você especifica quantos segundos o programa deve aguardar para continuar operando, embora seja umas solução simples ela peca pelo fato da CPU ficar parada enquanto o tal delay aguarda e você fica impedido de realizar alguma outra tarefa, para tal existem formas mais sofisticadas baseadas em callbacks, onde você pode guardar o par PC:PCLATH  e desviar o fluxo do programa de forma temporária, quando o timer estourar...a propria subrotina faz um "pop" desse par e o prgrama retorna da onde parou. Para tal preciso de mais informações, então vou admitir que queira a solução mais simples.
    Veja esse simples delay:
    cblock 0x20 ;area de variaveiscontadorSegundoscontadorMiliscontadorBaseintconTempendc;; DelayBase; Essa funcao executa um delay em base de tempo de 10ms;DelayBase: movlw .100 ; movwf contadorMilis ; movlw .249 ;valor empirico para delay preciso de 1ms a 4MHz movwf contadorBase ;DelayBaseLoop: clrwdt ; + 1cy decfsz contadorBase,f ; + 1cy goto DelayBaseLoop ; + 2cy decfsz contadorMilis,f ; cada vez que chegar nesse ponto ; significa que se passou 1ms goto DelayBaseLoop-2 ; return ;;; DelaySegundos; Essa funcao faz a CPU ficar parada por N segundos ate um maximo de 25; onde para cada segundo deve ser passado um valor igual a 10; obs o parametro deve ser passado em wDelaySegundos: movwf contadorSegundos movf INTCON,w movwf intconTemp ;salva contexto fazendo push em intcon bcf INTCON,GIE ;derruba interrupcao call DelayBase ;delay de 10ms decfsz contadorSegundos ; goto $-1 ;repete ate zerar o contador movf intconTemp,w ; movwf INTCON ;restaura interrupcoes return ;  Usando:
    ;; Seu código...;movlw .10call DelaySegundos ;fica travado aqui por 1 segundo;; continue seu codigo;  De mais detalhes para sabermos se outras aproximações podem ajuda - lo melhor.
    Abs.
  3. O post de Felipe Electronic em O que quer dizer isto? foi marcado como solução   
    Didaticamente:

    0xFFFF =    0xFF00 |  0x00FF,

    Especificamente o "|" significa um bitwise or, ou seja faz or entre todos os bits, para formar a variavel de 16 bits.

    Especificamente no seu caso, voce le o valor do accel em dois bytes, e precisa formar uma variavel unica de 16bits, para tal a primeira leitura que contem o byte mais significativo é deslocada para os 8 bits superiores usando um shift por 8 ( << 8), ao fazer isso voce adiciona tambem 8 zeros aos bits menos significativos, ao tomar a segunda leitura, voce deve juntar a parte baixa ao resultado, como nos bits inferiores so temos zeros e pela algebra de boole:

    A or 0 = A (onde A é uma variavel qualquer)

    fazemos simplesmente uma or entre esses zeros e o valor, montando seu resultado em 16 bits. Veja que tambem uma soma poderia ser usada também, pois é analogo a uma soma decimal.

    espero que esclareça.

    Abs.

     
  4. O post de Felipe Electronic em [urgente] erro de simulação no proteus 8 foi marcado como solução   
    Como diz o datasheet:
    http://www.nxp.com/documents/data_sheet/HEF4518B.pdf
    Essa criança ai só conta em BCD, ou seja voce nao conseguirá valor maior que 1001 (ou seja '9'). Talvez você deseje um 4511,mas ele apenas decodifica os 4 bits da contagem para exibição no display, ainda precisaria de um contador... Faça o teste, datasheet aqui:
    http://www.nxp.com/documents/data_sheet/HEF4511B.pdf
     
    Em tempo, para o contador, use um 4017, e manipule suas saidas de acordo com a sequencia desejada:
    http://www.ti.com/lit/ds/symlink/cd4017b.pdf
    Abs.

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