Horloge numérique multifonctionnelle sur le microcontrôleur Attmega8. Schéma et description. Horloge "tic-tac" avec réveil sur le microcontrôleur Atmega48 Horloge sur le microcontrôleur atmega

Cette version de la montre est réalisée de manière à simplifier au maximum le circuit, à réduire la consommation d'énergie et, à terme, à obtenir un appareil qui se glisse facilement dans votre poche. En choisissant des batteries miniatures pour alimenter le circuit, un montage CMS et un haut-parleur miniature (par exemple, provenant d'un téléphone portable qui ne fonctionne pas), vous pouvez obtenir un design légèrement plus grand qu'une boîte d'allumettes.
L'utilisation d'un indicateur super lumineux vous permet de réduire le courant consommé par le circuit. Une réduction de la consommation de courant est également obtenue en mode "LoFF" - l'indicateur est éteint et seul le point clignotant du chiffre de poids faible de l'horloge est allumé.

Indication
La luminosité réglable des indicateurs vous permet de choisir l'affichage des lectures le plus confortable (et encore une fois de réduire la consommation d'énergie).
La montre dispose de 9 modes d'affichage. La commutation entre les modes s'effectue à l'aide des boutons « plus » et « moins ». Avant que les lectures elles-mêmes ne soient affichées, une brève indication sur le nom du mode est affichée sur les indicateurs. La durée de l’affichage des indices est d’une seconde. L'utilisation d'invites à court terme a permis d'obtenir une bonne ergonomie de la montre. Lors du basculement entre les modes d'affichage (qui sont nombreux pour un appareil aussi simple qu'une montre ordinaire), il n'y a pas de confusion et il est toujours clair quelles lectures sont affichées sur l'indicateur.

La correction des lectures affichées sur l'indicateur est activée en appuyant sur le bouton "Correction". Dans ce cas, une invite à court terme s'affiche pendant 1/4 de seconde, après quoi la valeur ajustée commence à clignoter à une fréquence de 2 Hz. Les lectures sont corrigées à l'aide des boutons plus et moins. Lorsque vous appuyez longuement sur le bouton, le mode de répétition automatique est activé à la fréquence spécifiée. Les fréquences de répétition automatique pour appuyer sur un bouton sont : pour les heures, les mois et le jour de la semaine - 4 Hz ; pour les minutes, l'année et la luminosité de l'indicateur - 10 Hz ; pour la valeur de correction - 100 Hz.
Toutes les valeurs ajustées, à l'exception des heures, des minutes et des secondes, sont écrites dans l'EEPROM et restaurées après la mise hors et sous tension. Les secondes pendant la correction sont remises à zéro. Tous les modes sauf heures-minutes, minutes-secondes et LoFF sont automatiquement renvoyés. Si aucun bouton n'est enfoncé dans les 10 secondes, l'horloge passe en mode d'affichage heures-minutes.
En appuyant sur le bouton « Alarme On/Off ». Le réveil s'allume/s'éteint. L'activation de l'alarme est confirmée par un bref bip sonore. Lorsque le réveil est allumé, le point dans le chiffre de poids faible de l'indicateur s'allume.
En mode "Corr", une constante de correction est affichée sur l'indicateur dont la valeur initiale est de 5000 microsecondes par seconde. Lorsque l'horloge est en retard, nous augmentons la constante du décalage calculé en microsecondes par seconde. Si l'horloge est pressée, alors on réduit la constante selon le même principe.

Schème

Je propose de répéter le circuit d'horloge électronique sur le microcontrôleur ATmega 8, avec des informations affichées par de grosses LED. Montre fonctionnelle, testée. Le firmware est actuellement en cours de finalisation. Un tableau plus grand est en cours de réalisation, qui sera à une distance de 5 mètres du bloc principal. Il y aura également une indication sur le bloc principal - pour dupliquer le grand tableau. Le schéma de principe de l'horloge LED est présenté sur la figure - cliquez pour agrandir.

