Code assembleur pour RFM12B 4mmMhz

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From French to

Threaded View
Bonjour

Je cherche à tester un module RFM12B 433 Mhz. J'ai fait un montage avec
un PIC 16F628A.
Pour l'instant la sortie SDO reste désespérément à 0.
Quelqu’un aurait-il une expérience dans ce domaine? Ou un bout de code
qui fonctionne?
Merci.

Re: Code assembleur pour RFM12B 4mmMhz
On 8 juin, 22:54, jpwitz :

Quoted text here. Click to load it

Je ne vois pas de SDO sur le 16F628A,
ce ne serait pas le TX de l'USART ?


Re: Code assembleur pour RFM12B 433Mhz
Le 08/06/2012 23:25, Jean-Christophe a écrit :
Quoted text here. Click to load it
SDO est la broche de sortie des données du RFM12B (
http://www.dz863.com/downloadpdf-cfvdbskivdlo-RFM12.pdf )
J'ai connecté les 4 broches Sdo , Nsel, Sck et Sdi (et GND et VDD +5v)
selon  les affectation suivantes:
  Nsel  --->      PORTB,4
  Sdi    --->      PORTB,5
  Sdo   --->      PORTB,6
  Sck   --->      PORTB,7


Re: Code assembleur pour RFM12B 433Mhz
On 9 juin, 08:51, jpwitz

Quoted text here. Click to load it

Ah ok, donc c'est la sortie de donnE9%es du RFM12B qui
n'envoie rien ? Et comment tu vE9%rifies ca : par code
depuis le PIC ou avec un scope sur le signal DSO ?

Quoted text here. Click to load it

Il manque beaucoup d'information pour t'aider.

DE9%ja, programme le PIC pour gE9%nE9%rer les signaux adE9%quats
vers SCK/SDI pour rE9%cupE9%rer des donnE9%es, mais sans connecter
la sortie SDO du RFM12B (en la laissant en l'air)
pour vE9%rifier au scope si tu as bien un signal sur SDO.

Si tu as un signal alors c'est le code qui gE8%re PORTB,6
qui est en cause, si tu n'as pas de signal alors ce sont
les signaux SCK/SDI qui sont incorrects. (init des
I/O du PIC, protocole de com avec le RFM12B, etc...)

Pour clarifier tu pourrais poster un schema de la partie
com entre le PIC et le RFM12B et le code d'init et de com.

Re: Code assembleur pour RFM12B 433Mhz

Le blocage se situe dans la la boucle d'attente que SDO est à 1 pour
signaler la disponibilité de l'émetteur.
Au scope, les signaux se figent (normal, le PIC attend dans la boucle)
car SDO reste (désespérément) à 0.
Le RFM12B est peut-être mal initialisé, mais où????

Voici ci-dessous le code utilisé.
**************************** RFM12B**********************
#define    Nsel        PORTB,4
#define    Sck            PORTB,7
#define    Sdi            PORTB,5
#define    Sdo            PORTB,6

     CBLOCK    0x20            ; Début de la zone RAM
Drf            :1
DataRF    :1
CptRF      :1

** initialisation du PIC 16F628A***

;** Initialisation du module RFM12
     bsf        Nsel
     bsf        Sdi
     bcf        Sck

initialisationRFM12
;** 1 **
     movlw    0x80    ; 10000000
     call    Spi8
     movlw    0xD8    ; 11011000    ; -el, ef,bande 433 Mhz , 12,5pf
     call    Spi8
;** 2 **
     movlw    0x82    ; 10000010
     call    Spi8
     movlw    0xD9    ; 11011001    ;!er,!ebb,Et,Es,Ex,!eb,!ew,dc ;    
D9    ; 11011001
     call    Spi8
;** 3 **
     movlw    0xA6    ; 10100110
     call    Spi8
     movlw    0x40    ; 01000000
     call    Spi8
;** 4 **
     movlw    0xC6    ; 11000110
     call    Spi8
     movlw    0x47    ; 01000111
     call    Spi8
;** 4 **
     movlw    0xCC    ; 11001100
     call    Spi8
     movlw    0x77    ; 01110111
     call    Spi8
;** 5 **
     movlw    0x94    ; 10010100
     call    Spi8
     movlw    0xA0    ; 10100000
     call    Spi8
;** 6 **
     movlw    0xC2    ; 11000010
     call    Spi8
     movlw    0xAC    ; 10101100
     call    Spi8
;** 7 **
     movlw    0xCA    ; 11001010
     call    Spi8
     movlw    0x80    ;10000000
     call    Spi8
;** 7 **
     movlw    0xCA    ; 11001010
     call    Spi8
     movlw    0x83    ;10000000
     call    Spi8
;** 8 **
     movlw    0xC4    ; 11000100
     call    Spi8
     movlw    0x9B    ;10011011
     call    Spi8
;** 9 **
     movlw    0x98    ; 10011000
     call    Spi8
     movlw    0x50    ;01010000
     call    Spi8
;** 10 **
     movlw    0xE0    ; 11100000
     call    Spi8
     movlw    0x00    ; 00000000
     call    Spi8
;** 11 **
     movlw    0xC8    ; 11001000
     call    Spi8
     movlw    0x00    ; 00000000
     call    Spi8
;** 12 **
     movlw    0xC0    ; 11000000
     call    Spi8
     movlw    0x00    ; 00000000
     call    Spi8

Test2
     ;mise en marche de l'émetteur
     movlw    0x82    ; 10000010
     call    Spi8
     movlw    0x38    ; 00111000
     call    Spi8


     ;boucle de transmission de la donnée test
      call    Wait_rfm12
     movlw    0xB8    ; 10111000
     call    Spi8
     movlw    0xAA    ; 10101010
     call    Spi8
     call    tempotest
     goto    $-6

; sous-programme d'envoi d'un octet 8 bits
Spi8
     bcf        Sck        ; clock à 0
     movwf    Drf
     movlw    d'8'
     movwf    CptRF
     bcf        Nsel    ; Nsel = 0
     call    tempotest
retourSp8
     rlf        Drf
     btfsc    STATUS,C
     goto    $+3
     bcf        Sdi
     goto    $+2
     bsf        Sdi
     call    tempotest
     bsf        Sck        ; clock à 1
     call    tempotest
;    movwf    Status_W    ; sauvegarde STATUS
     btfss    Sdo            ; utile pour la commande de lecture des
données 0xB000
     goto    $+3
     bsf        STATUS,C
     goto    $+2
     bcf        STATUS,C
     rlf        DataRF
     bcf        Sck        ; clock à 0
     call    tempotest
     decfsz    CptRF
     goto    retourSp8
     bsf        Nsel    ; Nsel = 1
     rlf        Drf
     return

Wait_rfm12
     ; attente de la disponibilité du module
     bcf        Nsel
     btfss    Sdo                ; c'est ici que le pic tourne en boucle
-Sdo ne passe pas à un
     goto    $-1
     bsf        Nsel
     return

tempotest
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     nop
     return

Re: Code assembleur pour RFM12B 433Mhz
On 15 juin, 15:51, jpwitz :

Quoted text here. Click to load it

VE9%rifie au scope que le SDO du RFM12B change d'E9%tat,
en le mesurant directement lorsqu'il est dE9%branchE9% du PIC.
( ca nE9%cE9%ssite peut-EA%tre une rE9%sistance de pull-up | pull-down )

VE9%rifie que PORTB,6 soit bien initalisE9% en entrE9%e,
et que tu lis bien la valeur de la broche et non pas
un latch intermE9%diaire qui ne serait pas rafraichi.

VE9%rifie que tu sors bien de la boucle de test de SDO,
en appliquant du +Vcc sur SDO (avec RFM12B dE9%connectE9%)


Quoted text here. Click to load it

VE9%rifie aussi les bits de config du PIC.


Quoted text here. Click to load it


Re: Code assembleur pour RFM12B 433Mhz
SDO change d'état avec Sck : sck=1 => sdo=1

Lorsque sdo est déconnecté du portB6, on sort de la boucle sans pb .
Le PIC (semble) fonctionner komilfo.


Le 15/06/2012 18:34, Jean-Christophe a écrit :
Quoted text here. Click to load it


Re: Code assembleur pour RFM12B 433Mhz
On 15 juin, 23:16, jpwitz :

Quoted text here. Click to load it

Ah !  :o)

Un truc que tu pourrais ajouter dans la boucle d'attente
de changement d'E9%tat de SDO, c'est un time-out qui
permettrait de sortir de la boucle mEA%me si SDO reste fixe.
(en positionnant un flag pour signaler qu'il n'y a pas
de com avec le RFM12B) ou peut-EA%tre allumer une LED avec
des clignotements diffE9%rents suivant l'E9%tat de la com.


Quoted text here. Click to load it


Re: Code assembleur pour RFM12B 433Mhz
Euréka

Le pb se situe au niveau de l’algorithme:
Envoyer deux octets de 8 bits n'est pas égal à un mot de 16 bits: Nsel
est positionné à 0 au début et remonte à 1 à la fin des 16 bits. Dans la
routine Spi8 Nsel = 1 après 8 bits d'envoyé!


Le 15/06/2012 15:51, jpwitz a écrit :
Quoted text here. Click to load it


Site Timeline