[GUIDE] Introduction à la domotique : microcontrôleurs PIC

Retrouvez dans ce forum, tous les guides et tutoriels sur la culture cannabique.
Si t'es un MacGyver du bricolage ou un Einstein du cannabis, poste ton guide/tutoriel dans la section "Propositions de guides et tutoriels".

Votre PC dispose t'il d'un port Rs232 Série ?

Oui
12
48%
Non
13
52%
 
Nombre total de votes : 25

Message
Auteur
Super Koala

Re: Introduction à la domotique : Les microcontrôleurs PIC

#16 Message non lu par Super Koala »

19. Minuterie cyclique

Comme je viens de recevoir une partie des composants que j'ai commandé, notamment une sonde de température numérique, j'ai eu envie de réaliser un petit montage pour afficher la température mesurée par la sonde sur mon ordinateur. Je ferai la partie sur les minuteries bientôt ^^
Dernière modification par Super Koala le 14 janv. 2011, 13:30, modifié 1 fois.

Super Koala

Re: Introduction à la domotique : Les microcontrôleurs PIC

#17 Message non lu par Super Koala »

20. Le module USART

USART signifie "Universal Synchronous Asynchronous Receiver Transmitter".

C’est donc un module qui permet d’envoyer et de recevoir des données en mode série, soit de façon synchrone, soit asynchrone. Dans certaines littératures, vous retrouverez également le terme générique de SCI pour « Serial Communications Interface ».

Pour communiquer avec un ordinateur via le port série, nous allons avoir besoin d'un "adaptateur".

Le plus connu est le MAX232, moi j'utilise un HIN232 parce que j'ai que ça sous la main. Le principe est le même, téléchargez les datasheet pour vérifier comment il se câble. Il sert d'interface entre une liaison série TTL (0-5V) et une liaison série RS232 (+12 -12V) et ce avec une simple alimentation 5V.

Il existe plusieurs façons d'utiliser le module USART, dans cet exemple, j'ai choisis d'utiliser le mode asynchrone, 8 bits, 9600 bauds avec un quartz externe de 4 Mhz.

Voici le schéma de notre montage :
Schéma disponible quand j'aurai viré madame de mon pc à moi ^^

Pour le programme, je suis partis du programme "maquette" pour 16f628.

Comme on utilise pas les interruptions ni de variables, j'ai enlevé tout ce qui nous sert à rien pour ce montage et j'ai appuyé les commentaires sur l'utilisation du module USART. Je pense que ça peut aider à comprendre comment ça marche, du coup je vais moins expliquer sur le forum de façon à avoir plus de temps pour la suite. Si jamais quelqu'un se lance et ne comprend pas un point précis, je reste à disposition pour de l'aide dans la mesure du possible et je modifierai le tuto suivant la question posée et ça pour tout les programmes qui vont suivre.

Voici le projet MPLAB :
16f628_usart.rar
Maintenant il nous faut un programme sur notre ordinateur pour utiliser le port série. D'habitude j'utilise Hyper Terminal, outil intégré à Windows.
Depuis Windows Vista / Seven, cet outil n'est plus intégré, il faut télécharger un truc qui n'est pas forcement gratuit etc...

En conséquence, j'ai trouvé un équivalent de Hyper Terminal développé en C# par quelqu'un que je ne connais absolument pas mais qui marche à la perfection.

SerialPort Terminal Executable
SerialPort Terminal Source Code

Ce que doit faire ce projet :

- Brancher physiquement le module USART sur le port série d'un ordinateur (évitez les PC portables)
- Recevoir sur l'ordinateur le message de bienvenue "Salut les FCF"
- Si j'envoie un octet du PC vers le PIC, le PIC doit me répondre "OK"
- Si j'envoie l'octet correspondant à la touche "a", le PIC doit me répondre "R1" au lieu de "OK"
- Si j'envoie l'octet correspondant à la touche "b", le PIC doit me répondre "R2" au lieu de "OK"
- Si il y a une erreur de frame, le PIC doit me répondre "ER FERR"
- Si il y a une erreur overflow, le PIC doit me répondre "ER OVER"

Ici l'envoi du PC vers le PIC utilise un seul octet pour ne pas compliquer le code. Le PIC lui envois des messages sur plusieurs octets 1 / caractère + 1 pour CR + 1 pour LF)

J'ai mis en évidence un équivalent de "switch/select case" qui permet de réaliser différentes actions par rapport à l'octet reçu.

