Отговори на тема  [ 5 мнения ] 
SPI interface + PIC18F452+AD9833 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Авг 25, 2006 11:31 pm
Мнения: 168
Местоположение: Русе
Мнение 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);


Нед Май 03, 2009 4:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Данните (байтовете) "излизат" през SDO, като най-младшия бит е първи - т.е. ротират се от ляво на дясно. Тука май се опитваш да предадеш данните точно наобратно.
Не съм запознат с AD9833 и не мога да кажа друго, освен да провериш дали си инициализирал правилно битове CKP и CKE.

Успех...


Нед Май 03, 2009 9:00 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Авг 25, 2006 11:31 pm
Мнения: 168
Местоположение: Русе
Мнение 
Ами така е дадено в пдф-а (стр. 3). Изображение

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

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


Нед Май 03, 2009 9:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
me40 написа:
Най вече ме интересува правилно ли предавам следните 8 бита....т.е това ли е начина по който изпращам данните по шината (като ги заредя в SSPBUF) и правилна ли е проверката на бит BF
Да, правилно е.


Нед Май 03, 2009 10:17 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Авг 25, 2006 11:31 pm
Мнения: 168
Местоположение: Русе
Мнение 
Благодаря на Gogo.
Значи проблема вероятно е в данните, които изпращам, а не начина.
Утре сутрин ще правя пак опити, че в момента съм на работа и няма как.

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

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

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

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


Нед Май 03, 2009 10:22 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни