Exécution de 2 fonctions simultanément sur ATméga 8

Programmation des microcontrôleurs Atmel de type AT et ATMEGA avec BASCOM

Modérateurs: yanmar, Duval JP

Exécution de 2 fonctions simultanément sur ATméga 8

Messagede pat57 » Mer 28 Oct 2009 14:29

Bonjour,

Je travaille actuellement sur une horloge à affichage 7 segments (6 digits) gérée par un ATMéga 8. Toute cette partie fonctionne parfaitement.
En revanche, je voudrais exécuter la fonction SOUND à certain moment (toute les 2 minutes rondes). Et là arrivent les problèmes.
En effet, l'affichage de l'heure est réalisée en scannant chaque digit. L'ATméga travaille donc tous le temps.
En lui demandant d'exécuter une fonction telle que SOUND, il s'arrête de scanner (donc plus d'afficher de l'heure) pendant qu'il traite et exécute la fonction SOUND (durant 1 seconde dans mon cas).

Est-il possible de faire cohabiter les 2 actions simultanément ?

Merci pour votre aide !

Patrice
pat57
Habitué
Habitué
 
Messages: 42
Inscription: Ven 30 Jan 2009 13:45

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede FELIX » Jeu 29 Oct 2009 14:58

Bonjour,

J'aime bien votre question.

A la description que vous faite, (sans voir votre programme) vous voulez excécuter une instruction pendant que d'autres se déroulent.

Cela n'est pas possible en effet le méga8 n'est pas multitache. (C'est a dire qu'il ne peut pas excécuter 2 programmes différents en même temps).

Vos instructions pour scanner l'affichage ainsi que l'instruction sound sont des instructions qui font partie intégrante d' un programme, c'est soit les unes soit l'autre ET TAND QU'ELLES NE SONT PAS ACHEVES ON NE FAIT RIEN D'AUTRE. Vous n'avez pas de chance car l'instruction sound est forcément longue. (Si non sans intérré).

Par contre le méga8 gère les interruptions. C'est pas du multitache mais....ça doit pouvoir vous aider.
L'interruption pourrait être comparer a un programme qui tourne en font de tache et qui se fait connaitre à certains moment (Il prend la main) en fonction de certains critères.

