Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

SPI interface + PIC18F452+AD9833
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6785
Страница 1 от 1

Автор:  me40 [ Нед Май 03, 2009 4:36 pm ]
Заглавие:  SPI interface + PIC18F452+AD9833

Досега никога не съм използвал SPI интерфейса на PIC18F452. Срещам затруднения и затова моля за помощ.
Използвам инфо и по точно примера от http://hades.mech.northwestern.edu/wiki ... 2C_and_SPI
Свързвнето ми е съответно директно пин със пин:

AD9833 PIC18F452
pin6(SDATA) -> 24pin (RC5 SDO)
pin7(SCLK) -> 18pin (RC3 SCK)
pin8(Fsync) -> 17pin (RC2)

Инициализация на MSSP за работа в режим SPI (master):

BCF TRISC, 3 ;SCK
BSF TRISC, 4 ;sdi - не се използва при интерфейс с AD9833
BCF TRISC, 5 ;SD0
BCF TRISA, 5 ; spi master mode
BCF SSPSTAT, CKE
BCF SSPSTAT, SMP
MOVLW B'00110001' ;SPI Master
MOVWF SSPCON1 ;Tакт Fosc/16 - Fosc=20mhz

Следва предаването на данни, като немога точно да разбера по какъв начин става.
За да предам spi_xfer(0b0010000101101000); правя следното:

BCF PORTC, 2 ; Смъквам Fsync за начало на данните
MOVLW B'00100001'
MOVWF SSPBUF ; Зареждам в буфера старшите бита
BTFSS SSPSTAT, BF
BRA $-2

BCF SSPSTAT, BF
MOVLW B'01101000'
MOVWF SSPBUF ;; Зареждам в буфера младшите бита
BTFSS SSPSTAT, BF
BSF PORTC, 2 ;Вдигам Fsync за край на данните

BCF PORTC, 2 ;Смъквам Fsync за начало на данните
........
После изпращам честотата правоъгълник 20 khz :
spi_xfer(0b0101100010010011);
spi_xfer(0b0100000000010000);

после инфо за фаза:
spi_xfer(0b1100000000000000);

и най накрая: unresets
spi_xfer(0b0000000001101000);

Автор:  Gogo [ Нед Май 03, 2009 9:00 pm ]
Заглавие: 

Данните (байтовете) "излизат" през SDO, като най-младшия бит е първи - т.е. ротират се от ляво на дясно. Тука май се опитваш да предадеш данните точно наобратно.
Не съм запознат с AD9833 и не мога да кажа друго, освен да провериш дали си инициализирал правилно битове CKP и CKE.

Успех...

Автор:  me40 [ Нед Май 03, 2009 9:23 pm ]
Заглавие: 

Ами така е дадено в пдф-а (стр. 3). Изображение

Най вече ме интересува правилно ли предавам следните 8 бита....т.е това ли е начина по който изпращам данните по шината (като ги заредя в SSPBUF) и правилна ли е проверката на бит BF

MOVLW B'00100001'
MOVWF SSPBUF ; Зареждам в буфера старшите бита
BTFSS SSPSTAT, BF
BRA $-2

Автор:  Gogo [ Нед Май 03, 2009 10:17 pm ]
Заглавие: 

me40 написа:
Най вече ме интересува правилно ли предавам следните 8 бита....т.е това ли е начина по който изпращам данните по шината (като ги заредя в SSPBUF) и правилна ли е проверката на бит BF
Да, правилно е.

Автор:  me40 [ Нед Май 03, 2009 10:22 pm ]
Заглавие: 

Благодаря на Gogo.
Значи проблема вероятно е в данните, които изпращам, а не начина.
Утре сутрин ще правя пак опити, че в момента съм на работа и няма как.

..........................>>>>>>>>>>>>>>

Microchip оправиха нещата и по точно форума:

http://www.microchip.com/forums/tm.aspx?m=406866

В последният пост от micro има прикрепен Attachment (1) . Има доста подробно обяснение.
С помоща на него вече имам синусоида на изхода. Сега ще пробвам да сменя честотата, вида на сигнала (правоъгълник, триъгълник)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/