Home › Forum › Microcontrôleurs & microprocesseurs › 18f4550/4553, afficheur LCD et interruptions

Forum

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion

Sujet: 18f4550/4553, afficheur LCD et interruptions

Auteur Message

padbol

2 messages

De passage
De passage

Read post 05-09-2010 08:56

Bonjour à tous,

Etudiant en électronique, je développe actuellement un projet personnel en dehors de mes heures de cours.

Dans le cadre de ce travail, je découvre la programmation d'un driver pour afficheur LCD 2x16. Je me suis donc intéresse au "FlexLCD Driver" que l'on trouve sur le forum de CCS C (compilo que j'utilise).

Avant d'intégrer cet afficheur, j'ai réalisé différents programmes me permettant d'indiquer différentes chose sur des afficheurs LED.

Jusqu'à présent, j'intégrais le balayage de l'afficheur (à led) dans le "while(1)" ... en pratique, ça fonctionne mais ça ralenti l'exécution de mon code et j'ai le sentiment que ce n'est pas très "propre".

Aussi, il me semble possible d'utiliser les interruptions afin de "sortir" l'affichage du code principal de mon programme : ce que j'appelle le "calcul".

Ainsi, le fonctionnement actuel de mon programme est le suivant:
while(1) {
   Affiche;
   Attend;
   Calcule;
}


Ma question est donc celle ci : Connaissez-vous un site? un livre? une référence quelconque? où je peux m'informer sur la façon "propre" de procéder?

Le problème n'est pas tellement une question d'instructions (le manuel de ccs c m'aide pour celà) mais bien de savoir quel est le principe à utiliser? Comment procéder, ne fusse en pseudo-code?

D'avance, je vous remercie pour votre aide.

Anneo

1273 messages

Expert
Expert

Read post 05-09-2010 20:39

Bonsoir Padbol,(ne desespere pas)
procedure normale,attendre que l'LCD est pret(lire LCD,tester bit"buzy")puis fournir l'octet.
Souvant la ligne R/W est mis a la masse,on peut plus lire le "buzy",il ne reste que d'attendre suffisament longtemps apres chaque ecriture.(jusqu'a 3ms pour CLS)
Cette derniere maniere marche toujours,alors les modules "prefab" agissent probablement toutes comme ca.
On pourait gagner du temps en mettant une reveil apres l'ecriture.Le prochain fois,si le reveil n'a pas sonne on attend,et on fini le travail.De cette maniere le temps de chercher la prochaine charactere est deduit du temps d'attente.
Le mieux c'est d'employer un timer pour qu'on peut avoir un interruption tout les 5ms,assez long pour etre certain que l'LCD n'est plus "buzy".Reserver du RAM(evt.stockage circulaire).
Pendant le "calcul" mettez la matiere a imprimer dans le RAM et admet l'interruption timer.
A l'interruption,mettez un octet au LCD,et si le ram est vide(maintenant),arreter les interruptions.
Chaque 5ms une chr.->32x5=160ms pour remplier l'ecran.
Plus de temps d'attente et seulement des interruptions quand il y a quelque chose a montrer.
Je supose qu'il faut ecrire ce driver LCD soimeme,peut etre l'occasion de faire un peut d'assembler?
Plus vite,plus compact et plus pret du "hardware",on sait mieux ce qu'il se passe.(plus,trop,dificile??)
Anne

padbol

2 messages

De passage
De passage

Read post 07-09-2010 07:29

Il s'agit donc "simplement" d'uiliser une interruption "timer"?

Ce n'est pas bête du tout, je vais essayer ça

Merci

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion

Elektor 6/2012 en kiosque

Elektor-Hebdo gratuit !

Mon adresse électronique :

Unités de crédit Elektor

Nos blogs-ateliers