Description de l'appareil

1. Fonctions.
1.1 Horloge. Le format d'affichage de l'heure est de 24 heures. Correction numérique de la précision du trait.


1.2 Thermomètre. Mesure de la température à partir de deux capteurs dans la plage -55,0 oC - 125,0 oC.


1.3 Affichage alternatif des informations sur l'indicateur.
1.4 Contrôle de la source d'alimentation principale.
1.5 Utilisation de la mémoire non volatile du microcontrôleur pour enregistrer les paramètres et les paramètres lorsque l'alimentation est coupée.
1.6 Trois boutons pour l'installation et la configuration : PLUS, MOINS, ENSEMBLE.

Fonctionnement de l'appareil

Lorsque vous l'allumez pour la première fois, un écran de démarrage publicitaire apparaît sur l'écran pendant 1 seconde. Puis l'affichage de l'heure.
Cliquer sur RÉGLER LE TEMPS déplace l'indicateur en cercle depuis le mode montre principal (affichant l'heure actuelle) :
– mode d'affichage des minutes et des secondes. Si dans ce mode vous appuyez simultanément sur le bouton PLUS Et MOINS, alors les secondes seront réinitialisées.
– réglage des minutes de l'heure actuelle.
– régler l'horloge actuelle.
– le montant de la correction quotidienne de la précision de l'horloge. Symbole c et valeur de correction. Limites de réglage -25?25 sec. La valeur sélectionnée sera ajoutée/soustraite de l'heure actuelle chaque jour à 0 heure 0 minute et 30 secondes.
- symbole t. Réglez la durée d’affichage de l’horloge.
- symbole je. Temps d'affichage des symboles d'affichage de la température interne ( int).
- symbole d. réglage du temps d'indication de la température à partir du capteur interne.
- symbole o. Temps d'affichage des symboles d'indication de température externe ( dehors).
- symbole toi. réglage du temps d'indication de la température à partir d'un capteur externe.
- symbole P.. réglage de la durée d'affichage de l'économiseur d'écran publicitaire.
Réglage des limites pour le temps d'affichage 0-60 sec. S'il est réglé à 0, ce paramètre n'est pas affiché sur l'indicateur. Si tous les paramètres sont réglés sur 0, l'indicateur affichera une horloge.

Régler l'horloge

3.1 Dans tous les modes, maintenez les boutons enfoncés PLUS/MOINS Une installation rapide est effectuée.
3.2 Si les paramètres ont été modifiés, 10 secondes après la dernière modification, les nouvelles valeurs seront écrites dans la mémoire non volatile (EEPROM) et seront lues à partir de là lors de la remise sous tension. L'indicateur passera au mode heure principal.
3.3 Les nouveaux paramètres prennent effet lors de l'installation.

Contrôle de puissance

Le microcontrôleur surveille la présence de l'alimentation principale. Lorsqu'il est éteint, l'appareil est alimenté par une source interne. Pour réduire la consommation de courant, l'indicateur, les capteurs et les boutons sont éteints. L'horloge continue de décompter le temps. Lorsque l'alimentation est fournie par la source principale, toutes les fonctions sont restaurées.


À l'heure actuelle, des circuits imprimés sont en cours de développement, le circuit est en cours de correction et cela peut être fait collectivement. Si vous avez des idées et des suggestions pour améliorer la montre, écrivez sur le forum. Auteurs du design : Aleksandrovich & SOIR (Soir&C.E.A)

Probablement même pas facile horloge simple sur un microcontrôleur, et même des très simples. Ce projet sur le microcontrôleur Attiny2313 peut probablement être qualifié de projet d'une journée, puisqu'il a fallu un peu plus d'une journée pour créer cette horloge du début à la fin.

