Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
queirozfl

Programar PIC com C, assemble ou Basic?

Recommended Posts

Boa noite Amigos doidos de Forum.....rsrsrs

O Forum do Clube do Hardware é mais que um forum, é uma Familia.

Aprendemos muitas coisas legais com varios amigos inteligentes.

Vamos ao assunto.

Pessoal to querendo programar um PIC porém nunca programei um e não manjo nada de PIC, bom não posso dizer nada ando lendo bastante de PIC e as linguagens Basci, C e Assamble.

1º Gostaria de sabem qual a mais fácil ou a melhor linguagem para eu programar. Eu estou estudando assemble por causa da base e pretendo programar com Basic achei mais fácil do que C. Como eu ja programei em outra linguagem de alto nivel Orientada a Objeto, tais como java, php e asp, eu percebi que o basic tem uma semelhança com asp.

porém eu estou com algumas duvidas e não achei nenhuma apostila ou tutorial que me tire essas duvidas.

mais tenho algumas duvidas tipo que seria ACC, CJNE, LCALL, SJMP etc.. essas comandos eu não achei em nenhum livro. Eu peguei para ler o "Laboratorio de Microcontroladores Familia 8051" para ter uma ideia do assemble.

As logicas eu entendi fácil sa chamadas de função não é dão difícil.

Se alguem poder me indicar um livro bom de basic para PIC ou alguma apostila.

Não estou tão perdido, só preciso achar o caminho certo que eu me acho fácil.

O programa que quero fazer é simples, para ligar e desligar porta logica do PIC, mais quero ligar ex a port A com uma seguencia nas portas de entrada exemplo:

Para ligar a porta A eu preciso ligar a entrada A + B juntos depois c + a, que seria dois comandos em binarios 0011 e 0101. Mais precisa quero criar uma seguencia para cada porta. Eu tava pensando em uma logica tipo de CASE com varios CASE. Mais depois eu pensei o seguinte imagina que eu crio uma sequencia A somente 0001 para ligar uma porta x e tambem crio uma seguencia B 0001, 0101 para ligar uma porta y. Mais se for em case quando eu digirar 0001 ele ja liga a porta x.

Alguem tem ideia ou pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi amigo, Da uma olhada aqui:

http://forum.clubedohardware.com.br/pic-iniciando-basico/611417

Se você usar este compilador (grátis) e se esforçar aprende rapidinho...

e no caso do BASIC os comandos na maioria já vem em bibliotecas...

Estava esquecendo...chequei a comprar um livro para BASIC e tive uma decepção

pois nada era que a tradução do Help do compilador Microe-basic

Tudo bem que tinha lá uns exemplos a mais, porém nada que não se aprende sozinho

voce vai se dar muito bem com este compilador, eu adorei e olha que eu só sabia usar if e and's no access

Abraço Ps: não deu pra entender seu raciocínio nas portas explique com mais detalhes.