Ici j'utilise la touche "a" et "b". Dans le programme du PIC, j'utilise D'97' et D'98' pour représenter ces touches, voici le tableau qui va bien :
Table ASCII

Tester le projet :

Une fois bien sûr de la réalisation du montage (vérifiez bien tout les fils), on commence par brancher l'alimentation du montage sans brancher le port série.

Si notre LED "présence de tension" s'allume, on débranche l'alimentation du montage.

Branchez ensuite le montage sur le port série du PC.

Lancez l'application SerialPort Terminal
Sans-titre-2.jpg
Vérifiez ici que vous utilisez le bon port (chez moi COM3), 9600 bauds, pas de parité, 8 bits et 1 bit de stop.

C'est OK ? Cliquez "Open port" !

Les zones de réglages se grisent, c'est le moment de brancher l'alimentation de votre montage.
Sans-titre-4.jpg
Si tout va bien, vous allez recevoir le message de bienvenue venant du PIC (en bleu)

On va ensuite tester "a", "b" et par exemple "c"
Sans-titre-3.jpg
N'oubliez pas de fermer le port série dans SerialPort Terminal avant d'essayer de reprogrammer votre PIC :)

Information : Pour plus de détail technique sur l'utilisation du module USART, le mode synchrone, asynchrone etc, visitez le site de Mr Bigonoff et téléchargez le fichier pdf "part2", cherchez "le module USART en mode synchrone" et "le module USART en mode asynchrone".

Quelques précisions sur le programme du PIC :

Je vous laisse lire les commentaires dans le programme, j'ai détaillé au maximum. Si quelque chose n'est pas clair, MP moi pour adapter le tuto.

Code : Tout sélectionner

	; DIRECTION ( Entrée / Sortie) du PORTB
	; -------------------------------------
	DIRPORTB	EQU	B'00000110'	; Direction PORTB

	; Configuration actuelle ( * = pas utilisé ici )
	; ----------------------------------------------
	; RB1 en entree pour l'USART (TX)
	; RB2 en entree pour l'USART (RX)
	; RB0, RB3 à RB7 en sortie
Ici on va placer RB1 et RB2 en entrée pour pouvoir utiliser le module USART, RB2 est la broche TX, ça peut paraître étrange mais faut les régler en entrée ^^

Code : Tout sélectionner

	; Configuration de l'USART (banque 1 et 0)
	; ----------------------------------------
	BANK1
	movlw D'25'                ; 9600 bps avec un quartz 4Mhz
	movwf SPBRG					 ; Initialiser le registre SPBRG

	movlw b'00100100'          ; Configuration du registre TXSTA

	; Configuration actuelle ( * = pas utilisé ici )
	; ----------------------------------------------
	; Mode asynchrone
	; 8 bits
	; Emission autorisée
	; Prédiviseur interne haute vitesse

	; * b7 : XXX			      ; Non utilisé en mode asynchrone, laisser 0
	; b6 : TX9					  ; 0 = 8 bits, 1 = 9 bits
	; b5 : TXEN					 ; Autoriser l'émission
	; b4 : SYNC					 ; 0 = Asynchrone, 1 = Synchrone
	; * b3 : XXX				   ; Non utilisé en mode asynchrone, laisser 0
	; b2 : BRGH					 ; 0 = Prédiviseurs internes basse vitesse, 1 = Prédiviseurs internes haute vitesse
	; * b1 : TRMT				  ; Indique quand le registre TSR est vide
	; * b0 : TX9D				  ; Contient la valeur du 9ème bit à envoyer si utilisé

	movwf TXSTA             	; Initialiser le registre TXSTA
Si BRGH = 0 (basse vitesse) :
- SPBRG = (Fosc / (Débit * 64)) – 1

Si BRGH = 1 (haute vitesse) :
- SPBRG = (Fosc / (Débit * 16)) – 1

Dans notre exemple on utilise BRGH = 1 avec un quartz de 4Mhz :
- Fosc est la fréquence du quartz soit 4 000 000
- Débit est la vitesse de transfert soit 9600 bauds

SPBRG = (4 000 000 / (9600 * 16)) - 1 = 25

Ensuite on place TXEN à 1 pour autoriser l'émission et BRGH à 1 pour utiliser le prédiviseur interne haute vitesse et on initialise le registre TXSTA.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Avatar de l’utilisateur
Tyler
Modo honoraire
Modo honoraire
Messages : 2599
Inscription : 15 juil. 2011, 00:43

Re: [GUIDE] Introduction à la domotique : microcontrôleurs P

#18 Message non lu par Tyler »


Verrouillé