Jump to content

If else encadeado


Silva Manuel
 Share

Recommended Posts

Olá a todos!

Este é o meu primeiro tópico. Estou reformado e resolvi voltar a estudar MCU's. Cheguei a fazer alguns programas muito básicos com o 8080 da Intel. INS8060 da National, TMS9900 e TMS9981 da Texas. O código era feito usando os "opcodes" das instruções com "displacements" calculados manualmente, etc. ainda não tinha acesso a assembladores (fazer um relógio com alarme em 256+128 bytes=384 bytes), etc.

A vida profissional entretanto mudou e nunca mais voltei a pegar em microprocessadores. Há cerca de 2 anos comecei a estudar a série AVR da Atmel (dei uma vista de olhos ao PIC mas não gostei da estrutura). Já fiz alguns programas em assembly usando o AVRStudio da Atmel. Em termos de assembly sei trabalhar perfeitamente com timers, PWM, USART, interrupts, etc..

Decidi fazer coisas mais complexas  e estou a começar a estudar C. Comprei o livro "Linguagem  C de Luís Damas mas "encalhei" nos "if else" encadeados.

Depois desta introdução, vou passar a escrever parte do programa exemplo do livro e expor a minha dificuldade.

11  if (tipo ==  'm' || tipo == 'M')

12        res = n_horas<0 ? 0: n_horas*60L;

13    else

14            if (tipo ==  's' || tipo == 'S')

15                res = n_horas<0 ? 0: n_horas*3600L;

16            else

17                if (tipo ==  'd' || tipo == 'D')

18                  res = n_horas<0 ? 0: n_horas*36000L;

19   

20  printf("%dh --> %ld%c " ,n_horas,res,tipo);

21}             

       

No caso do 1º "if" ser verdadeiro, a instrução seguinte é executada (linha 12), depois, qual é a próxima instrução a executar, o "printf" da linha 20 ou vai testar a condição do 2º if (linha 14) e continuar ? O que penso mas não tenho a certeza é que, como o 2º "if" faz parte do 1º "else" que não é executado pelo facto da primeira condição ser verdadeira o programa sai fora do if else encadeado e executa o prinf.

Mais uma vez, peço desculpa pela minha questão ser tão básica e gostaria de saber se posso continuar a colocar as minhas dúvidas neste Forum.

Antecipadamente agradeço a ajuda.

Cumprimentos,

Manuel Silva

Em primeiro lugar quero pedir desculpa pela dívida que tenho ser demasiado elementar.

Link to comment
Share on other sites

Mais uma vez, peço desculpa pela minha questão ser tão básica e gostaria de saber se posso continuar a colocar as minhas dúvidas neste Forum.

Claro que sim!

O P@P está aqui é para isto mesmo! 😉

C é a primeira linguagem de programação que está a estudar? (esquecendo Assembly)

Na minha sincera opinião, existem linguagens melhores para iniciação 🙂

Cumprimentos. 😛

Knowledge is free!

Link to comment
Share on other sites

C , é realmente a minha primeira linguagem de programação que estou a aprender. A razão é porque quero usa-la para controlo com MCU's da família AVR Atmel, por outro lado, penso ser uma linguagem bastante eficiente na geração do código e rápida na execução. 

Outra vantagem é que o ambiente de desenvolvimento WinAVR e AVRStudio são ferramentas gratuitas, sem qualquer limite na extensão do código.

O meu objectivo em termos de projecto é construir um pequeno sistema de recolha de dados (telemetria) para um aeromodelo de rádio controlo. Pretendo recolher rotações do motor, tensão da bateria, velocidade de subida ou descida, altitude, velocidade relativamente ao ar e localização (dados de GPS).  Talvez seja um projecto ambicioso para primeiro projecto, mas pretendo fazê-lo por etapas  e ir adicionando funcionalidades.

Obrigado pelo seu apoio e interesse.

Cumprimentos,

Manuel Silva

Link to comment
Share on other sites

Como primeiro projecto é, de facto, ambicioso! 🙂

Sim, de facto C é uma linguagem multi-disciplinar e que permite muitas coisas. Mas, para esse projecto, uma linguagem que não seria má é Arduino, que também tem hardware específico e que pode ser controlado por software com scripts programados por nós. Tudo depende também do aeromodelo, etc...

Na minha opinião, antes de entrar já em telemetria, as bases de programação geral, como Lógica e Algoritmia, são o melhor ponto de partida, com resolução de problemas que só envolvem computadores. Depois de entendidas bem as bases, poderia avançar para o "exterior" do computador.

Porque não começar primeiro por um simulador do aeromodelo no computador? Assim entenderia como obter os dados. Depois era só alterar para recolher os dados externos, e não de simulação.

Há várias formas de chegar ao seu projecto, mas não se esqueça: um passo de cada vez. 😉

Cumprimentos.

Knowledge is free!

Link to comment
Share on other sites

Relativamente ao uso do Arduino e seu ambiente, já tentei e tenho já algumas das funcionalidades a funcionar neste ambiente, mas, comecei a ter problemas em termos de tempo de execução.  Se aumentasse o BAUDE Rate para 38400 do GPS maior parte da informação era perdida. Tanto quanto sei (e sei muito pouco em termos de linguagens de programação), o ambiente do Arduino está suportado no ambiente C, AVR GCC e poder ser programado em C ou C++ (penso eu). O MCU usado pelo Arduino é da mesma família dos que tenho usado. A minha intenção em usar o C é pelo facto de poder usar UART interrupts, I/O interrupts, etc. e aumentar substancialmente a velocidade de execução e com muito menos memória.

  Na minha opinião, antes de entrar já em telemetria, as bases de programação geral, como Lógica e Algoritmia, são o melhor ponto de partida, com resolução de problemas que só envolvem computadores. Depois de entendidas bem as bases, poderia avançar para o "exterior" do computador.

Porque não começar primeiro por um simulador do aeromodelo no computador? Assim entenderia como obter os dados. Depois era só alterar para recolher os dados externos, e não de simulação

Relativamente à sua proposta, que penso ser óptima e seria a forma mais indicada de planear/fazer o projecto, mas, não tenho conhecimentos suficientes  para o fazer esse tipo de análise e francamente não saberia por onde começar. 

Talvez, se me der algumas "coordenadas"  poderei analisar a questão e ver até que ponto serei capaz de o fazer.

Agradeço os seus comentários e sugestões.

Cumprimentos

Manuel

Link to comment
Share on other sites

Sim, de facto C é uma linguagem multi-disciplinar e que permite muitas coisas. Mas, para esse projecto, uma linguagem que não seria má é Arduino, que também tem hardware específico e que pode ser controlado por software com scripts programados por nós. Tudo depende também do aeromodelo, etc...

Eu apoio completamente isto.

Eu aprendi microcontroladores com PICs, passei para o 8051 e acabei por preferir os AVR por causa do compilador de borla. 🙂 Hoje uso o Arduino, como base de hardware (não gosto muito do software) e é muito porreiro. A parte boa é todo o hardware (relativamente barato) que já existe e librarias para os usar em "plug and play". Mesmo não gostando do software admito que é sempre bom para testar o hardware antes de começar a pensar que o nosso código do WinAVR tem problemas.

Por isso, acho que é uma boa aposta mesmo que seja só para prototipagem e depois fazeres hardware específico para o que pretendes. A linguagem do Arduino é também muito semelhante a C, pelo que é fácil para quem sabe C e não é um desperdício para quem quer aprender C para microcontroladores.

Se precisares de mais ajuda apita. O fórum é para quem tem dúvidas... senão era uma seca dos diabos. 😉

Só após ter postado li a resposta. Outro dos factores que me levou a esquecer a linguagem do arduino foi a implementação da porta série, que creio eu nem sequer usava o hardware e transmitia por soft uart.

Algo que reparei este mês foi que o interface i2c (a biblioteca Wiring.h do arduino) está muito bem feito. É todo ele programado com interrupts. 😛 Pena a UART não o ser e tendo em conta o dump de dados que o GPS faz, sem UART é realmente difícil. Mas o que disse acerca de plataforma de desenvolvimento continua a ser válido. 

include <ai se te avio>

Mãe () {

}

Link to comment
Share on other sites

Eu estou de acordo com o que afirma. O Arduino é realmente óptimo, tem imensas livrarias e existem montes de exemplos que podemos usar. Eu uso como display LCD o tipo EA DOGM163-A com interface SPI , I2C ou paralelo,  não necessita de hardware para ajuste do contraste, pois, feito por software, etc. Eu costumo trabalhar em assembly com o mesmo, e, só no ambiente do Arduino é que encontrei uma livraria com todas as funcionalidades.

A placa para desenvolvimento do protótipo para o aeromodelo já está feita e o hardware de interface com os vários sensores também já estão feitos e foram testados com o Arduino. Para testar estes interfaces usei livrarias já existentes, adaptei programas, outros foram feitos por mim usando apenas os exemplos da livraria de referências, mas penso que não se podem mostrar, pois, tem "remendos" por todos os lados.

Outra das razões que não mencionei para a preferência do AVR GCC e a linguagem C é o facto de ter todas as ferramentas de desenvolvimento e programação dos MCU's, JTAG ICEmkII e AVRISP mkII.

Cumprimentos,

Manuel Silva

Link to comment
Share on other sites

Algo que podes também fazer é ver os ficheiros das librarias e adaptá-las em C ao teu código.

Ou seja, quando instalas o arduino no computador ele coloca todos os ficheiros de código fonte utilizado no arduino num dos directórios. Logo se quiseres usar alguma funcão de C que exista já no arduino, é só procurar nos directórios por ficheiros .c e .h e há-de haver lá as funcões que já usas no Arduino prontas a adaptar para C. Não tenho a certeza acerca de algumas das librarias, mas por exemplo a UART e o interface I2C estão lá para toda a gente ver.  😉

Só um aparte, também podes usar o ARduino como programador de chips.

include <ai se te avio>

Mãe () {

}

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.