Site des Oraux

Electronique numérique 2009 (5) :: post
Années :: 2005 :: 2006 :: 2007 :: 2008 :: Toutes

Post nº5 (id3921) envoyé par Fish Stick  le 23 Jan 2009, 16:43
Q1 (/5pts)
----------
On a 3 bistables D-flipflop (j'appelle leurs entrées D0,D1,D2 et sorties Q0,Q1,Q2).
Ils sont tous trois reliés à CLK (=> logique synchrone).
Ils sont branchés:
Q0 -> D1 ; Q1->D2
NAND(Q1,Q2)-> D0
(Donc on a une porte NAND qui prend Q1 et Q2 en entrée et se rapporte sur D0)

On trace le chronogramme en partant de Q0=Q1=Q2=0 (=> obligé D0=1)
On voit que ça boucle sur une séquence de 5 états différents.

Ce que Mathys aime:
* Qu'on lui dise que c'est en synchrone => pas de glitch,...
* c'est un registre à décalage (un peu particulier)
* C'est un bidule en Modulo 5
* Quel que soit l'état initial des Qi (meme un état qu'est pas dans la séquence), on retombe toujours sur la meme séquence (on peut le montrer en prenant une condition initiale qu'est pas dans la séquence , genre 0,1,0)


Ce que Mathys aime pas:
* Qu'on ait pas encore réfléchi à la fréquence max pour la CLK!
=> Il va d'office demander à quelle fréquence max on peut monter.
Faut lui parler de setup time & hold time + définir. La solution pour cet exo, c'est: période minimum de CLK = Tprop_bistable + Tprop_porteNAND


Q2 (/15pts)
----------
a)
---
Faire le schéma bloc + architecture software d'un chronomètre précis à 1/100e de seconde. Il faut pouvoir prendre 32 temps intermédiaires et faire un affichage avec 5 afficheurs 7 segments. Utiliser le moins de composants possible! C'est avec un 83Cxx.

On met:
* 1µC : Attention série 83Cxx=> pas besoin de ROM ou RAM externe, car il contient déjà une MaskROM en interne + la RAM interne.

* Des boutons de commande.
J'ai mis Un bouton Start/stop sur l'interruption INT1; 1 bouton remise à 0 du compteur sur INT0; 1 bouton pour prendre les temps intermédiaires, sur P1.0 (j'explique pourquoi après). Tous les boutons sont montés avec pull-down.

* le dispositif d'affichage:
On a 5 afficheurs. Je détaille le montage pour 1 d'entre eux. :
On balance les données par le bus data (AD7->AD0), par l'intermédiaire d'un latch (pas oublier!) pour que la valeur soit maintenue, m^eme après la disparition de la valeur sur le bus.
Pour faire joli, on met une série de buffers et de résistances entre le latch et l'afficheur.
On commande le latch avec LE connecté à un fil du bus d'adresse (par exemple A15). => pour écrire un chiffre dans le code C, on écrit dans une variable à l'adresse 1000 0000 0000 0000 (A15=1, les autres=0)
Attention il faut aussi que le signal WR# soit activé => on utilise une porte AND: LE = AND(NOT(WR#), A15)
Idem pour les autres afficheurs, mais avec d'autres pistes A14, A13, A12, A11.


Concrètement, on va utiliser le Timer2 en mode Capture (voir Chap16).
Ce mode permet :
* d'avoir un compteur bits
* Quand on met un flanc descendant sur P1.0, il sauve la valeur du compteur et lance une interruption
* Quand le compteur déborde, il lance une interruption.


b)
---
Y a-t-il une fréquence d'horloge idéale?

Il faut juste s'arranger pour tomber juste sur des multiples de 1/100s.


c)
---
Donner les grandes étapes du code en C


Ici, pas besoin de détailler les initialisations,...
En gros, on dit:

//Variables globales:
*Nombre de débordements du timer
* historique des 32 temps

_interrupt(débordement du timer2) ... {
* remetre compteur à 0
* afficher le temps sur les afficheurs (par exemple...)
}

_interrupt(clik sur P1.0) ... {
* retenir le temps
}

_interrupt(INT0) ... {
*remettre à 0 le compteur et le nombre de débordements
}

_interrupt(INT1) ... {
if(en marche)
arr^ter timer + désactiver interruptions
else
lancer timer + activer interruptions
}

