Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Autres EDI > MPLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/02/2011, 14h45   #1
Gagura
Invité de passage
 
Inscription : avril 2009
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 7
Points : 0
Points : 0
Par défaut [PIC 16F688] Emission-réception infrarouge

Bonjour, je suis débutant dans le monde de la programmation en Assembleur.

J'aimerais concevoir un badge electronique qui, à l'aide d'un PIC 16F688, me permette d'envoyer une trame specifique à un autre badge récepteur.

Le coeur du système sera un écran LCD monochrone graphique de 48 84 pixels.
A l'aide du PIC on fera un système de communication infrarouge.

La trame est la suivante :

Vitesse de modulation 56khz communication
nombre mini d'impulsions par burst 10
vitesse de transmission 4800bauds
pas de modulation NRZ
8 bits de donnée
1 bit de start
1 bit de stop
pas de bit de parité
12 octets par message en liason serie asynchrone
premier octet synchronisation 0xAA les 10 suivants correspondent au message et le dernier octet sera checksum.
1 message toutes les 2 secondes.

J'ai pris le module récepteur TSOP 2156 de chez farnell.
Le module d'émission est le tsal6200

L'écran qu'on a choisi est le PCD8544

J'ai fait un petit programme pour tester l'envoi de n'importe quoi sur le PIC avec les paramètres reglés comme précédemment mais je ne retrouve rien en sortie.
Si vous avez une idée de mon erreur j'en serais fort reconnaissant.

Voici mon programme :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
;*******************************************************************
;
; Ce programme fait clignoter les leds 
;
;*******************************************************************
	errorlevel	-302	; supprime l'alerte sur les banks

;*******************************************************************
; configuration du compilateur
;*******************************************************************
	list	p=16F688		
	include <p16F688.inc>	

;*******************************************************************
; configuration du registre d'état du microcontroleur
;*******************************************************************
	__CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_OFF & _XT_OSC

;*******************************************************************
; assignation des ports du pic
;*******************************************************************
 ;#define	entre		PORTC,5		; RC5 en entrée
#define	sortie		PORTC		; RC4 en sortie


;*******************************************************************
; definition des variables
;*******************************************************************
	cblock	0x0c	; adresse de debut de la RAM pour les variables
	w_temp:1
	status_temp:1
	temp0:1
	temp1:1
	temp2:1
	temp3:1
	endc

;*******************************************************************
; definition des macros
;*******************************************************************
bank1	macro
	bsf	STATUS,RP0	; sélectionne la page1
	endm

bank0	macro
	bcf	STATUS,RP0	; selectionne la page2
	endm

;*******************************************************************
; Début du code source
;*******************************************************************
	org	0x000		; vecteur de reset
	goto	debut		; sauter au programme principal

	org	0x004		; vecteur d'interrruption
	retfie

debut	
	call	init		; saut au sous programme d'initialisation 	
boucle	
	movlw	b'11110000'	
	movwf	sortie		
	movlw	.250	
	call	tempo	
	movlw	.250		
	call	tempo	
	movlw	b'10101000'	
	movwf	sortie	
	movlw	.250	
	call	tempo	
	movlw	.250	
	call	tempo	
	movlw	b'11100110'	
	movwf	sortie		
	movlw	.250		
	call	tempo	
	movlw	.250	
	call	tempo	
	movlw	b'01010101'	
	movwf	sortie		
	movlw	.250		
	call	tempo		
	movlw	.250		
	call	tempo	
	goto	boucle

;*******************************************************************
;
; définitions des sous routines
;
;*******************************************************************

;*******************************************************************
; initialisation du micro controleur
;*******************************************************************
init	bank1
	movlw	b'111111'	; configure le port A en entrée
	movwf	TRISA		
	movlw	b'101100'	; configure RC5 en entrée Asynchrone (RX) et RC4 en sortie Asynchrone (TX) ensuite on a RC3 et RC2 en entrées et RC1 RC0 en sortie
	movwf	TRISC		; 
	movlw	b'11111111'	; Habilite toutes les interruptions
	movwf	INTCON
	movlw	b'11100010'	; Interruptions périphériques
	movwf	PIE1
	movlw	b'1100111'	; Fréquence d'oscillation de 4Mhz
	movwf	OSCCON	
	movlw	b'00100010'	; Transmission 8 bits, transmit enable, Asynchrone. On a SYNC=0 et BRGH=0
	movwf	TXSTA
	movlw	b'10011111'	; Serial port enabled, réception 8 bits, enables receiver
	movwf	RCSTA
	movlw	b'00000010'	; On a BRG16=0
	movfw	BAUDCTL		; Le fait d'avoir SYNC=0 BRGH=0 BRG16=0 nous permet de déterminer le Baud, on doit precharger SPBRG à 12.
	movlw	b'1100'		; on precharge SPBRG à 12 pour obtenir un vitesse de transmission de 4800 Bauds
	bank0
	clrf	PORTC		; efface les PORTA et B
	clrf	PORTA
	return			; fin du sous programme

;*******************************************************************
; temporisation d'environ 1 ms
;*******************************************************************
tempo	
	movwf	temp0		; on assigne Wreg = 250 à temp0
boucle2	
	movlw	.249		; on assigne 249 à Wreg
	movwf	temp1		; on donne la valeur de Wreg à temp1
boucle3	
	nop
	decfsz	temp1,F		; On décremente la valeur de temp1, si on arrive à 0 on saute la ligne suivante, donc dans ce cas là on sort de la boucle
	goto	boucle3		
	decfsz	temp0,F		; On décremente la valeur de temp0 (qui avant valait 1) qui vaut 250, ceci veut dire que la boucle précédente sera faite 250 fois.
	goto	boucle2	
 	return


	end			; fin du programme
Gagura est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 19h36   #2
BabyC
Invité de passage
 
Inscription : septembre 2010
Messages : 16
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 16
Points : 2
Points : 2
"Ce programme fait clignoter les leds" LoL

T'aurais pu changer le nom du programme du TD.

@+
BabyC est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h36.


 
 
 
 
Partenaires

Hébergement Web