Editado por cavalodf

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Oi amigo, Da uma olhada aqui:

    http://forum.clubedohardware.com.br/pic-iniciando-basico/611417

    Se você usar este compilador (grátis) e se esforçar aprende rapidinho...

    e no caso do BASIC os comandos na maioria já vem em bibliotecas...

    Estava esquecendo...chequei a comprar um livro para BASIC e tive uma decepção

    pois nada era que a tradução do Help do compilador Microe-basic

    Tudo bem que tinha lá uns exemplos a mais, porém nada que não se aprende sozinho

    voce vai se dar muito bem com este compilador, eu adorei e olha que eu só sabia usar if e and's no access

    Abraço Ps: não deu pra entender seu raciocínio nas portas explique com mais detalhes.

    Amigo obrigado por responder, eu ja tinha dado uma lida nesse topico mais não cheguei a testar o compilador... acabei de baixar ele.

    Sobre a logica é o seguinte

    Vou usar 4 portas de entrada e 8 portas de saida no PIC.

    para ligar uma porta x do pic eu quero fazer uma combinação com as portas de entrada, exemplo:

    Preciso mandar sinal na porta 1 e 2 ao mesmo tempo depois 2 e 3 ao mesmo tempo, para ligar uma porta x de saida.

    mais eu não tenho nem ideia porque imagina q eu crio uma seguencia paracida só que com o final diferente, ele pode ligar um porta antes.

    então eu tava pensando em aguma coisa tipo para comçar o programa. tipo eu ligo as porta de entrada 1,2,3,4 ai ele entra em modo de leitura e eu faço a combinação depois eu mando de novo 1,2,3,4 para finalizar a combinação

    eu imaginei ter os botões 1,2,3,4 e um botão para todos de uma vez...

    as combinações seriam feitas por botões!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Entre essas linguagens eu sugiro que você use aquela que entender melhor...

    O basic é mais fácil de início pois você irá errar menos a sintaxe na hora de compilar, o C tem tantos ; e {} que você poderá passar horas procurando pelas falhas... bem chatinho de início.

    Assembler... não vou dizer que é fácil ou é difícil... o assembler geralmente vai necessitar de muito trabalho, para o iniciante poderá ser algo de horas programando o que alguém experiente faria em alguns minutos, então se você não tem muita experiencia com lógica de programação vai ter um trabalho aí (e consequentemente irá aprender lógica eheheheh). O problema dele é a quantidade limitada de funções, então para fazer qualquer coisa um pouco mais complexa como uma diferenciação ou uma divisão você vai precisar criar isso usando apenas soma, subtração e "se for 0" "se não for 0"...

    Eu comecei com Assembly, passei para o Basic e agora só trabalho com C.

    Minha sugestão - Basic...

    quanto a seu programa, escreve melhor o que ele deveria fazer ;)

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Amigo conseguir fazer varios algoritimos, mais estou apanhando de um aqui e acho que é coisa boba.

    ve se alguem consegue me ajudar no codigo

    program Led_Sequencial

    dim led1, led2, led3, led4, led5, led6, led7, incre, decre, botao1, botao2 as byte

    dim cont as integer

    trisb=0

    trisa=1

    cont = 500

    led1=portb.0

    led2=portb.1

    led3=portb.2

    led4=portb.3

    led5=portb.4

    led6=portb.5

    led7=portb.6

    botao1=porta.0

    botao2=porta.1

    incre=porta.2

    decre=porta.3

    sequencia1:

    led1=1

    delay_ms(cont)

    led1=0

    if (incre=1) then

    cont = cont + 100

    end if

    if (descre=1 then

    cont = cont - 100

    end if

    goto sequencia1

    O erro é na variavel "cont" ele não aceita no delay_ms essa variavel, ja tentei colocar de varios tipo e não consigo, outra coisa tambem é o IF ele não incrementa ele da um erro e não faz a soma que eu quero....

    o algorito é fara fazer led piscar, vão ter 4 botões, 2 para controlar a velocidade do pisca, os outros 2 cada um uma sequancia diferente. esse é só o começo, é onde estou com dificuldades.

    eu ja crisei symbol cont = 500

    ai ele aceita no delay_ms(cont)

    mais não da para mudar o valor da variavel...

    aguem tem ideia?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caro queiroz,

    porque você declarou sua variavel CONT como INTEGER?

    Integer permite você uma faixa que vai de: -32768 à 32767 (16bits)

    O delay nao aceitaria valores negativos certo?

    Já tentou declarar como WORD( 0 - 35536)?

    COnfere se isso muda alguma coisa meu caro.

    Sucesso.

    Abração,

    R.Costa.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Caro queiroz,

    porque você declarou sua variavel CONT como INTEGER?

    Integer permite você uma faixa que vai de: -32768 à 32767 (16bits)

    O delay nao aceitaria valores negativos certo?

    Já tentou declarar como WORD( 0 - 35536)?

    COnfere se isso muda alguma coisa meu caro.

    Sucesso.

    Abração,

    R.Costa.

    ja e tambem não deu.

    eu declarei integer porque deduzi que seria inteiro, em outras linguagem é assim, como eu estou programando em basic só pelo conhecimento que tenho em outras linguagem ai sempre da essas travadinhas ai... até agora eu não achei nenhuma apostila de basic legal, mostrando como declara as variaveis, cria vetores e pilhas, se é que o basic da esse suporte.....

    então tambem não consegui com word

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    digam .o queirozfl quer fazer o que eu tinha pedido em outro topico.

    que é montar o sequencial de led ,mais com controle de velocidade ,então eu comentei sobre a dica que você deu digam de fazer varias rotinas .uma com delay de 400 outra com delay de 600 e colocar os switch de incrementar e de decrementar para selecionar essas rotinas e assim consequentemente mudando a velocidade da sequencia ..mais ae que o bicho ta pegando . para selecionar as rotinas ..

    bom eu to acompanhando aqui de pertinho, até porque eu também to fuçando o programa aqui .

    mais to no mesmo erro que o felipe qualquer ajuda sera bem vinda ..

    abraços

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Opa meu amigo Danilo!!

    Pois é meu caro, estou notando essa dificuldade do amigo queiroz, que agora to sabendo está batalhando contigo nessa!;)

    Enfim, to aqui pra ajudar no que me for possivel, uma vez que vocês sabem também que ainda não passo de um aprendiz ("de meia tijela" hihihi) no mundo dos MCUs e BASIC como linguagem escolhida.

    Agora, amigo queiroz, SERÁ que se você declarasse CONT como CONSTANTE ao invés de VARIAVEL não resolveria esse problema? Eu estava aqui estudando e aproveitando pra "pensar" no problema que você esta passando ai na programação também e sendo assim, lembrei disso. Agora, desconsidere a minha ideia de declarar CONT como CONSTANTE se você realmente quiser que o CONT varie de valor com o programa rodando!!! Isso porque quando é constante, como você já deve saber tb, o valor dessa constante não pode sofrer qualquer alteração no programa já rodando!:rolleyes:

    Enfim, se já conseguiu a solução, poderia nos mostrar?

    Se ainda não conseguiu, aí fica mais uma ideia! E informo a vocês que continuarei a analisar e estudar quando estiver em casa.

    Grande Abraço Pessol!

    R.Costa.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Grande Danilo está em todas em..

    então o unico problema é a chamada da função delay_ms() o resto ja esta todo na cabeça a logica...

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Caro queiroz...

    Mas você quer mesmo que o valor de CONT seja variável (mude) no meio do programa rodando? Senão, tenta declarar o CONT no inicio do programa como uma Constante. E depois tenta compilar! Vê se algo diferente acontece.

    Sucesso.:)

    R.Costa.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Opa meu amigo Danilo!!

    Pois é meu caro, estou notando essa dificuldade do amigo queiroz, que agora to sabendo está batalhando contigo nessa!;)

    Enfim, to aqui pra ajudar no que me for possivel, uma vez que vocês sabem também que ainda não passo de um aprendiz ("de meia tijela" hihihi) no mundo dos MCUs e BASIC como linguagem escolhida.

    Agora, amigo queiroz, SERÁ que se você declarasse CONT como CONSTANTE ao invés de VARIAVEL não resolveria esse problema? Eu estava aqui estudando e aproveitando pra "pensar" no problema que você esta passando ai na programação também e sendo assim, lembrei disso. Agora, desconsidere a minha ideia de declarar CONT como CONSTANTE se você realmente quiser que o CONT varie de valor com o programa rodando!!! Isso porque quando é constante, como você já deve saber tb, o valor dessa constante não pode sofrer qualquer alteração no programa já rodando!:rolleyes:

    Enfim, se já conseguiu a solução, poderia nos mostrar?

    Se ainda não conseguiu, aí fica mais uma ideia! E informo a vocês que continuarei a analisar e estudar quando estiver em casa.

    Grande Abraço Pessol!

    R.Costa.

    ainda não consegui a solução, ta meio difícil, mais vou testar como uma contante

    Editado:

    Amigos consegui resolver o problema, agradeço a todos.

    resolução:

    para usar uma variavel no delay_ms()

    precisa usar o "Vdelay_ms(cont)"

    funcionou de boa.......

    o codigo ficou assim!

    led1=1

    Vdelay_ms(cont)

    led1=0

    if (incre=1) then

    if (cont>0) and (cont<=900)then

    cont = cont + 100

    end if

    end if

    if (decre=1) then

    if (cont>=200) and (cont<1000)then

    cont = cont - 100

    end if

    end if

    Editado por queirozfl

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    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

    ×