
PIC16x -> SPI Master0,0 -> MCP3201
Е дойде и тоз момент да ползвам SPI , като цяло елементарна работа и наистина. И по законите на мърфи точно на елементарното нещата запецнаха. Нямам връзка ghrrrr
По темата:
почнах с 16F819-I/P , викам си да не би да е от мцу-то ,сложих 16F877 с леки изменения , все пак SPI-а там е на PORTC.
Друго MCP3201 - ADC 12bit , 1ch, SPI
Какво разбрах от datasheet: къде какво да се включи и как да си комуникирам:
CS(active LOW)
spi mode 0,0 clock idles low (това е което ползвам)
или
spi mode 1,1 clock idles high
MCP3201 sends data out on falling edge ! (т.е high to low , нали ?)
(и съм казал на PIC-a Transmit occurs on transition from active to Idle clock state (BIT6 SSPSTAT = 1))
--------
На базата на това (връзките са ми ок , всичко е вързано където трябва):
Момент , видях си недоглеждане - сменил съм само PORTC с PORTB, без да променя номера на бита/крака с този на 877 , оправих го , тествах , сега запецва и чака BUSYFLAG-a да падне, че е свършило получаването
 |  |  |
 | Код: #define CS PORTA,1
ADC:
BANK0
bsf CS bcf CS
nop nop
; 200ns trqbwat na MCP3201 " da wyzprieme " promqnata na CS
movlw 0x01 movwf SSPBUF
; С ICD2 следя какво става , но след movwf SSPBUF е равен на 0xFF, вместо 0x01 , което в случея не е проблем ; защото това се прави само за да задейства комуникацията , защото ПИК-а се явява мастър, поне така разбрах ,че трябва да бъде
BANK1
btfss SSPSTAT,BF goto $-1 BANK0
movfw SSPBUF movwf TEMP1
movlw 0x01 movwf SSPBUF
BANK1
btfss SSPSTAT,BF goto $-1
BANK0
movfw SSPBUF movwf TEMP2
bsf CS ; ; bcf SSPCON,SSPEN ; ; return ; ;
|  |
 |  |  |
Това, което получавам е винаги 0xFF
VRef Ми е 1.226 а при подаваният ~1mV от термодатчик (termocouple type K 20-30C = ~1.2mV) би трябвало да е или 0 или 1 (десетично).
идеи
edit: е как ще работи като не съм захранил ADC-то.
То е вързано, ама не му е подадено 5в ...
засега всичко е на 6