Ir ao conteúdo
  • Cadastre-se

PIC - Iniciando pelo basico atraves do BASIC


cavalodf

Posts recomendados

  • 3 meses depois...
aphawk amigo ve se pode me ajudar, estou postando esse codico:

program logica

symbol botao=portb,o

symbol botao1=portb,1

symbol led =portb,2

main:

cmcon=7

trisb=%00000011

if portb.0 and portb.1=0 then

setbit (portb,2)

else

clearbit(portb,2)

goto main

end if

end.

quero fazer o seguinte, somente quando eu apertar os dois botões juntos que o led acende, tem como?

ja joguei a toalha.

Link para o comentário
Compartilhar em outros sites

Bom, pelo que vejo, ainda não postou as perguntas no tópico adequado.... mas vamos tentar :

1 - Supondo que quando voce aperta o botão, o nível da entrada correspondente vá para zero, certo ?

Crie uma variável adicional do tipo BIT e use ela para fazer o seu teste lógico.

Não sei se isto vai funcionar como escreví no seu Basic, mas dá para voce alterar para a sintaxe correta, o importante é a ideia.

Mude para algo assim :

program logica
symbol botao=portb,o
symbol botao1=portb,1
symbol led =portb,2
dim var1 as bit

cmcon=7
trisb=%00000011

main:
var1 = botao OR botao1

if var1=0 then
setbit (portb,2)
else
clearbit(portb,2)
goto main
end if
end.

Evite fazer testes lógicos complicados em um comando IF, tem horas que dá certo e tem horas que não dá .... agora, do jeito que eu fiz, usando ANTES uma variável, e testando o resultado dessa variável, SEMPRE dá certo, ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

Evite fazer testes lógicos complicados em um comando IF, tem horas que dá certo e tem horas que não dá ....

Paulo

Oi Paulo.

Não concordo que testes lógicos dentro de "if's" não funcionem. Nunca me deparei com tal situação depois de adquirir experiência. As versões do mikroC mais novas (pro), são tão poderosas em otimização de código, tipo: mudar o estado de um único bit em um registrador, as vezes podem dar tais problemas, nunca encontrei.

Se você programa em assembly, veja como o mikroC (Pro 4.15) testa a sentença:

if (!botao && !botão1) e comente para nós.

O grande problema na maioria dos casos, é que o projetista quando não experiente em lógica, "acaba se perdendo" e comete alguns pequenos erros.

Quando começei, tropeçava em "ponto e vírgula".

Depois de estudar muita lógica, ficou simples evitar tais situações.

Antes fazia operações de deslocamento para mudar valores de bits unicos (segundo algumas literaturas em linguagem C, tem o mesmo poder que o assembly), hoje não tem necessidade, e já estou enferrujando nisso ^_^.

Caso eu encontrar um problema neste sentido, podemos discutir novamente.

Por hora, minha opinião.

Saudoso abraço.

Link para o comentário
Compartilhar em outros sites

Oi Shunt,

Não programo em Assembly nem de PIC nem de AVR, e nem em C. Mas já programei muito em Assembly para 8080, 8086, 8088, 80286, 80386, Z-80 e 6502. Hoje, estou velho demais para mais um assembly ....

Mas programo hoje em Basic, e os testes que fiz tanto no MikroBasic como no PSI e também no BASCOM, mostram várias situações onde a compilação gera um resultado diferente do que o que deveria.

Não é uma questão de aprendizado, experiência ou ter grande experiência em Lógica. É uma questão de COMPILADOR !

Você está falando em C, e o exemplo do nosso amigo MA2008 está em Basic !

EU fiz um projeto para gravar módulos de memória DDR2 , dessas que usamos nos nossos microcomputadores, o programa em Basic tinha mais de 1300 linhas e não dava certo, e eu fiquei mais de 10 dias tentando achar o erro, que finalmente encontrei EXATAMENTE em um teste semelhante ao que o MA2008 usou.

Depois, fazendo o tutorial para AVR, encontrei uma situação mais estranha, dependendo de como eu declarava as variáveis, o comando IF funcionava ou não !

Agora, se coloque no lugar de quem, como eu, tenta mostrar as maneiras mais simples de se conseguir fazer um programa.

Ficar dizendo que o comando IF funciona dependendo de uma série de variáveis que só a experiência pode ensinar, ou "contornar" a situação, ensinado a primeiro gerar o resultado lógico em uma linha anterior e simplesmente fazer o teste bem simples em um IF ?

E outra coisa, existem erros de compilador, mas também existem erros no hardware das CPU's, que matam qualquer programa ! Não é o caso aqui, mas vou lhe relatar algo interessante :

Olha, eu encontrei em 1990 um erro não documentado dos processadores Intel família I286 e I386, e programava em Assembly com o TASM da Borland, que era fantástico e com um simulador muito poderoso; o próprio simulador fazia a sequência correta, mas a CPU fazia errado... era uma sequência de operação que dava um erro muito esquisito, dependendo de uma operação que era feita 4 instruções antes, uma simples instrução que testava se o acumulador era zero dava errado, eu carregava o conteúdo de uma posição de memória e testava se era zero. Mesmo quando era zero, a CPU agia como se não fosse ! Pior que se alterava as outras 2 instruções intermediárias, o erro desaparecia. Sabe qual o intuíto das instruções intermediárias ? Zerar o par DE de reistradores...

Depois disto, começei a pesquisar e descobrí que existiam vários erros desse tipo, que ocorriam conforme a revisão do hardware das CPUS... Mas o erro que eu achei não estava documentado em nenhum lugar.

Algum tempo depois, houveram indícios que dentro do Excel existiam casos de erros estranhos de cálculo, e os erros erram diferentes conforme a família do microprocessador. Logo depois, os erros foram resolvidos, através de rotinas específicas para cada tipo de processador ! voce deve saber que o Excel era escrito em C e seus descendentes, mas como o erro era independente do compilador, o jeito era apelar para rotinas condicionais de cálculo.

Se voce está usando o MikroC e não encontrou nenhum erro estranho, ótimo !

Mas lhe garanto que no Basic existem vários erros esquisitos !

Porisso que prefiro ensinar a não fazer uma expressão que deve ser calculada antes , dentro de um teste do tipo IF, pelo menos em Basic. Não custa nada fazer essa expressão em uma linha ANTES do teste IF.

Aliás, só para voce ter uma ideia, saiu uma nova versão do MikroBasic 2010 para os AVR's, e eu testei ela na semana passada; fiz um programa simples utilizando I2C e serial, que não funcionava de jeito nenhum, e após ler o Fórum de suporte, desistí de continuar, devido a grande quantidade de pessoas perguntando o porque que alguns programas aparentemente corretos não davam o resultado desejado. Já bastou eu ter de ficar aprendendo o que funciona e o que não funciona no PSI e no Bascom !

O meu ponto é este : quantos usuários tem o MikroC e quantos usuários tem o MikroBasic ????? Claro que o MikroC tem de ser mais debugado do que o MikroBasic. Hoje em dia, devem ter uns 100 usuários de C para cada usuário de Basic hehehehe !

Me desculpe se dei a entender que os IF não funcionam em qualquer tipo de linguagem ou de compilador, eu me referia apenas ao uso em Basic, ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

Ok, Paulo. Disse somente minha opinião ^_^

Pelas datas que cita, vejo que tem muito mais tempo nisso que eu.

Olha só, aprendi programar estes microcontroladores, sozinho.

Tentei o assembly, depois o C, depois o Basic e não tive nenhum resultado.

Aprendi ouvir os mais experientes. Quando então um certo dia me disseram que se realmente quisesse dominar a máquina, primeiro deveria saber o que tem dentro dela. Bem ... foi o que fiz ... continuei com o C e faço algumas coisas em assembly direto dentro do código em C.

Me dei bem com o mikroC. Porém o CCS é muito bom também.

Alguns reclamam das bibliotecas do mikroC serem fechadas. É só pegar as do CCS e modificar para o mikroC.

Outro compilador não muito famoso, é o boostC, mas extremamente poderoso em otimização.

Conheço excelentes programadores. E muitos dizem do Basic a mesma coisa que você, algumas vezes acontece algo sem explicação.

O que passei foi um exemplo em C mas disse para ver como poderia ser convertido para basic.

Muito interessante seus comentários, agradeço a contribuição.

Saudoso abraço.

Link para o comentário
Compartilhar em outros sites

Shunt,

Parabéns pelo seu empenho, conseguir chegar aonde voce chegou, sendo auto-didata nesse tipo de programação, realmente é de se admirar !

E com certeza, eu também faço parte do mesmo coro : SEM ENTENDER PARA QUE SERVE O QUE TEM DENTRO DE UM MICROCONTROLADOR, É MUITO DIFÍCL PROGRAMAR , SEJA A LINGUAGEM QUE FÔR !

Pelo que eu leio nos fóruns, o MikroC é muito bom, este foi o motivo de me animar e testar o novo MikroBasic 2010 para AVR's. Mas ainda não é um produto maduro, vou esperar mais algumas novas versões e depois testo novamente.

E sua opinião vale muito , meu amigo, o que vale é sempre mostrarmos algo de útil para quem está lendo nossas postagens, certo ?

Quanto ao Basic, concordo com o pessoal mais experiente, algumas coisas acontecem quando NUNCA deveriam acontecer... o motivo de eu estar me aprofundando no BASCOM é justamente pelo fato dele ser bem antigo e teóricamente muito maduro, mas mesmo assim existem erros que foram corrigidos no passado e de repente reaparecem numa nova versão do compilador.

Mas uma coisa eu posso garantir : para quem compra o programa, o suporte é muito bom, as atualizações são bem frequentes, e sempre que aparece um erro identificado todos os usuários registrados acabam sabendo.

Infelizmente, o mesmo não acontece com a versão pública, que continua sendo a mesma já faz algum tempo. Mas mesmo assim é um ótimo produto, com muitas bibliotecas opcionais e ( dizem ) com excelente integração com o Assembly.