Pour créer cette horloge nous aurons besoin de :

  • Résonateur à quartz à 16 MHz – 1 pièce ;
  • Microcontrôleur Attiny2313 - 1 pièce ;
  • Condensateur de 22 pf à 27 pf - 2 pièces ;
  • Condensateur 220 N - 1 pièce ;
  • Stabilisateur 7805 – 1 pièce ;
  • Transistors – 4 pièces ;
  • Indicateur SA15-11GWA - 4 pcs (tout autre avec une anode commune est possible) ;
  • Bouton – 2 pièces ;
  • Résistance 100 Ohm – 8 pièces ;
  • Résistance 200 Ohm – 4 pièces ;
  • Résistance 10 kOhm – 1 pièce.
  • La nourriture est fournie à partir d'un simple.

Description du fonctionnement d'une horloge simple sur Attiny2313

Synchronisé par un résonateur à quartz avec une fréquence de fonctionnement de 16 MHz. En tant que compteur de temps, le circuit du microcontrôleur Attiny2313 exécute une minuterie de 16 bits avec un pré-échelonneur de 256, configuré pour générer une interruption lorsque le compteur atteint une valeur de 625. Par conséquent, le résultat est une interruption 100 fois par seconde.

L'intervalle de temps est en variables globales et à chaque interruption, il est nécessaire d'augmenter la valeur des millisecondes de 1. Si le nombre de millisecondes atteint 100, il est alors nécessaire d'augmenter les secondes de 1 et de réinitialiser la valeur des millisecondes. Et puis dans la même séquence jusqu'à des dizaines d'heures, qui sont réinitialisées lorsqu'elles atteignent 24 sans ajouter le chiffre suivant. L'horloge du microcontrôleur Attiny2313 est aussi simple que possible, elle n'affiche donc pas la date, l'heure d'été, etc.

Ainsi, on obtient la valeur de l'heure actuelle enregistrée en variables globales. Vous devez maintenant exporter ces valeurs. Étant donné que le nombre de ports du microcontrôleur n'est pas si grand, nous utilisons une caractéristique de vision telle que l'inertie. Les cathodes des quatre indicateurs d'horloge sont connectées en parallèle et les anodes sont contrôlées séparément, ce qui vous permet d'afficher un nombre sur n'importe quel indicateur à un moment donné.

En commutant rapidement le port B du microcontrôleur, auquel les cathodes sont connectées, et en commutant rapidement les anodes, nous pouvons créer l'impression que les 4 chiffres sont affichés, malgré le fait qu'un seul fonctionne à la fois. Autrement dit, si l'heure actuelle est 10h43, alors on affiche le chiffre 1 sur le premier indicateur d'horloge, après un court intervalle de temps (environ 1 ms) on affiche le chiffre 0 sur le deuxième indicateur, après 1 ms on affiche l'indicateur 4 par 3, après 1 ms on affiche l'indicateur 3 sur 4 et encore en cercle.

Leçon 23

Partie 1

Assemblage d'une horloge à l'aide du DS1307 et d'un indicateur LED

Aujourd'hui, nous continuerons notre travail avec le microcircuit, qui est une horloge en temps réel, commencé en , et , et nous allons maintenant essayer d'assembler une horloge dessus en utilisant non pas un indicateur à cristaux liquides, mais un indicateur LED à quatre chiffres fonctionnant sur le principe de l'indication dynamique. Nous avons tous vécu cela avec vous, nous avons également parcouru l'indication, un indicateur similaire était connecté, il ne nous sera donc pas si difficile de mettre en œuvre cela.

Mais, malgré toutes nos connaissances, la leçon ne s'annonce pas courte, mais au contraire, elle sera très approfondie, puisque monter une montre sur de tels indicateurs nécessite de résoudre de nombreux problèmes supplémentaires, d'autant plus que nous n'avons pas 32 endroits familiers, comme sur notre écran LCD, mais seulement 4 et un point ou deux points. Et toutes les lectures devront être affichées dans l'ordre d'une certaine file d'attente, et nécessiteront également que nous puissions organiser les changements de lectures (traduction) à l'aide de boutons, et peut-être même en utilisant un seul bouton dans le cadre de l'utilisation de seulement quatre chiffres.

