+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    Invité de passage
    Inscrit en
    septembre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 16
    Points : 2
    Points
    2

    Par défaut

    "Ce programme fait clignoter les leds" LoL

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

    @+

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •