
Plan de l’espace mémoire interne au RTC:

Dans le programme qui suit, on s’intéresse uniquement à l’heure et aux minutes mais il faut tout de même initialiser les autres valeurs. Les registres A, B, C et D permettent la configuration du RTC.
Pour initialiser le RTC, il faut suivre un protocole donné se divisant en trois étapes:

ETAPE 1:
La 1er etape consiste à empecher le RTC à faire des mises à jour toutes les secondes pour pouvoir le configurer; on le fige grâce au bit 7 SET . Ensuite on met le bit 24/12 à 1 pour indiquer au RTC que l’on veut un format d’heure 24h. Puis on met le bit DSE à 1 pour autoriser le changement d’heure été/hiver.
Le bit DM doit être mis à 0 pour avoir un format de donnée de type BCD, cela simplifie le traitement des données pour l’affichage.
ETAPE 2:
On doit écrire les valeurs de l’heure et de la date actuelle pour l’initialisation du RTC. C’est à dire que lorsqu’on initialise le RTC, il faut entrer l’heure et la date en cours pour que le RTC commence à compter dés son initialisation.
ETAPE 3:
Cette dernière étape consiste à remettre le bit SET à 0 pour autoriser les interruptions automatiques du RTC toutes les secondes pour une mise à jour de l’heure et de la date.
Avant d’utiliser le RTC, il faut s’assurer de son bon fonctionement. Pour cela, il faut lire le registre D.

Le bit VRT est un indiquateur de disfonctionement matériel. Si VRT=0 alors le RTC est défaillant.
Il faut maintenant écrire dans le registre A pour ordonner le déclenchement de l’oscillateur interne.

La commande #$A0 permet de faire cela.
A chaque interruption de mise à jour des données (chaque seconde), une interruption IRQ est généré par le composant. Le traitement de cette interruption consiste en l’affichage des données du composant.
Affichage des heures, minutes et secondes ces 3 données de type BCD sont respectivement situées aux adresses $1604, $1602 et $1600.

En fin de routine d’interruption, il faut replacer le bit UF du registre C à ‘0’ pour pouvoir redétecter une interruption de mise à jour des données.
Pour remettre à ‘0’ ce bit, il faut effectuer une lecture du registre C.
Liaison Capteur de Température Dallas 1621 <=> 68HC11 :
Le 68HC11 communique avec le capteur de température par l’intermédiaire du bus i2c, ce bus doit être configuré avant sont utilisation. Plusieurs registres permettent de le configurer et de connaître sont état.
Le circuit 8584 est composé de 5 registres:
S0 (registre tampon de donnée et de décalage)
S0’(adresse propre du 8584)
S1 (registre de commande et de status)
S2 (registre de configuration des horloges)
S3 (vecteur d’interruption)
La sélection des différents registres du 8584 se fait par les bits 4 et 5 (Es1 Es2) du registre de contrôle S1.
- Configuration de la liaison I2C (fonction init_i2c)
1.Sélectionner le registre d’adresse propre S0’(registre S1=$00)

2.Ecrire l’adresse du composant I2C esclave (registre S0)
3.Sélectionner le registre S2 (registre S1=$20)

4.Configuration des horloges du système I2C (registre S2)

S24=‘1’et S23=S22=‘0’ -> fréquence d’horloge de 8 MHz
S22=S20=‘0’ et S21=‘0’ -> fréquence SCL de 90KHz
- Utilisation du bus I2c (fonction start_i2c)
1.Vérifier que le bus est libre (bit BB=‘1’ dans le registre S1 en lecture)

2. Indiquer l’adresse du boîtier esclave (registre tampon S0)
3. Acquérir le bus (Envoi d’une condition de START par la mise à ‘1’ du bit STA dans le registre S1 en écriture)

4. Attendre une réponse du boîtier esclave (réception d’un acquittement ACK). Test du bit Lrb du registre S1. Si la réception de l’acknowledge est validée Lrb=‘1’

5.Envoyer l’adresse du composant interlocuteur et le type d’action à effectuer lire ou écrire.

Ecriture (bit Lsb de l’adresse - > signal R/W=‘0’)
L’écriture d’un octet est suivie d’un test vérifiant la réception d’un acquittement (ACK)
Lecture (bit Lsb de l’adresse - > signal R/W=‘1’)
La lecture d’un octet est suivi de l’envoi d’un acquittement (ACK) sauf si c’est le dernier (ou le seul) octet à lire.
- Fin d’utilisation du bus I2C (fonction STOP_I2C)

Le tableau tab_cmd contient les ordres à envoyer au capteur de température
tab_cmd fcb $EE,$AA,$AC,$09 octet de commande du DS1621
EE Start conversion
AA read température
AC accès aux registre de configuration
Configuration du DS1621
Ecriture dans le registre de configuration

Une conversion est effectuée à chaque fois qu’un ordre Start Convert est reçu. Le bit DONE passe à ‘1’ à chaque fin de conversion.
Lecture du registre de status (fonction Conv_done )

La valeur de la température ambiante est contenue sur 2 octets. Le bit 7 des 8 bits de LSB représentent la partie décimale de la température. Les 8 bits de MSB représentent la partie entière. La valeur de la température ne peut être lu directement. Il faut effectuer une conversion de cette valeur:

Type d’affichage :

On effectue une division entière par 10 pour séparer les dizaines et les unités. Le quotient de cette division correspond aux dizaines et le reste de la division correspond aux unités.
Exemple : le chiffre complet est 24, on divise 24 par 10 : le quotient est 2 et le reste est 4. Donc on affiche 2 et 4 ensuite le ‘°’ et le ‘C’.
Télécharger le source du programme, cliquer ici.