Changes between Version 14 and Version 15 of MicroTmeI2c


Ignore:
Timestamp:
Feb 23, 2013, 11:03:23 PM (12 years ago)
Author:
Franck Wajsburt
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MicroTmeI2c

    v14 v15  
    254254et cela complexifie le contrôle par le PIC. Dans notre cas nous n'avons qu'un seul maitre, en conséquence il y a pas mal d'information inutiles dans la documentation. Pour comprendre la gestion du bus par le PIC, c'est-à-dire comprendre quels sont les registres à consulter et modifier pour réaliser une transaction, vous devez vous reporter aux chronogramme de transaction I2C maitre. Vous pouvez voir qu'une transaction se fait en controlant les bits SEN, PEN et SSPIF.
    255255
    256 = Le modèle de programme fourni =
    257 
    258 Nous donnons un programme qui fait une rampe sur le DAC: [attachment:i2c_dac.asm].
    259256
    260257= Travaux pratiques =
    261258
    262259=== __Experience n°1__ ===
    263  * A la lecture de la documentation commentez chaque ligne de l'initialisation du module I2C et des envois au DAC.
     260 * A la lecture de la documentation commentez chaque ligne de l'initialisation du module I2C et des envois au DAC. Donnez un estimation de la durée de chaque étape et donc de la durée d'envoi d'un caractère.
    264261
    265262=== __Experience n°2__ ===
     263 * Quelle est la fréquence du signal ?
    266264 * Augmenter la fréquence en faisant des trames i2c plus longue.
    267265 * Envoyer une dent de scie sur 2 sorties.
     
    274272   Expliquez le principe de fonctionnement de l'I2C avec les interruptions,
    275273   je ne vous demande pas de le programmer vous n'aurez pas le temps.
     274
     275
     276= Le modèle de programme fourni =
     277
     278Nous donnons un programme qui fait une rampe sur le DAC. Il n'a pas les commentaires puisque vous devez les ajouter. Notez aussi l'usage des macros pour la réservation des adresses de la mémoire, et surtout l'usage des macros pour les différentes étapes du transfert I2C. Je vous demande (suggère) de creer 2 fichiers i2c_macro.inc et i2c_fun.asm, que vous pourrez inclure respectivement au début et à la fin de votre programme i2c (c'est comme pour le lcd).
     279
     280{{{
     281        list       p=16f877
     282        errorlevel -302
     283        list       n=0
     284        include    "p16f877.inc"
     285;-----------------------------------
     286        VARIABLE bank0_break=0x20
     287        VARIABLE bank1_break=0xA0
     288        VARIABLE bank2_break=0x110
     289        VARIABLE bank3_break=0x190
     290        VARIABLE bank4_break=0x70
     291bank0   macro
     292            VARIABLE bank_current=bank0_break
     293        endm
     294bank1   macro
     295            VARIABLE bank_current=bank1_break
     296        endm
     297bank2   macro
     298            VARIABLE bank_current=bank2_break
     299        endm
     300bank3   macro
     301            VARIABLE bank_current=bank3_break
     302        endm
     303bank4   macro
     304            VARIABLE bank_current=bank4_break
     305        endm
     306byte    macro register_name, size
     307            CBLOCK bank_current
     308                register_name : size
     309            ENDC
     310            VARIABLE bank_current=bank_current+size
     311        endm
     312;-----------------------------------
     313        CONSTANT DAC_ADDR = 0x40
     314        CONSTANT READ     = 1
     315        CONSTANT WRITE    = 0
     316i2c_init macro
     317            call i2c_init_fun
     318        endm
     319i2c_start macro
     320            call i2c_start_fun
     321        endm
     322i2c_stop macro
     323            call i2c_stop_fun
     324        endm
     325i2c_lwrite macro val
     326            movlw val
     327            call i2c_wwrite_fun
     328        endm
     329i2c_fwrite macro reg
     330            movf reg,w
     331            call i2c_wwrite_fun
     332        endm
     333;-----------------------------------
     334        BANK0
     335        byte  val, 1
     336;-----------------------------------
     337        org     0
     338        PAGESEL reset
     339        goto    reset
     340        org     4
     341        return
     342
     343reset
     344        i2c_init
     345
     346main
     347LOOP
     348        i2c_start
     349        i2c_lwrite DAC_ADDR|WRITE
     350        i2c_lwrite 0
     351        i2c_fwrite VAL
     352        i2c_stop
     353        decf       VAL,f
     354        goto       LOOP
     355;-----------------------------------
     356i2c_init_fun
     357        BANKSEL TRISC
     358        bsf     TRISC,3
     359        bsf     TRISC,4
     360        bcf     PIE1,SSPIE
     361        bsf     SSPSTAT,SMP
     362        bcf     SSPSTAT,CKE
     363        movlw   D'49'
     364        movwf   SSPADD
     365        clrf    SSPCON2
     366        BANKSEL SSPCON
     367        movlw   0x28
     368        movwf   SSPCON
     369        bcf     PIR1,SSPIF
     370        return
     371i2c_start_fun
     372        BANKSEL SSPCON2
     373        bsf     SSPCON2, SEN
     374        clrf    STATUS
     375        btfss   PIR1, SSPIF
     376        goto    $-1
     377        bcf     PIR1, SSPIF
     378        return
     379i2c_wwrite_fun
     380        movwf   SSPBUF
     381        btfss   PIR1, SSPIF
     382        goto    $-1
     383        bcf     PIR1, SSPIF
     384        return
     385i2c_stop_fun
     386        BANKSEL SSPCON2
     387        bsf     SSPCON2, PEN
     388        clrf    STATUS
     389        btfss   PIR1, SSPIF
     390        goto    $-1
     391        bcf     PIR1, SSPIF
     392        return
     393;-----------------------------------
     394        END
     395}}}