Stránka 1 z 1

MSSP -> SPI nastavenie

Napsal: 11 čer 2007, 12:23
od mikollar
Zdravim, nema niekto zaručene funkcny priklad pouzitia SPI v asm alebo co este treba nastavit okrem SSPSTAT, SSPCON a TRISC aby tento modul bol funkcny? Skusal som uz vsetky nastavenia podla katalogu. Udaje sa zapisu do SSPBUF ale neodoslu sa. V registroch mam nastavene povolenie SPI. Moje nastavenie sa zhoduje z vacsinou nastaveni uvadzanych na inete.
Skusal so to na 16f877. Uz nemam napady co este je potrebne spravit.

Za kazdu radu dakujem

Kód: Vybrat vše


 list p=16f877A, R=DEC
include "p16f877A.inc"



   org   0x0000      ; zacatek programu
   goto   INIT      ; skok na počáteční inicializaci


      org 0x0004
      retfie
;**************************************************************************
INIT   movlw   b'000000'   ; prednastaveni PORTu A


   movwf   PORTA
   movlw   b'00000000'   ; prednastaveni PORTu B
   movwf   PORTB

   movlw   b'00000000'   ; přednastavení PORTu D
   movwf   PORTD      ; !!! jen PIC16F874 a PIC16F877 !!!
   movlw   b'000'      ; přednastavení PORTu E
   movwf   PORTE      ; !!! jen PIC16F874 a PIC16F877 !!!
      ; ------------------------
   bcf   STATUS,RP1
   bsf   STATUS,RP0   ; banka registru 1

   movlw   b'00000110'   ; A/D vstupy OFF
   movwf   ADCON1
   
   MOVLW   B'00010000'         

   MOVWF   TRISC         ;
   


;-----------------------------------------------------------------------------------------------------------------------   

   movlw   b'11111111'   ;
   movwf   TRISD      ;

   movlw   b'111'      ;
   movwf   TRISE      ;
   
   movlw   01000000   
   movwf SSPSTAT
   
   CLRF   PIR1
   
   MOVLW   B'00001000'
    MOVWF     PIE1
   
   MOVLW   B'11000000'
    MOVWF     INTCON                ; INTERRUPTS
    
    MOVLW    B'00000001'                 ;
   MOVWF    SSPCON
    BSF      SSPCON, SSPEN
      
      CLRF   OPTION_REG
      
      MOVLW   B'00000001'
    MOVWF     T1CON
    
    MOVLW   B'00000010'
    MOVWF     T2CON
   
   BCF   STATUS, RP0      ;SPECIFY BANK 0
   
   goto   MAIN
;**************************************************************************



MAIN       BCF    STATUS, RP1 ;Specify Bank1
      BSF    STATUS, RP0 ;
                BCF    SSPSTAT,7

           BCF   STATUS, RP0      ;SPECIFY BANK 0
      
      MOVFW   SSPBUF         
      
      movlw   .100
                MOVWF    SSPBUF         


      BCF    STATUS, RP1 ;Specify Bank1
      BSF    STATUS, RP0 ;
      
LOOP        BTFSS    SSPSTAT, BF ;
      GOTO    LOOP
                BCF    SSPSTAT, BF
            BCF      STATUS, RP0
      
      NOP
      NOP
      NOP
      NOP
      NOP
      
         MOVFW   SSPBUF   

        GOTO   MAIN
END



EDIT: Upraveny program

Napsal: 12 čer 2007, 21:14
od nop
s tímhle jsem nikdy nic nedělal snad by mohli pomoci tutorialy od microchipu,nestudoval jsem,jen náhodou na to narazil.. http://www.microchip.com/stellent/idcpl ... odeId=1959

Napsal: 12 čer 2007, 21:40
od mikollar
dakujem za link , tento som uz skusal len problem je ten ze ani tieto priklady od microchipu nefunguju a to som skusal uz 3 PICka :?

Napsal: 13 čer 2007, 14:22
od Modemo
A nebude chyba inde? :wink:
Mne sa nestalo, ked si otvorim datasheet akehokolvek protokolu a idem krok po kroku, dodrzim vsetko co mam, aby to neslo.....a ked neslo, tak som spatne zistil, ze som predsa len cosi nedodrzal :)
Mozno ze mas chybu na druhej strane rozhrania :?:

Napsal: 13 čer 2007, 15:00
od mikollar
Ja som uz skusal aj priamo ASM subory microchipu, previedol som ich na HEX a nic neslo to. Z mikroprocesora nelezie von nic, porty zostávaju trvalo v LOG0 a nemenia sa vobec, asi bude treba nieco nastavit co prehliadam ale uz fakt netusim co. Skusam to uz cez tyzden :wand: , asi to hodim o zem a spravim to SW a snad to pojde

Napsal: 13 čer 2007, 16:12
od jankop
Možná by nezaškodila elementární kontrola programu. Když si to odsimuluješ v MPLABu, tak ti snad nebude trvat týden, než přijdeš na to, že registr SSPSTAT není v bance 0, kde ho chybně adresuješ v sekci "main", nýbrž v bance 1.

A když si přečteš pozorně datasheet, tak dospěješ k závěru, že instrukce

Kód: Vybrat vše

MOVLW    B'00100001'       
MOVWF    SSPCON

bude asi lépe nahradit sekvencí

Kód: Vybrat vše

MOVLW    B'00000001'                 ; 
MOVWF    SSPCON
BSF      SSPCON, SSPEN

Napsal: 13 čer 2007, 16:57
od mikollar
upravil som to podla rad, zmenil som to aj v uvode, program prejde raz dookola na nic necaka na odsalnie na nic a pri druhom kole :) sa na tomto

Kód: Vybrat vše

LOOP        BTFSS    SSPSTAT, BF ;
      GOTO    LOOP


a dalej sa ani nepohne.

P.S. dufam ze som to spravne upravil

Napsal: 14 čer 2007, 15:12
od jankop
Následující program nastaví SSP modul a opakovaně v Master modu vysílá data. Ta jsou určena proměnou TxData, která se mění- inkrementuje. Program je pro jednoduchost v minimální verzi . Byl testován a fyzicky opravdu funguje. S krystalem 77,5kHz, LED a zrcátkem jsem viděl SCK i SDO. Propojením SDO-SDI procesor načítal data, která sám odeslal.
Měl jsem pouze 16F877. Pro procesor 16F877A by mělo stačit opravit řádky

Kód: Vybrat vše

 list      P=PIC16F877         
      #include <P16F877.INC> 
na

Kód: Vybrat vše

list      P=PIC16F877A          
    #include <P16F877A.INC> 

a v příkazu _CONFIG nastavit správný rezonátor!!!!

Vlastní kompletní program (MPLAB 7.60)

Kód: Vybrat vše

   list      P=PIC16F877          ; list directive to define processor
   #include <P16F877.INC>     ; processor specific variable definitions
   errorlevel -302
   __CONFIG  _BODEN_OFF & _CP_OFF & _WRT_ENABLE_OFF & _PWRTE_OFF & _WDT_OFF &_LP_OSC & _DEBUG_ON & _CPD_OFF & _LVP_OFF

;--------- VARIABLE DEFINITIONS ---------------------------------------
#define RAM_Start 0x72
    CBLOCK RAM_Start
TxData
    ENDC

   org   0x0000      ; zacatek programu
    nop             ; pro ICD2
   goto   INIT   ; skok na pocatecni inicializaci
   org   0x0004      ; vektor preruseni
   goto   INIT
;************************ Inicializace procesoru  *************************
INIT
    BANKSEL TRISC   ; bank 1
    movlw   b'00010000' ; nastav Serial Data In (SDI) – RC4/SDI/SDA
    movwf   TRISC
    movlw   b'00010000'
    movwf   SSPSTAT     
    BANKSEL SSPCON  ; bank 0
    movlw   b'00110010' ; Set up SPI port, Master mode, CLK/64,
    movwf   SSPCON      ; SSPEN = 1
                       
    clrf TxData       
repeat
    BANKSEL SSPCON  ; bank 0 
    movfw   SSPBUF
    movfw   TxData
    movwf   SSPBUF
   
    BANKSEL SSPSTAT
wait
    btfss   SSPSTAT,BF
    goto wait
    incf TxData,F
    goto repeat
    end

Napsal: 14 čer 2007, 15:39
od mikollar
dakujem dakujem uz aj mne to ide to je super, este raz diky :genial: