Страница 1 из 1

Реализация SPI на pic12f675 - глюки

Добавлено: Вт апр 03, 2007 14:39:36
yaroslav
Приветствую пушистохвостых! :))
Случилось мне соединить PIC12F675 с цифровым потенциометром MCP41100, имеющим SPI-интерфейс. Схемка очень простая (прилагается).
Работает она так: при нажатии верхней по схеме кнопки потенциометр увеличивает сопротивление на один шаг (всего 256 шагов), при нажатии нижней по схеме кнопки, соответственно, наоборот, уменьшает сопротивление на один шаг.
Так вот возникла проблема: в MPLAB вроде всё работает, а в PROTEUS нет - по SPI передаются одни нули :shock:. Всё вроде настроил как надо - режим SPI одинаковый и на контроллере, и в PROTEUS, а всё равно не пашет. Даже на реальном устройстве то же самое что и в PROTEUS - одни нули.
Вот кусочек кода программы, который не работает:

Код: Выделить всё

;***** SPI Software Transmit Procedure *****

SPITransmit

	movwf 	SPIoutput			; place byte in buffer to send
	movlw	.8					;
	movwf	SPIcount			; counter for bit transmission

SPItxLoop
	btfsc 	SPIoutput,7			; MSB=0 ?
	goto	SPIhi				; no, set SPI data line high
	bcf		GPIO,0				; yes, set SPI data line low
	goto	SPIstrobe			;
SPIhi
	bsf		GPIO,0				; set SPI data line high

SPIstrobe
	bsf		GPIO,1				; set SPI clock line high
	rlf		SPIoutput,F			; rotate tx byte left
	bcf		GPIO,1				; set SPI clock line low

	decfsz	SPIcount,F			; decrement counter, it is zero?
	goto	SPItxLoop			; no, continue transmit
								; yes, transmit is complete, return
	return

;*******************************************
Проблему нашёл в этом месте:

Код: Выделить всё

SPIhi
	bsf		GPIO,0				; set SPI data line high

SPIstrobe
	bsf		GPIO,1				; set SPI clock line high
Оказывается при установке бита GP0 и затем сразу GP1, бит GP0 почему-то сразу сбрасывается в 0, хотя должен быть 1 аж до следующего цикла.
Вобщем, нифига не пойму как это разрулить :cry:

P.S. Про операции "чтение-модификация-запись" знаю, но даже длинные задержки между этими операциями не помогают.
Про SlaveSelect тоже не забывал, но он в другом месте программы.

Добавлено: Вт апр 03, 2007 15:26:36
Abaktyсh
Советую добавить режим посточнного шагания при удержании кнопки более 500 мС.

Re: Реализация SPI на pic12f675 - глюки

Добавлено: Вт апр 03, 2007 15:28:47
Abaktyсh
yaroslav писал(а):даже длинные задержки между этими операциями не помогают.
Получается что в PROTEUS как в жизни а в MPLAB нет ? Интересно ...

Прикрепите проекты для каждого если не трудно - хочу посмотреть.

Добавлено: Пт апр 06, 2007 16:56:08
yaroslav
Вот блин, нашёл ошибку :oops: С каких-то радостей проинициализировал регистр компараторов CMCON в банке 1, хотя он отродясь сидит в банке 0 :roll:
Теперь всё работает ОК :)))