voce disse que tentou o Basic e não conseguiu, experimente dar uma olhadinha no Tutorial em Basic para AVR, e me fale o que achou, ok ?

Um abraço !

Paulo

Link para o comentário
Compartilhar em outros sites

Grande mestre Paulo.

Mais uma vez obrigado pelos esclarecimetos.

Já baixei as apostilas. No entanto, tenho um grande interesse nos microcontroladores da ATMEL. Consegui também sua apostila sobre eles, vou começar a ler.

Sei que aqui não é o foco, mas algumas coisas sobre eles me deixa confuso.

*Primeiro é o nome (ou tipo), exemplo: Attiny, AT90, Atmega, AVR etc. isto deixa qualquer um sem rumo.

Outra coisa, gosto de usar programadores simples no inicio para depois utilizar um mais avançado (com pic, fiz um jdm simplezinho, depois o pickit2 clone).

*Este aqui para começar, pode ser?

*Também li que se algum fuse for determinado de maneira incorreta, o microcontrolador trava e só com alta tensão e hardware específico para liberar.

Estas são minhas dúvidas iniciais quanto ao atmel.

Aguardo alguns comentários, mestre.

Mais uma vez obrigado.

Link para o comentário
Compartilhar em outros sites

Shunt,

Para não mudarmos o assunto principal deste tópico, é melhor fazer as próximas perguntas no tutorial para os AVR, ok ? Logo o grande Bcpetronzio vai dar um toque aqui , e com razão !!!

O circuito para o programador está excelente, mas sugiro fazer o programador mais moderno , que programa via ICSP , e com interface USB, ajuda muito pois muitos micros hoje não possuem mais interface serial, e nem paralela.

Quanto aos nomes, infelizmente confundem pacas. Começe logo pela família ATMEGA , recomendo o ATMEGA88 ou ATMEGA168 para começar, são baratos e muito poderosos. Eu começei a usar os PIC's, mas hoje só uso os AVR's , tanto pelo maior poder de processamento como pela excelente relação custo/benefício. Isso sem falar que a família AVR tem RAM bem mais farta do que os PIC16 e PIC18.

Quanto aos FUSES, realmente tem alguns que podem inutilizar o chip, mas eu explico bastante sobre isso no tutorial sobre os AVR's. Olha, até agora eu não perdí nenhum chip por erro de programação, mas já perdí um por ligar um pino programado como saída diretamente ao terra sem querer, esse pino perdeu a função, mas o resto continuou funcionando.

Mas vale a pena dar uma olhada com carinho, pois o BASCOM tem um poder enorme , e pode-se fazer tudo com ele, sem precisar de nada de Assembly. Pelo menos eu consegui me virar até hoje com coisas bem sofisticadas !

Qualquer dúvida que tiver, poste lá no tópico do Tutorial, ok ?

Paulo

Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...

Olá também sou iniciante mas tenho muito material a respeito se alguém se interessar é só me pedir.... envio por e-mail.

Para programar os microcontroladores uso a linguagem Basic no compilador MIKROBASIC. tenho muito material a respeito e detalhe tudo mastigadinho é só engolir rsrsrsrsrs...^_^ valeu galera!!!:lol:

Link para o comentário
Compartilhar em outros sites

Amigo, se você disse que botao seria o pino b0, botao1 o pino b1 e led o pino b2, por qual motivo ainda chama os pinos da forma que o compilador os reconhece?

symbol botao = portb,o <<< Não seria "zero" ao invés de "ó" ^_^

if portb.0 and portb.1=0 then <<< está fazendo um "e" lógico entre as duas entradas e ao mesmo tempo atribuindo um valor à b1.

Não entendo basic, mas em C ficaria desta forma:

if (!botao && !botão1){

led = 1;

} else led = 0;

Espero ter ajudado.

:)

Em Basic fica assim:

trisa=0 'As portas RA ficam em nível "0"

trisb=%00000011 'As porta RB ficam RB0 E RB1 em nível 1(entrada) e as

demais ou seja (RB2,3,4,5,6,7) ficam em nível "0"

if portb.0 and portb.1=0 then 'Se RB0 e RB1 ficarem em nível "0" então

o led acende

led=1

else 'Senão o led fica apagado

led=0

Espero que esta resposta seja util.
Link para o comentário
Compartilhar em outros sites

Olá também sou iniciante mas tenho muito material a respeito se alguém se interessar é só me pedir.... envio por e-mail.

Para programar os microcontroladores uso a linguagem Basic no compilador MIKROBASIC. tenho muito material a respeito e detalhe tudo mastigadinho é só engolir rsrsrsrsrs...^_^ valeu galera!!!:lol:

Ola Comandos52,

Parabens pela iniciativa.

Tambem sou iniciante como voce, e estou usando ( PIC Simulator "PSI") para praticar .

Fiquei interessado no material para estudos, mas seria legal se voce hospedasse este material em algum disco virtual do tipo "4SHARED.COM" e postasse o link aqui pra todos os interessados poder baixar.

Mas se nao for possivel fazer assim ,ficarei muito grato se mandar para meu e-mail.

Grato

jfeliciano

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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