main(){
*initialisations
*activer interruptions

while infini
}


En fait jme suis rendu compte que l'exo est proposé au bas d'un des slides du Chap 16, sur le Timer2... Mais qui fait les exos??!!
Good luck

Post nº4 (id3920) envoyé par Shayan  le 23 Jan 2009, 15:19
Bon, à mon tour:

Q.1 (5pts)---------------------------------------
Un bistable JK, en toggle (J=K=Vdd) + Une CLK (normale).
A la sortie de JK, on prend Q avec la CLK, on les fait passer par une porte AND, ca nous donne notre sortie A. On fait la même chose avec Q'->sortie B.

a) Donner la fonction en negligeant les temps de propagation:
En gros, après avoir fait le chronogramme, on constate que CLK=A+B, ou encore que A et B représentent (en alternance) une impulsion sur deux de la CLK.

b) Montrer que le fonctionnement n'est plus correct si on prend compte des t_prop:
En effet, il suffit de faire les chronogrammes pour remarquer qu'il y a des impulsions parasites (une impulsion sur deux plus précisément).

c) Remédiez à ce problème:
A ce qui parait il y a plusieurs solutions, moi j'ai proposé de faire retarder les impulsions de CLK qui sont juste avant chaque porte AND, pour que ces signaux changent d'état EN MEME TEMPS QUE Q (et Q') ( en effet, c'est de là que vient le problème).
On les fait retarder avec des monostables, en choisissant bien les valeurs de RC. Attention, RC des deux portes est different car les t_prop de Q' est plus grand que t_prop de Q.




Q.2 (15pts)---------------------------------------
On souhaite connecter 6 périphériques identiques à un 83C. On suppose que chaque périphérique est compatible avec le bus multiplexé. Ils contiennent chacun 126 registres de 8 bits, dont les 45 premiers sont en lecture, et le reste en lecture et écriture.

a)faites le schéma LE PLUS SIMPLE
8 bits--> 8 données --> P0=> D7..D0
126 adresses--> 7 bits nécessaires (2^7=128) --> P0=> A6..A0 .
6 périphériques --> 6 bits --> P2=> A13..18

On connectera P2 sur les chip select de chaque boitier, et sera actif lorsque le bit correspondant vaut 1 (par ex).
Le decodeur d'adresse sera donc inutile.

Cmt ca marche: On met les adresses sur P0 et P2. Le bit est donc désigné. Ensuite, pour écrire ou lire la donnée, on la fait transférer par P0. Nous n'avons donc pas besoin de latch/démultiplexage temporel car les périphériques sont compatibles (Il se souviendra de l'adresse grâce à un bon code).

Attention, il faut un WR' et RD' connecté à WR' et OE' de chaque périphérique.

Il faut aussi que le périphérique sache à quel moment il travaille avec des adresses, et à quel moment ce sont des données (à fournir ou à écrire). Pour lui dire que l'on veut écrire sur le registre/bit, il suffit d'activer notre WR', une fois que les données sont stables. Pour lui dire qu'il peut envoyer la donnée nécessaire, on connecte ALE à LE chaque périphérique en supposant qu'ils possèdent des espèces de latchs internes.

b) donner le code pour lire et écrire le 78e bit du registre 2:

78e bit: 01001110 (de P0)
2e périphérique xx000010 (de P2) (xx=00 arbitraire)
--> DPTR= 00000010 01001110 qu'il faudra le mettre en HEXADECIMAL!

et ensuite voir ch. XII. avec mémoires XDATA: MOVX A,@DPTR etc...







Post nº3 (id3902) envoyé par Rob  le 21 Jan 2009, 11:41
1) Une paire NMOS et PMOS de inverseur (en gros le montage CMOS de base), on veut allumer une LED (<=> diode) lorsque l'entree est a l'etat HI (la question duale est deja sortie où c'est pour l'etat LO). Proposer un montage avec un resistance. A quoi sert la resistance? En gros on met le montage avec les MOS, et met en serie la resistance et la LED entre l'alimentation et le point de sortie (entre les deux MOS). On voit que quand on est a l'etat HI, le NMOS est passant, on a donc 9V - R*I - Vled - VNmos = 0.

Il demande ensuite de donner la valeur de la resistance max pour avoir 12mA passant pas la LED (les caracteristiques de la LED, du PMOS (inutile ici) et du NMOS sont donnees). Attention il y a deux courbes par caract, il faut choisir la plus defavorable (prend en compte dispersion etc...)

2) Je crois que la question est deja sortie les annees precedentes. Interfacage d'un ecran LCD avec un 8051. En gros relie comme d'hab mais le LCD n'a que 4 registres des tailles 4 bits donc pas besoin de multiplexage du bus de donnees (il n'y a que 8 bits d'adresse aussi). J'ai mis des D latch aux entrees donnees du LCD parce que ce dernier a besoin d'un certain temps pour echantillonner les donnees (1,9µs), le LE etant active par le signal WR#. Penser aussi au chip select. En gros tant que tout est bien justifie, on a quand meme certains degres de liberte (notamment au niveau de l'equation du CS, j'ai juste mis CS# = NOT(A15))
Il faut aussi ecrire un peu de code (C ou assembleur pour les plus motives), le chapitre 12 (je crois, sur les instructions propres au 8051) est utile (surtout pour ceux, genre moi, qui croyait qu'il etait un peu inutile a lire). En particulier l'instruction "noop" pour faire passer un peu de temps.

Mr Mathys est vraiment cool, il ne m'a jamais regarde genre "mec, t'es trop un con" et vous suit dans votre raisonnement en vous expliquant exactement ce qu'on aurait du faire pour ameliorer. Un oral astucieux et intelligent, a passer.
(ca change des oraux "clashe moi un peu au tableau la demo n°146 bis et son corollaire 3")

Post nº2 (id3895) envoyé par alex  le 19 Jan 2009, 23:57
(suite du post précédent)
b) Cas le plus défavorable: Vbatterie minimale (3V) et Vds maximale (2,5V sur le graphe)
Le courant minimal de 9mA correspond sur la caractéristique à une tension Vak=1,95V.
Rmax.0,009 = 3 - 1,95 - 2,5 ==> Rmax

Post nº1 (id3894) envoyé par alex  le 19 Jan 2009, 23:55
Salut à toi qui fait partie de la majorité pétée de l'auditoire ^^

Rdv oral à 14h, mr mathys arrive 20min en retard (bon c'était le premier jour d'oral...)

Un énoncé parmi d'autres est tiré au sort, et tout le monde cravache sur les mêmes questions donc.

Deux questions:

QUESTION 1 (sur 5 points)
------------------------------------------
"On désire allumer une LED par la sortie d'un inverseur en technologie CMOS, alimenté par une batterie NiMH dont la tension est comprise entre 3V et 4,5V.
La LED est une diode qui émet de la lumière lorsqu'elle est traversée par un courant direct. Sa caractéristique (Id,Vak) est donnée ci-dessous, ainsi que celles des deux transistors de sortie de l'inverseur, le dédoublement des courbes tient compte de la dispersion de fabrication.

a) Proposer un schéma de connexion comprenant l'inverseur, la LED et une résistance R et qui allume la LED lorsque l'entrée de l'inverseur est LO. Justifier la présence de R.
b) Déterminez la valeur max de R pour que le courant circulant dans la diode allumée soit au minimum de 9mA, dans le cas le plus défavorable."
------------------------------------------
Ca ressemble énormément à une question de 2008, voire tout-à-fait la même chose. Faut pas s'embrouiller avec les caractéristiques de la LED, du NMOS et du PMOS qui sont fournies. J'avais fait une inversion de signe et hop un point en moins au final.
a)On fout donc l'entrée LO sur les deux transistors. NMOS sera bloquant, PMOS passant. Le courant Id part donc de la tension de la batterie, passe dans le PMOS, dans R et finalement dans la LED avant de finir dans la masse. Vbatterie = Vak + Vr - Vds où Vds est la tension drain-source du PMOS. Vue l'allure exponentielle il faut R sinon le courant serait énorme.
b) Cas le plus défavorable: Vbatterie minimale (3V) et Vds maximale (2,5V sur le graphe)
Le courant minimal de 9mA correspond sur la caractéristique à une tension Vak=1,95V.
Rmax.0,009 = 3 - 1,95 - 2,5 ==> Rmax


oraux.pnzone.net - infos - 5ms