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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
yaroslav
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт май 26, 2006 23:28:37
Откуда: Харьков

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

Сообщение 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 тоже не забывал, но он в другом месте программы.
Вложения
pic12f675_SPI.GIF
Простая схема
(3.39 КБ) 877 скачиваний
Реклама
Аватара пользователя
Abaktyсh
Вечно гонимый
Сообщения: 232
Зарегистрирован: Ср фев 28, 2007 17:48:07

Сообщение Abaktyсh »

Советую добавить режим посточнного шагания при удержании кнопки более 500 мС.
Реклама
Аватара пользователя
Abaktyсh
Вечно гонимый
Сообщения: 232
Зарегистрирован: Ср фев 28, 2007 17:48:07

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

Сообщение Abaktyсh »

yaroslav писал(а):даже длинные задержки между этими операциями не помогают.
Получается что в PROTEUS как в жизни а в MPLAB нет ? Интересно ...

Прикрепите проекты для каждого если не трудно - хочу посмотреть.
Аватара пользователя
yaroslav
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт май 26, 2006 23:28:37
Откуда: Харьков

Сообщение yaroslav »

Вот блин, нашёл ошибку :oops: С каких-то радостей проинициализировал регистр компараторов CMCON в банке 1, хотя он отродясь сидит в банке 0 :roll:
Теперь всё работает ОК :)))
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»