Mais nous n'avons pas peur des difficultés, elles sont encore plus intéressantes.

Alors commençons à inventer quelque chose.

L'indicateur sera de ce type, dont le type à anode commune

Et voici à quoi ressemble l'indicateur dans la vraie vie

A en juger par les cellules mesurant 5 millimètres, il n'est pas difficile d'estimer sa taille.

Voici une vue de l'arrière

J'ai aussi un autre indicateur plus petit, mais le brochage est exactement le même que le précédent. Autrement dit, je le retire simplement de la planche à pain et j'en insère un autre, et tout fonctionne.

Les voici tous les deux à titre de comparaison

Voici le marquage du petit indicateur

Nous pouvons également utiliser des indicateurs distincts pour chaque chiffre, en les connectant en conséquence, le résultat sera le même. Ce type de connexion est généralement utilisé lorsqu'une horloge avec de grands chiffres est requise et qu'il est difficile de trouver un grand indicateur combiné. La méthode de connexion est clairement démontrée dans notre schéma dans Proteus, puisque j'ai également trouvé un indicateur combiné dans Proteus, mais pour une raison quelconque, il n'a pas fonctionné correctement pour moi (cliquez sur l'image pour agrandir l'image)

Nous nous souvenons bien de ce schéma dès la leçon. Seulement, il n'y avait que 2 indicateurs, nous en connecterons donc deux autres, deux autres commutateurs à transistor seront également utilisés, dont la base recevra les commandes via une résistance de limitation de courant de 2 kilo-ohms provenant des pattes du port. PB2 Et PB4. Nous sauterons la troisième broche du port B afin de l'utiliser dans une autre capacité alternative, comme broche matérielle PWM pour régler la luminosité de l'indicateur.

Créons un projet avec le nom MonClock1307LED, et nous reprendrons tout le code du module principal directement de la leçon en affichage dynamique, du projet Test08. À cette époque, nous n’avions pas encore de programmation modulaire et tout le code utile était contenu dans un module principal.

Tout d'abord, assemblons notre projet, connectons le contrôleur et flashons-le et voyons avec intérêt le résultat du code.

On voit que les deux bons indicateurs fonctionnent normalement. Mais il nous en faut quatre.

Pour commencer, nous ajouterons deux variables supplémentaires pour les deux bits inutilisés

non signéintje;

non signécarboniserR1=0, R2=0, R3=0, R4 =0 ; //chiffres des chiffres indicateurs

Déclarons également les broches du port de sortie correspondant à ces anodes dans la fonction port_ini(), incluant également la broche pour PWM

DDRB= 0b000 111 11;

Ajoutons également du code à la fonction ledprint

videimpression LED( non signéintnombre)

R1= nombre%10;

R2= nombre%100/10;

R3= nombre%1000/100;

R4= nombre/1000;

Ici, nous calculons toujours le résultat des chiffres manquants, et dans le deuxième chiffre, il y a eu quelques changements à cause de cela. que maintenant il n'est pas le dernier et que des centaines et des milliers doivent être rejetés.

Nous avons calculé les variables, il ne reste plus qu'à les afficher en quelque sorte sur l'indicateur.

Pour ce faire, nous allons modifier le code dans le gestionnaire d'interruption du minuteur

ISR( TIMER1_COMPA_vect)

si( n_count==0) { PORTB&=~(1<< PORTB0); PORTB|=(1<< PORTB1)|(1<< PORTB2)|(1<< PORTB4); segchar( R1);}

si( n_count==1) { PORTB&=~(1<< PORTB1); PORTB|=(1<< PORTB0)|(1<< PORTB2)|(1<< PORTB4); segchar( R2);}

si( n_count==2) { PORTB&=~(1<< PORTB2); PORTB|=(1<< PORTB0)|(1<< PORTB1)|(1<< PORTB4); segchar( R3);}

