Menu e sub menu com display lcd

Software e Hardware para ATMEL

Moderadores: 51, guest2003, brasilma

Menu e sub menu com display lcd

Mensagempor tmarchesi2 » 09 Out 2008 21:10

Pessoal;


Alguém ja fez ou conhece ou onde posso encontrar: Como ficaria a estrutura de um software em C, para criar menu e sub menu com display lcd , teclado e um AVR ?

No caso seria um display, memoria eeprom e um teclado. No display eu teria o Menu A B e C, dentro de cada menu eu teria os sub-menus, onde eu poderia alterar valores de memória via teclado. Detalhe, o software teria de ser bem estruturado pois as alterações e navegação seria on-line ou seja, quando eu sair de um sub-menu o software perguntaria se eu quero salvar a alteração, caso sim, os valores ja seriam atualizados em tempo real e o código principal consideraria os novos valores, sem ter que resetar o circuito, ou ter de fazer as alterações com o " veículo desligado".

Estou fazendo meu Tcc, é uma injeção eletrônica com apenas um bico injetor.

Então quero alterar os mapas de injeção com o carro em funcionamento. Sei que existe a megasquirt, porém ela é programada através do pc e eu quero fazer tudo direto no módulo.

Comercial existe:

www.pandoo.com.br
www.fueltech.com.br -> essa foi feita com pic 18F.

Só preciso disso pra começar o software, o hardware está 75% pronto.

Grato pela ajuda....
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor brasilma » 10 Out 2008 12:17

Colega,

Não há nada de diferente ou fora do padrão no que deseja fazer, e pouco importa ser feito em qualquer linguagem.

Eu particularmente faço do meu jeito, porem existem formas específicas como uma que já ouvi comentários que se chama "maquina de estados", talvez pesquisando por este termo ajude a encontrar exemplos para fazer o que deseja.

Abraços,
MArcos.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor tmarchesi2 » 10 Out 2008 16:37

Boa Tarde Marcos;

Você fala em implementar a teoria da máquina de estado no software para controlar o lcd ou todo o processo ?

Eu queria tentar iniciar com um algoritmo mais sólido porque se o menu ficar muito carregado eu vou ter problema no controle do processo.

No nosso forum tem um exemplo com pic..... usando o Case e função para cade menu e sub-menu. Também encontrei um exemplo com Struct e ponteiro, porém não tenho tanta habilidade para programar.



To na pesquisa ainda

Me ajuda ai pessoal..... Abraço a todos
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor brasilma » 13 Out 2008 10:23

Falei da opção com máquina de estado, pois sempre ouço falar dela qdo as pessoas possuem a necessidade que citou, e achei que talvez pudesse ajudar.

Nos sistemas que desenvolvo, conforme comentei, faço tudo de uma forma minha prórpia, e que seria dificil de explicar, pois as rotinas básicas como leitura do teclado pela rotina de interrrupação e acionamento do display está tudo amarrado.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Fandango » 17 Out 2008 07:39

A dica do nosso colega é boa. Você pode usar a técnica da máquina de estados usando como transição o evento de teclado.

Vou tentar ser mais explícito: Pelo que entendi, você precisa ficar processando outras coisas mais prioritárias e, pelo visto, não está utilizando nenhum RTOS. Então imagino que a melhor estratégia é usar uma máquina de estados aos moldes dos CLPs (loop), isto é:

1- Leitura de entradas
2- Processamento
3- Atualização de saídas

A forma como pode implementar isto depende da sua habilidade de programação. Alguns colegas usam flags, outros ponteiros de função, tudo depende da abordagem, mas o resultado é semelhante.

Como o tratamento do teclado (entradas) e a atualização do display (saídas) não são prioritárias, você poderia tratá-las apenas quando houver "tempo".

Creio que o mais simples é você fazer uma função do tipo:
Código: Selecionar todos
bool CheckKeys (void);

que retorna TRUE ou FALSE caso exista ou não tecla pressionada, e usar um flag para saber em que nivel de menu está (se é no principal, se é num submenu, etc.). Por exemplo:
Código: Selecionar todos
char MenuLevel;

Onde 0 poderia representar "menu principal", 1 = submenu, 2 = submenu do submenu, etc.

Se CheckKeys retornasse TRUE, então, e de acordo com o valor de MenuLevel (poderia verificar isto através de if-then-else ou case) trataria o evento e as suas teclas assumiriam um ou outro significado.

De maneira análoga teria que tratar o display, pois só faz sentido atualizá-lo quando algum valor mudar. Então poderia criar uma função do tipo:
Código: Selecionar todos
void RefreshLCD (bool);

onde o parâmetro indicaria a necessidade ou não de atualização.

Desta forma, a maior parte da execução ficaria no processamento das funções do seu controle.
... e assim falou Zaratustra !
Fandango
Byte
 
Mensagens: 187
Registrado em: 11 Jun 2007 22:13
Localização: SC - Brasil

Mensagempor tmarchesi2 » 18 Out 2008 18:18

Ok Fandando gostei da idéia;


Andei pensando o seguinte:

Vou tentar implementar um protocolo I2C, onde eu colocaria um Atmega8 gerenciado o display e o atmega32 gerenciando o resto. Como é o TCC da facul, este custo a mais não tem tanto reflexo no projeto final e no caso eu aprenderia a programar o protocolo I2C, a vantagem dos dois módulos seria na hora de fixar o display no painél do carro.
Estou novato na programação, não sei se faço no codevision ou no winavr + avrstudio.
O crítico do meu projeto é calcular o ponto de disparo da ignição, pois antes de fazer o disparo, tenho que saber qual é a posição do pistão em relação ao ponto morto superior PMS. Meu encoder é uma polia com 60 dentes - 2, ou seja 58 dentes. Comecei a trabalhar nesta rotina que julgo ser a mais crítica para o correto funcionamento do sistema.



Estou avaliando todas as possibilidades, sua ajuda foi muito válida, quer tiver sugestões, críticas, pode comentar.

Um projeto semelhante é a megasquirt, porém é algo de fora que muitas pessoas estão utilizando, depois que o meu sistema funcionar, penso em divulga-lo como algo livre para melhorias pelos interessados no assunto.


Grato pela atenção
tmarchesi2
Nibble
 
Mensagens: 69
Registrado em: 23 Fev 2007 13:45

Mensagempor Fandango » 20 Out 2008 07:49

É isso aí! Avalie bem todas as questões antes de começar a implementar qualquer coisa. A experiência demonstrou (e recentemente encontrei isto nos livros) de que as chances de sucesso do projeto aumentam exponencialmente se cuidarmos com carinho da primeira etapa, isto é, da análise dos requisitos, das restrições e dos recursos.

Não entendo nada de injeção eletrônica, então nisto não vou poder te ajudar. Mas do resto a gente se vira (hehehe).

Se for implementar o I2C, dá uma olhada nos posts aqui do forum. Há um tempinho eu postei as rotinas que usei (em C) para controlar uma EEPROM usando I2C. Funcionam direitinho.

Quanto ao ambiente de desenvolvimento eu uso AVR_Studio com WinAVR. Não conheço o Codevision, mas tem muita gente que usa e acho que vai encontrar bastante material a respeito.

Qualquer coisa, estamos na área.

Abraço.
... e assim falou Zaratustra !
Fandango
Byte
 
Mensagens: 187
Registrado em: 11 Jun 2007 22:13
Localização: SC - Brasil


Voltar para AVR

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x