Pour votre probleme je verrai:
1) une utilisation du timer qui tous le Xms pourais activer votre buzzer et donc vous jouer une petite "mélodie" (en faisant varier la fréquence). (A développer pour le FUN)
2) utiliser un buzzer évoluer et capable de jouer une mélodie avec une simple activation au moment voulu .(A mon avis c'est le plus simple). (Moi je partirai la dessus)

A+
Claude
FELIX
Ponctuel
Ponctuel
 
Messages: 20
Inscription: Ven 29 Oct 2004 14:13
Localisation: Aurillac

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Jean-Marie » Jeu 29 Oct 2009 21:43

Hello Pat57,

J'irais dans le même sens que Félix. L'instruction "Sound" occupe le µ pendant 100% du temps. Il ne peut rien faire d'autre en même temps. La solution est de prévoir un système qui s'occupe tout seul de faire le son mais qui possède une pin de commande. Par exemple, si la pin de commande est à 5V le son est émis. Si elle est à 0V le son s'arrête. Il y a quelque temps, j'ai réalisé très facilement un système du genre à l'aide d'un NE555, de quelques résistances et condensateurs, d'un transistor ordinaire et d'un petit haut-parleur. Mais un buzzer autonome ferait probablement aussi l'affaire.

Le travail de l'atmega n'est plus alors interrompu que pendant un temps minime, le temps de faire un Set puis plus tard un Reset de la Pin raccordée au système.
Bien amicalement.

Jean-Marie
Avatar de l’utilisateur
Jean-Marie
Passioné
Passioné
 
Messages: 139
Inscription: Sam 7 Mar 2009 10:44
Localisation: Arlon, Belgique

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Duval JP » Ven 30 Oct 2009 18:01

Bonjour,
Toutes les réponses précédentes étaient perspicaces, 555 ou un petit frère genre Attiny qui ne fait que cela, je ne vois que cela ayant moi-même essayé.

Il existe un circuit de "dong" chez selectronic le SAE0800, mais cela émet un horrible grésillement. pour ma part ma pendule fait "tic-tac" donc des temps très court.

je suis preneur des solutions 555 si le son est amorti.

Jean-Pierre
Avatar de l’utilisateur
Duval JP
Modérateur
 
Messages: 339
Inscription: Mar 15 Nov 2005 09:58

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede philbob » Lun 2 Nov 2009 04:33

bonjour,

Et oui, à un instant donné, un CPU n'execute qu'une seule tache ! Donc point de salut.
Soit on pilote un buzzer externe (solution à base de 555 ou autre oscillateur)
Soit on installe un deuxieme CPU !

Pourquoi ne pas confier à un deuxieme ATmega le soin de faire une sonnerie evoluée ?
------------------------------------
cordialement PHILBOB
(http://bidulic.free.fr)
Avatar de l’utilisateur
philbob
Habitué
Habitué
 
Messages: 119
Inscription: Sam 29 Mar 2008 16:09

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede B2V » Lun 2 Nov 2009 11:42

Bonjour

Pourquoi ne pas prendre le problème autrement et utiliser les interruptions:
Le rafraichissement du balayage de l'afficheur est effectué en interruption (à l'aide d'un timer) et c'est le programme principal qui déclenche le sound à volonté...

Code: Tout sélectionner
Config Timer0 = Timer , Prescale = 64    ' (avec le prescaler qui convient au rafraichissement)
On Timer0 Timer_isr
'Enable Timer0
Enable Interrupts
Start Timer0

Do                                          ' programme principal
   Sound Portb.4 , 100 , 2500    ' le sound de la mort !!!
Loop

Timer_isr:
  Toggle Portb.0    ' Balayage de l'afficheur.....
Return



Le balayage est appelé indépendamment de la fonction sound

Bien sur je ne connait pas l'influence sur le rendu de la qualité sonore de la fonction sound et cela ne règle pas le problème du programme principal qui est figé, mais cela était déjà le cas avant...

@+

B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede B2V » Lun 2 Nov 2009 13:25

Re..

Ou mieux, compte tenu de ce que fait la fonction sound, on peux là réécrire en interruption:

Choisi un timer/prescaler en adéquation avec le HP ou buzzer connecté (2 à 4kHz) selon la fréquence d'horloge:

Code: Tout sélectionner
$crystal  = 8000000
Config Timer0 = Timer , Prescale = 8                    ' (16000000/256/8=0.000256 soit environ 3900Hz)
On Timer0 Timer_isr
Enable Timer0
Enable Interrupts
Start Timer0

Son_Duree=65535                                         '(3900*65535=16.77696 s maximum pour un codage sur 16 bit de la sonnerie)
Print "Je suis le programme principal"
Do
  Print "ça sonne , ça affiche et je fais ce qu'il me plait..."
Loop

Timer_isr:
  Toggle Portb.0                                            ' Scan Clavier
'...................
  If Son_Duree> 0 Then                                      ' sound
    Toggle Portb.1                                          ' broche ou est connecté le HP, Buzzer,...
    Son_duree = Son_duree - 1
  End If
Return

End


Si maintenant il faut faire varier la tonalité on peut utiliser deux interruptions avec deux timers, ou encore l'interruption Ouput compare en choisissant des fréquences cohérentes avec le rafraichissement de l'afficheur.

@+

B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Duval JP » Lun 2 Nov 2009 16:53

ben oui mais la question c'était :
En lui demandant d'exécuter une fonction telle que SOUND, il s'arrête de scanner (donc plus d'afficher de l'heure) pendant qu'il traite et exécute la fonction SOUND (durant 1 seconde dans mon cas).

en effet si le programme supporte une interruption de cette longueur pourquoi pas , mais c'est surement là le PB
JP
Avatar de l’utilisateur
Duval JP
Modérateur
 
Messages: 339
Inscription: Mar 15 Nov 2005 09:58

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Jean-Marie » Lun 2 Nov 2009 17:22

Hello Bédeuvé,

A la fin de ta première proposition, tu dis ceci:
Bien sur ... cela ne règle pas le problème du programme principal qui est figé
Or, c'est justement ce problème que Pat57 essaye de résoudre.

Dans ta deuxième proposition, le programme principal est interrompu par un hachage à une fréquence audible pour permettre à une Pin "audio" de générer un signal carré. Mais le programme principal ne se résume pas à Print "ça sonne , ça affiche et je fais ce qu'il me plait...". En plus de calculer l'heure à afficher, il passe son temps à allumer et éteindre chaque chiffre chacun à la suite de l'autre plus de 25 x par seconde pour que cela ne se voie pas. Dans ces conditions, il me paraît bien plus logique d'utiliser un système de son qui sonne tout seul (buzzer à courant continu ou oscillateur à base de NE555) quand une patte est à 1 et qui s'arrête quand la patte revient à 0 et d'inclure dans le programme principal les commandes "patte à 1" et "patte à 0" quand il faut démarrer et stopper la sonnette.

L'avantage du NE555, c'est de pouvoir régler facilement la fréquence audio et l'intensité du son, alors que ces caractéristiques sont fixes pour le buzzer.

PS. Désolé de dire la même chose que toi, Jean-Pierre, mais je n'avais pas vu ton message.
Bien amicalement.

Jean-Marie
Avatar de l’utilisateur
Jean-Marie
Passioné
Passioné
 
Messages: 139
Inscription: Sam 7 Mar 2009 10:44
Localisation: Arlon, Belgique

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede B2V » Lun 2 Nov 2009 18:52

Bonsoir

Remarques très avisées JM

Je ne connais pas le programme principal concerné, mais pour avoir rédigé un programme qui gère à la fois un scan d'affichage, un scan clavier (par interruption) un un rendu sonore (signal carré), tout en gérant un bus I2C, un calcul de de température et l'affichage d'une horloge est d'une alarme. ( à 12MHz sur un AT90S1200 avec ses limitations 1timer, une pile hard à 3 niveaux etc...), je te rassure compte tenu des fréquences mises en jeu,
- il n'y a pas dégradation du signal sonore.
- Les interruptions, (car très courtes) génent très peu le déroulement du programme principal,qui est, sauf temps réel, supposé effectuer du travail de fond. et puis s'il est interrompu beaucoup pour très peu c'est sans aucun doute mieux que très peu mais très longtemps.

Bien entendu, je ne programme qu'en assembleur (en C depuis peu mais j'aime pas...) et passe des heures à optimiser mon code .
Je découvre à peine le Bascom, mais il ne faut pas que sa facilité d'approche induisent une carte plus complexe donc plus encombrante, plus couteuse, plus gourmande en conso etc...

Même si un le bon vieux 555 et bien tentant... (électronique quand tu nous tiens ....)

Le choix est cornelien, Plus de code ou plus de hard, chacun y met ses gouts et pousse le technique d'un coté ou de l'autre. pour ma part, je suis pour la simplification du hard.

Idem pour les règlage en volume, fréquence etc, c'est de l'électronique en plus etsi l'on veux les rendres pilotable c'est tout aussi complexe...

Donc : Je propose: un convertisseur numérique analogique serie ou parallele selon ses gout et toc...
en voici une solution qui permettra de la souplesse...

Alleï @ +

Bédeuvé
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Jean-Marie » Lun 2 Nov 2009 20:35

B2V a écrit:pour avoir rédigé un programme qui gère à la fois un scan d'affichage, un scan clavier (par interruption) un un rendu sonore (signal carré), tout en gérant un bus I2C, un calcul de de température et l'affichage d'une horloge est d'une alarme. ( à 12MHz sur un AT90S1200 avec ses limitations 1timer, une pile hard à 3 niveaux etc...), je te rassure compte tenu des fréquences mises en jeu ...

Whaou !!! Là, tu m'épates. C'est effectivement beaucoup de tâches à gérer ensemble. Mais l'assembleur peut faire des merveilles, souvent inaccessibles aux langages de haut niveau. Donc, ce que tu proposes est probablement possible mais pas nécessairement à la portée de tout le monde.

C'est bizarre, depuis un jour ou deux j'étais justement en train de lire de la documentation sur l'assembleur. Il y a bien longtemps, j'en ai fait un peu sur le microprocesseur de l'Apple II (le 6502, je crois) et je dois dire que cela donne la liberté de faire vraiment ce qu'on veut. D'où mon envie de m'y remettre sur les microcontrôleurs de Atmel.
Bien amicalement.

Jean-Marie
Avatar de l’utilisateur
Jean-Marie
Passioné
Passioné
 
Messages: 139
Inscription: Sam 7 Mar 2009 10:44
Localisation: Arlon, Belgique

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede B2V » Lun 2 Nov 2009 20:56

Bonsoir

'y a qu'à surtout que c'est un plaisir de developper en assembleur avec la suite de developpement d'atmel ! 8)

