Vai al contenuto
PLC Forum


Microchip Mcp3201 E 16f84a - comunicazione tra MCP3201 e 16F84A


mac1994

Messaggi consigliati

Buongiorno a tutti,

Vorrei collegare un MCP3201 al mio PIC 16F84A .

Ho scaricato il datasheet del MCP3201 ma non ho capito come avviene l'intercambio di dati.

Premetto che la programmazione è in assembler.

qualcuno può aiutarmi??

saluti

Link al commento
Condividi su altri siti


Lo MCP3201 si interfaccia tramite Busa SPI, che è un bus seriale.

Il PIC16F84 non ha un'iterfaccia SPI, quindi o usi 3 porte e ti scrivi il programma di gestione oppure cambi dispositivo con altro che è già provvisto di interfaccia SPI come, ad esempio, il "vecchi"16F876.

Sul Webb trovi tutti i dati e le spiegazioni relative al funzionamento del bus SPI, basta una ricerca con google smile.gif

Link al commento
Condividi su altri siti

  • 2 weeks later...

Dipende da quale velocità di clock accetta la periferica. Se, ad esempio, puoi lavorare a 100kHz devi generare un clok a 100KHz.

Comunque usare 16F84 con SPI non è il massimo....

Link al commento
Condividi su altri siti

  • 2 weeks later...

Se non ho capito male, con questo programma che ho buttato giù, dovrei ottenere il risultato della conversione dall'MCP3201 su due registri Temp1 e Temp2.

scusate se sono stato grezzo nella descrizione....javascript:emoticon(';)')

;*************************************

;* *

;* COMUNICAZIONE BUS SPI *

;* *

;*************************************

;************ Parametri iniziali

PROCESSOR 16F84A

RADIX DEC

INCLUDE "P16F84A.INC"

ERRORLEVEL -302

__CONFIG _PWRTE_ON & _LP_OSC & _WDT_OFF

ERRORLEVEL -224

;********************** Registri generici

;CS0 A0

;CLK1 A1

;Dout A2

cblock 0x30

Temp1 ;primo registro

Temp2 ;secondo registro

Temp ;registro dato

Registro ;controlla la fine del registro

Outcl ; controlla la fine del clock

endc

;***************** Partenza

ORG 0x00 ;Start

Bsf STATUS,RP0 ;Swap to register bank 1

Movlw 00000100B ;Set PORTA lines

Movwf TRISA

Movlw 00001111B ;Set PORTB lines

Movwf TRISB

Bcf STATUS,RP0 ;Swap to register bank 0

Inizio

Bsf PORTA,0 ;metto a 1 l'usita cs

Bcf PORTA,1 ;metto l'inizio del clock a 0

CLRF Registro ;metto Registro=0

CLRF Temp1 ;metto Temp1=0

CLRF Temp2 ;metto Temp2=0

CLRF Temp ;metto Temp=0

;********* clock 8µs on e 8µs off ************

Parti

Movlw 2

Movwf Outcl

Movlw 8

Movwf Registro

Bcf PORTA,0 ;metto a 0 l'usita cs

;comando l'inizio della conversione

Ciclo1

Bcf PORTA,1 ;inizio con il clock a 0

nop

nop

Riparto

nop

nop

nop

nop

Riparto1

bsf PORTA,1 ;alzo il fronte di clock

btfss PORTA,2 ;controllo il segnale porta 3

Goto Bitzero ;segnale dig.0

Bituno ;segnale dig.1

Nop

Bsf STATUS,C

Goto Bitnelreg

Bitzero ;segnale dig.0

Bcf STATUS,C

Goto Bitnelreg

Bitnelreg

rlf Temp,F ;bit nel registro (6micro tot)

Bcf PORTA,1 ;clock=0

Decfsz Registro,F ;dec Registro e se 0 salta

Goto Riparto

Decfsz Outcl,F ;dec Registro e se 0 salta

Goto Secondo

Movf Temp,W ;Muovo temp in W

Movwf Temp2 ;Muovo W nel reg Temp2

Bsf PORTA,0 ;metto a 1 l'usita cs

Goto finetemp

Secondo

Movf Temp,W ;Muovo temp in W

Movwf Temp1 ;Muovo W nel reg Temp1

Movlw 8

Movwf Registro

Goto Riparto1

finetemp

nop

Bcf Temp1,7

Bcf Temp1,6

Bcf Temp1,5

end

Link al commento
Condividi su altri siti

Ho controllato con MPLAB e il clock mi da 8microsec on e 8microsec of solo nella parte centrale quando salva il dato sul registro ho 10microsecondi....

può andare bene??

Link al commento
Condividi su altri siti

Periodo da 16us a 20us ==> f= 50kHz-62.5kHz

Se la tua periferica accetta questa frequenza di clock si.

Ricorda che il fronte di salita del clock deve arrivare con il dato sicuramente stabile.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...