si( n_count==3) { PORTB&=~(1<< PORTB4); PORTB|=(1<< PORTB0)|(1<< PORTB1)|(1<< PORTB2); segchar( R4);}

N_compte++;

Si( n_count>3 ) n_count=0;

Ici, je pense que tout est aussi clair, on applique un zéro logique au transistor clé de la catégorie dont nous avons besoin, puisque nous savons que nos clés sont inverses et de l'autre côté il y en aura une, et on applique aussi des zéros logiques au les transistors clés des catégories qui existent actuellement ne devraient pas s'allumer, et nous comptons également non pas jusqu'à un, mais jusqu'à trois.

C'est ça.

Mais, comme nous avons maintenant un nombre accru d'indicateurs, le tour du même indicateur vient plus tard, c'est-à-dire que la vitesse de mise à jour des lectures d'un indicateur a diminué et nous devons légèrement reconfigurer la minuterie. Nous n’avons pas besoin d’apprendre comment faire cela.

OCR1AH= 0b00001111; //écrit un nombre dans le registre pour comparaison

OCR1AL=0b01000010;

Bon, faisons en sorte que notre compteur puisse compter non pas jusqu'à 99, mais jusqu'à 9999. Pour cela, dans la boucle nous n'écrirons pas 100, mais 10000

pour( je=0; je< 10000 ; je++)

Et on réduira aussi le délai, sinon à cette vitesse on n'attendra pas longtemps le quatrième chiffre

Délai_ms(10 );

Récupérons le code, flashons le contrôleur et voyons le résultat de notre travail

Maintenant, c'est une autre affaire. Nous disposons désormais d'un code fonctionnel pour organiser l'affichage dynamique d'un indicateur dynamique à quatre chiffres, donc dans prochaine partie Dans notre leçon, nous n’aurons pas à revenir sur cette question.

5 542

Ce circuit a été publié en 2008, sur le site http://radiokot.ru/circuit/digital/home/33/, et malgré des erreurs de circuit évidentes, le circuit fonctionne, beaucoup l'ont répété pendant cette période, sur le même site Il existe un grand sujet de forum où cet appareil est discuté. En plus du firmware de l'auteur, il existe également des ensembles de firmware sur le forum. Y compris pour les options de circuit lors de l'utilisation de divers indicateurs, à la fois avec une cathode commune et avec une anode commune. Archivez avec les firmwares testés et leurs codes sources en fin de page.

Je me suis souvenu de ce circuit lorsque j'avais besoin d'une simple "horloge primaire". Le circuit a été répété exactement, avec le seul changement: à la place de l'indicateur, un connecteur a été installé auquel la partie puissance de la «grande horloge» serait connectée. Afin de s'assurer que la montre fonctionne, le premier indicateur qui vient sous la main est connecté : XYLNH 420401B-0 - Je n'ai aucune idée de ce que signifie cette inscription sur le boîtier, mais l'indicateur de brochage coïncide complètement avec l'indicateur CC56-12SRWA recommandé par l'auteur, seulement une lueur bleue.

Le fonctionnement de l'horloge est très simple : utilisez le bouton S2 pour régler les minutes et le bouton S3 pour régler les heures. Le bouton Reset (S1), permet de régler l'heure à minuit, parfois utile, même si vous n'êtes pas obligé de la régler. Le point séparant les heures et les minutes clignote à une fréquence de 1,25 Hz, soit 0,4 seconde allumée, 0,4 seconde. Non.

En général, le schéma fonctionne. Mais si vous envisagez de l'utiliser tel quel, je vous conseillerais quand même d'augmenter la résistance des résistances R4-R11 à au moins 330 Ohms et de placer des transistors dans le circuit de contrôle de la cathode. Le processeur ATtini2313 est certes tenace, mais je ne pense pas qu'il faille le tourmenter dans ce mode.

Et quelques mots sur la programmation MK. J'ai utilisé le programmateur AVR ISP mkII avec le programme AVRDUDE_PROG 3.2

Avez-vous aimé l'article? Partager avec des amis: