Lumière S.O.S. en morse et PIC16F88
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Lumière S.O.S. en morse et PIC16F88



  1. #1
    mgduc

    Lumière S.O.S. en morse et PIC16F88


    ------

    Bonjours, j’essaye de réalisé une Lumière qui créé le signal S.O.S. en Morse mais le problème est que le PIC ne fais qu'a sa tête. Même si dans le code tout semble bon, la séquence n'est pas la même. Au lieu de clignoter 3 petit coup, 3 grand coup et 3 petit coup. La led clignote 3 petit coup, 2 grand coup, 2 petit coup et reviens sur 2 petit coup sans jamais suivre ma séquence.

    Ou est le problème, j’aie vraiment tout essayer, même séparer ma séquence en plusieurs partit mais rien n'y fais, le résulta reste toujours le même. Cela peut-t-il venir de mon programmateur?

    Voila mon code.

    #include <p16f88.inc>
    __CONFIG _CONFIG1, _INTRC_IO & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _MCLR_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _CCP1_RB0 & _CP_OFF & _HS_OSC
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
    INT_VAR UDATA_SHR
    cmpt1 res 1
    cmpt2 res 1
    LEDON macro ;Macro pour Alumer Led Verte.
    BSF PORTB, 4
    endm
    LEDOFF macro ;Macro pour Éteindre Led Verte.
    BCF PORTB, 4
    endm
    STARTUP CODE 0x000
    GOTO INIT
    INIT
    BSF STATUS, RP0 ;Passer en banque 1.
    movlw b'01100000' ;Stabilisation de l'osciateur.
    movwf OSCCON
    stabosc
    btfss OSCCON,IOFS
    goto stabosc
    BCF TRISB, 4 ;RB4 En sortie.
    BCF STATUS, RP0 ;Passer en banque 0.
    goto start

    tempo1
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle1
    nop
    bou1
    decfsz cmpt2, f ;décrémenté le compteur2 jusque au retour a zero
    goto bou1
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle1
    RETURN

    tempo2
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle2
    nop
    bou2
    decfsz cmpt2, f ;décrémenté le compteur2 jusque au retour a zero
    goto bou2
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle2
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle3
    nop
    bou3
    decfsz cmpt2, f ;décrémenté le compteur2 jusque au retour a zero
    goto bou3
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle3
    RETURN

    start
    LEDON ;Séquance S.O.S.
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo2
    CALL tempo2
    END
    Merci pour vos réponse.

    -----

  2. #2
    mgduc

    Re : Lumierre S.O.S. PIC16F88

    Je voudrais seulement ajouter que mon cristal est de 20 MHZ.

  3. #3
    nec75

    Re : Lumierre S.O.S. PIC16F88

    bonsoir mgduc

    je pense que le probleme est à la fin de ton code:

    call tempo2
    END

    apres tempo2 le return pointe sur END donc ton pic fait n'importe quoi.

    il faudrait faire:
    call tempo2
    goto start
    END

    bonne soirée

  4. #4
    mgduc

    Re : Lumierre S.O.S. PIC16F88

    Bonjours nec75, Oui désoler j'ais oublier de placer le GOTO start. Mais même avec ce bout de code le problème reste le même et je ne comprend pas pourquoi.

    Merci quand même pour ta réponse.

  5. A voir en vidéo sur Futura
  6. #5
    mgduc

    Re : Lumierre S.O.S. PIC16F88

    Bonjours, problème résolue, Il suffisais de remettre le compteur du WATCHDOG à zero dans la boule de temporisation. ( CLRWDT )

    j'imagine qu'il n'étais pas vraiment désactiver et croyais que prendent la boucle de temporisation le programme étais planter et allais le placer ayeur.

    Tout fonctionne a merveille désormais.

    Voici pour vous mon programme complettement fonctionelle. (Peut être utile comme dispositif de sécurité en forêt)

    #include <p16f88.inc>
    __CONFIG _CONFIG1, _INTRC_IO & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _MCLR_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _CCP1_RB0 & _CP_OFF
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
    INT_VAR UDATA_SHR
    cmpt1 res 1
    cmpt2 res 1
    LEDON macro ;Macro pour Alumer Led Verte.
    BSF PORTB, 4
    endm
    LEDOFF macro ;Macro pour Éteindre Led Verte.
    BCF PORTB, 4
    endm
    STARTUP CODE 0x000
    GOTO INIT
    INIT
    movlw 0x0c ; initialisation pointeur
    movwf FSR ; pointeur d'adressage indirec
    init1
    clrf INDF ; effacer ram
    incf FSR,f ; pointer sur suivant
    btfss FSR,6 ; tester si fin zone atteinte (>=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (>=50)
    goto init1 ; non, boucler
    BSF STATUS, RP0 ;Passer en banque 1.
    BCF TRISB, 4 ;RB4 En sortie.
    BCF STATUS, RP0 ;Passer en banque 0.
    goto start

    tempo1
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle1
    clrwdt
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle1
    bou1
    clrwdt
    decfsz cmpt2, f ;décrémenté le compteur2 jusque au retour a zero
    goto bou1
    RETURN

    start
    LEDON ;Séquance S.O.S.
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    CALL tempo1
    LEDON
    CALL tempo1
    CALL tempo1
    LEDOFF
    CALL tempo1
    CALL tempo1
    LEDON
    CALL tempo1
    CALL tempo1
    LEDOFF
    CALL tempo1
    CALL tempo1
    LEDON
    CALL tempo1
    CALL tempo1
    LEDOFF
    CALL tempo1
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    CALL tempo1
    CALL tempo1
    goto start
    end
    Je précise que je n'utilise plus le quartz externe de 20 MHZ mais le compteur interne du pic, le quartz étais beaucoup trop rapide pour donner une vitesse raisonnable et demandais un code trop complexe pour le ralentir.

    Merci
    Dernière modification par mgduc ; 11/11/2012 à 03h14.

  7. #6
    mgduc

    Re : Lumierre S.O.S. PIC16F88

    J'ais modifier mon code et le signal S.O.S. est beaucoup plus clair de cette façon. Donc voici la version final et ne sera plus modifier.

    #include <p16f88.inc>
    __CONFIG _CONFIG1, _INTRC_IO & _WDT_OFF & _LVP_OFF & _PWRTE_OFF & _MCLR_ON & _BODEN_ON & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _CCP1_RB0 & _CP_OFF
    __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
    INT_VAR UDATA_SHR
    cmpt1 res 1
    cmpt2 res 1
    LEDON macro ;Macro pour Alumer Led Verte.
    BSF PORTB, 4
    endm
    LEDOFF macro ;Macro pour Éteindre Led Verte.
    BCF PORTB, 4
    endm
    STARTUP CODE 0x000
    GOTO INIT
    INIT
    movlw 0x0c ; initialisation pointeur
    movwf FSR ; pointeur d'adressage indirec
    init1
    clrf INDF ; effacer ram
    incf FSR,f ; pointer sur suivant
    btfss FSR,6 ; tester si fin zone atteinte (>=40)
    goto init1 ; non, boucler
    btfss FSR,4 ; tester si fin zone atteinte (>=50)
    goto init1 ; non, boucler
    BSF STATUS, RP0 ;Passer en banque 1.
    BCF TRISB, 4 ;RB4 En sortie.
    BCF STATUS, RP0 ;Passer en banque 0.
    goto start

    tempo1
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle1
    clrwdt
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle1
    RETURN

    tempo2
    clrf cmpt1 ;éffacement du compteur1
    clrf cmpt2 ;éffacement du compteur2
    boucle2
    clrwdt
    decfsz cmpt1, f ;décrémenté le compteur1 jusque au retour a zero
    goto boucle2
    bou2
    clrwdt
    decfsz cmpt2, f ;décrémenté le compteur2 jusque au retour a zero
    goto bou2
    RETURN

    start
    LEDON ;Séquance S.O.S.
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo2
    CALL tempo2
    LEDON
    CALL tempo2
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo2
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo2
    LEDOFF
    CALL tempo2
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo1
    LEDON
    CALL tempo1
    LEDOFF
    CALL tempo2
    CALL tempo2
    CALL tempo2
    goto start
    end
    Bonne journée.

Discussions similaires

  1. Decodeur morse en C
    Par inviteb61e4847 dans le forum Électronique
    Réponses: 11
    Dernier message: 25/02/2011, 17h22
  2. Potentiel de morse
    Par invite841a69dc dans le forum Chimie
    Réponses: 5
    Dernier message: 27/01/2009, 18h55
  3. Le morse
    Par invitef99d9c27 dans le forum Électronique
    Réponses: 12
    Dernier message: 07/02/2007, 17h16
  4. Emetteur de morse
    Par invitea250c65c dans le forum Électronique
    Réponses: 12
    Dernier message: 21/03/2006, 12h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...