aniblue07_bendlr_back.gifaniblue07_bendlr_next.gif

Descrição Geral do Software

 

Inicialmente começamos por desenvolver software directamenre para o AVR-MEGA, mas à medida que o software crescia em dimensão e em complexidade de tarefas, foi-nos sujerido pelos orientadores que a melhor maneira de “debugar” o programa é correr parte do código no PC, e deste modo através de informação no écran, e do próprio “debug” do programa, podemos verificar o que se está a passar com o microrato em tempo real, e identificar os possíveis problemas. Outra vantagem é que de cada alteração no programa não precisamos de transferir para a flash do micro, pois além de ser perca de tempo, estamos a diminuir tempo de vida da mesma visto que esta tem uma duração média de 1000 escritas.

Ao principio, esta sujestão não nos pareceu muito necessária, pois até então não tinhamos sentido a necessidade de outra forma de debug, e para implementar-la teriamos de desenvolver uma porta série por software de 115200 bps, e o tempo até ao concurso estava a esgotar-se. Ainda para mais, usando interrupções de 1/115200 s, a comunicação não era muito fiável, visto que o tempo perdido ao executar as instruções de interrupção era significativo e influênciava a largura dos impulsos de bit para bit. Assim acabámos por não usar interrupções e, controlar o tempo entre bits com o tempo das instruções.

O objectivo foi então desenvolver o código de decisão no PC, e posteriormente passá-la para o AVR. Para garantirmos homogeneidade na junção dos dois programas, as variáveis comuns aos dois programas têm de ter o mesmo nome, e usámos um compilador de C, para que também o código seja bem interpretado pelo GCC. Como no programa do PC temos código que serve para debug (informações para o monitor), este tem de ser restrito para que seja apenas compilado ao funcionar separadamente do AVR. Isto é conseguido isolando estas instruções com “#Ifdef __DJGPP ........#Endif”.

No PC foi utilizado outro compilador de C, o DJGPP,  que funciona sobre ambiente MS-DOS, e que também serve de editor, e permite fazer o debug. Além disso já existem muitas librarias que podemos usar e assim concentrar-nos nos problemas específicos da aplicação em causa. Na nossa aplicação usámos uma libraria que já faz configuração da comunicação série (svasync), e outra que nos permite um interface gráfico(allegro). O compilador e as librarias estão em anexo A “D:\Software\DJGPP\”.

Como grande parte do código, e a mais importante foi desenvolvida com o suporte do PC, vamos dar grande destaque na descrição do software, a esta fase.

Assim nesta fase, parte do código corre no AVR, e a outra no PC. A parte que corre no AVR tem por objectivo o seguinte: leitura dos sensores; receber as ordens do PC; transmiti-las ao 8515 que é o responsável pela actuação aos motores; receber a resposta do 8515, que retorna a informação da ordem anterior; enviar esta informação e a do sensor de novo para o PC.

Quanto mais apertado fôr este ciclo mais controlo temos sobre o sistema. O ciclo que trabalhamos durante grande parte do tempo foi de 33ms.

Na figura seguinte temos o diagrama de blocos que esquematiza o funcionamento do programa que funciona no AVR, quando parte do processamento de decisão está no PC.

 

 


Os pornemores sobre o funcionamento deste serão descritos após termos falado em termos gerais sobre todo o software.

A parte do código que corre no PC é responsável pela decisão sobre o que o microrato deve ou não fazer. Esta decisão depende do estado actual, e dos objectivos a cumprir. O estado actual vem actualizado ciclicamente de 33ms em 33ms após o PC ter enviado a instrução anterior. A primeira instrução é dada ainda sem informações sobre o estado actual.

O esquema do funcionamento do código no PC , e a sua interligação com o AVR estão na figura seguinte.

Podemos ver os blocos principais de código e as suas funções. Quando o programa estiver todo feito, teremos de colocar todo o programa a correr no AVR, retirando neste caso os blocos que representam a troca de informação. Na figura esses blocos estão representados a verde, e os blocos que ficaram no AVR serão os que estão com a outra cor.

No modo de debug, o código de controlo é processado pelo computador, que tem caracteristicas muito diferentes do AVR. Devido a este factor tivemos de ter muito cuidado na execução do código. Por exemplo o computador executa operações com floats muito rápidamente, mas no AVR, essas operações são muito demoradas, logo terão de ser minimizadas. No caso de operações aritméticas temos de construir tabelas com o valor das fuções para que seja mais rápido a sua execução, e deste modo termos um tempo de ciclo o mais apertado possível, e assim ter menos atrasos no controlo.

Nesta secção, a arquitectura do software do microrato foi explicado. Nas próximas secções será explicado em mais pormenor, o funcionamento dos blocos, e os seus aspectos principais.

 aniblue07_bendlr_back.gifaniblue07_bendlr_next.gif