MSSP -> SPI nastavenie

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

MSSP -> SPI nastavenie

#1 Příspěvek 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
Naposledy upravil(a) mikollar dne 13 čer 2007, 16:50, celkem upraveno 3 x.
Uživatelský avatar
nop
Příspěvky: 165
Registrován: 18 kvě 2007, 00:00

#2 Příspěvek 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
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#3 Příspěvek 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 :?
Uživatelský avatar
Modemo
Příspěvky: 90
Registrován: 13 kvě 2007, 00:00
Bydliště: Brno, Pov. Bystrica

#4 Příspěvek 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 :?:
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#5 Příspěvek 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
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#6 Příspěvek 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
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#7 Příspěvek 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
Uživatelský avatar
jankop
Příspěvky: 679
Registrován: 04 dub 2007, 00:00
Kontaktovat uživatele:

#8 Příspěvek 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
Uživatelský avatar
mikollar
Příspěvky: 1477
Registrován: 26 pro 2004, 00:00
Bydliště: Košice - okolie

#9 Příspěvek od mikollar »

dakujem dakujem uz aj mne to ide to je super, este raz diky :genial:
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“