J'ai pour ma part effectué mes armes en assembleur sur TRS-80 de Tandy, Apple IIe, Amstrad 64/128 puis Amiga 1000 ou je me suis vraiment régalé, puis PC :cry: ....plus rien.... Je n'ai repris qu'avec les Atmels ... avec le démarrage des AT90S1200, 2313 et consors :wink:

@+
B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Jean-Marie » Lun 2 Nov 2009 21:29

De toute cette période des débuts des ordis, il me reste encore un Oric.

Serions-nous de la même génération ? Je suis de 1945, comme tu peux le voir sur ma photo.

Par contre, j'ai du mal à évaluer ton âge d'après ta photo:
591.gif
591.gif (3.38 Kio) Vu 703 fois
Bien amicalement.

Jean-Marie
Avatar de l’utilisateur
Jean-Marie
Passioné
Passioné
 
Messages: 139
Inscription: Sam 7 Mar 2009 10:44
Localisation: Arlon, Belgique

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede B2V » Lun 2 Nov 2009 21:56

Re-bonjour

Alors tu aurais pu être mon professeur, en fait je suis de 1967 et j'ai commencé à 13 ans en squatant l'ordi de mon frère que j'ai repris par la suite.
Mon premier ordi:

Image

Avec la superbe résolution graphique de 128x48 pixel - 8MHz, 16ko de RAM (j'avais le lecteur de cassette en plus ...)

Le denominateur commun étant informaticien de la premire heure... :wink:

@+
B2V
Avatar de l’utilisateur
B2V
Expert
Expert
 
Messages: 478
Inscription: Ven 25 Sep 2009 21:36
Localisation: Ollioules dans le Bas Var

Re: Exécution de 2 fonctions simultanément sur ATméga 8

Messagede Jean-Marie » Lun 2 Nov 2009 22:18

Non, c'est toi qui aurais pu être mon prof. Je lis que tu as commencé l'ordi à 13 ans, donc en 1980. En ce qui me concerne, j'ai commencé vers 1982 avec l'Apple IIe :wink:
Bien amicalement.

Jean-Marie
Avatar de l’utilisateur
Jean-Marie
Passioné
Passioné
 
Messages: 139
Inscription: Sam 7 Mar 2009 10:44
Localisation: Arlon, Belgique

Suivante

Retourner vers Language Basic (Bascom)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron