Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 16.10.2011, 06:37   #11 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ууу... Ну теперь я вообще ничего не понимаю. Вот пример-
org 0
bsf 0x03,5 ;идём в 1 банк
bcf 0x03,6
clrf 0x05. ;обнуляем trisa

И что мы видим в program memory окне?
Что попадаем на porta, а не на trisa!!!
Даже указав 0x85...

Уже убился и выпил йаду... Мой глюк? Или программы?
Помогите пожалуйста и проверьте у себя, мне нужно контролировать, правильно ли переключил банки, всё ли туда, куда запланировано пишется. И вообще, с таким контролем удобнЕе, а он, чертяга, не работает. Проц- 16f876a, в конфиге и в лабе он прописан. Версия лаба- 7.42
Slava_D вне форума   Ответить с цитированием

Старый 16.10.2011, 06:37
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

По данной тематике есть и другие темы

Электронная таблица
Хеш-таблица на основе стеков.
Матрица (таблица)
Список системных команд Пуск + Сочетания клавиш
NVIDIA Geforce 9600GT и Другие(таблица)
Постоянно вылетает таблица файлов

Старый 16.10.2011, 06:45   #12 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Long Cat Посмотреть сообщение
Вот именно из-за костыля под названием БАНКИ я бросил PIC в пользу AVR.
Охотно верю, но так уж карты легли. И си я никогда не учил. За асм взялся от того, что предыдущий пик был скромен на память и много чего впихнуть нужно было самому логически расставляя команды.
Slava_D вне форума   Ответить с цитированием
Старый 17.10.2011, 03:57   #13 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Уважаемые! Ну неужели так трудно запустить мплаб, вбить 4 строчки, в опциях выставить pic16f876a и ассемблировать на вашей версии, затем открыть view->program memory и отписать, что там получилось?
Slava_D вне форума   Ответить с цитированием
Старый 17.10.2011, 04:10   #14 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

Только MPLAB поставлю, подождите.
Long Cat вне форума   Ответить с цитированием
Старый 17.10.2011, 07:27   #15 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо! Жду в не терпении ))
Slava_D вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 17.10.2011, 13:07   #16 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Не обращай внимания, это предупреждение. Все будет работать. Это мплаб не видит что ты переключил банк.
korsaj вне форума   Ответить с цитированием
Старый 17.10.2011, 15:17   #17 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Вот нашел, оказалось все еще проще!
Миниатюры
aacuiyiiue.jpg  
korsaj вне форума   Ответить с цитированием
Старый 19.10.2011, 22:00   #18 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ерунду замутили, блин... так трудно отследить и в памяти программ по уму, нормально вывести... А было-б так удобно...

Тут вот ещё вопросец назрел... С сегоднешнего начал ковырять шину I2C, пытаюсь общаться с датчиком DS1631 (термометр), ковырял даташит к пику, даташит к далласу. Вроде как получается с божьей помощью и AN735. НО никак без НО. Не получается отправить сигнал NACK от мастера. ну не отпускает линию после. Ниже приведу код, с которым эксперементирую:
Код:
			list p=16f876a
			__CONFIG 3F39h
#include p16f876a.inc

;Определение переменных==============================================
			CBLOCK	0x70
			temp				;Временная переменная.
			ENDC

;status		equ		0x03		;Регистр STATUS и его биты.
;rp0			equ		0x05
;rp1			equ		0x06

portc		equ		0x07
trisc		equ		0x07

sspcon1		equ		0x14
sspcon2		equ		0x91
	sen		equ		0x00
	rcen	equ		0x03
	pen		equ		0x02
	ackdt	equ		0x05
	acken	equ		0x04
sspadd		equ		0x93
sspstat		equ		0x94
	r_w		equ		0x02
sspbuf		equ		0x13


#define  FOSC        D'8000000'          ;Частота кварца (Гц)
#define  I2CClock    D'400000'           ;Частота шины I2C (Гц)
#define  ClockValue  (((FOSC/I2CClock)/4) -1) ;

;Инициализация портов, регистров=====================================

;Режим I2C, установка MASTER.
			movlw	b'00101000'	; setup value
								; into W register
			banksel	sspcon1 	; select SFR
								; bank
			movwf	sspcon1		; configure for
								; Master I2C

;Установка битрейта I2C
			movlw	0x0A		; setup value
								; into W register
			banksel	sspadd		; select SFR bank
			movwf	sspadd		; baud rate =
								; 400KHz @ 18MHz

;Опять настройка I2C.
			movlw	b'00000000'	; setup value
								; into W register
			movwf	sspstat		; slew rate
								; enabled
			banksel sspstat		; select SFR bank

;SCL/SDA Настройка выводов на вход.
			movlw	b'00011000'	; setup value
								; into W register
			banksel	trisc		; select SFR bank
			iorwf	trisc,f		; SCL and SDA
								; are inputs


;Программа========================================================
			call	START		;Инициируем старт
			movlw	b'10011110'	;Адресом с битом "принять"
			call	I2CWRITE
			movlw	0xAC		;Отправляем	ему код
			call	I2CWRITE


			call	START		;Делаем RE-START
			movlw	b'10011111'	;Адрес с битом "передать"
			call	I2CWRITE
			call	I2CREAD
			call	I2CNACK
			bsf		sspcon2,pen	; Стоп.

			goto	$


;=================================================================
;Инициализация запроса START
START
			banksel	sspcon2		; select SFR
								; bank
			bsf 	sspcon2,sen	; initiate
								; I2C start
		; Код ниже проверит завершение START запроса.
			btfsc	sspcon2,sen	; test start
								; bit state
			goto	$-1			; module busy
								; so wait
			return

;Этот код инициирует I2C чтение
I2CREAD
			banksel	sspcon2		; select SFR
								; bank
			bsf		sspcon2,rcen	; initiate
								; I2C read
		;Этот код проверяет окончание чтения I2C.
			btfsc	sspcon2,rcen	; test read
								; bit state
			goto	$-1			; module busy
								; so wait


;Этот код инициирует I2C запись
I2CWRITE
			banksel	sspbuf		; select SFR bank
;			movlw	b'10011110'	; load value
								; into W (Бит 0 говорит после
								;запроса START
								;том, что будет делать SLAVE на
								;следующем байте- принимать(0)
								;или передавать данные(1), осталь-
								;ные указывают адрес устр-ва.)
			movwf	sspbuf		; initiate I2C
								; write cycle
		;Этот код проверяет окончание записи I2C
			banksel	sspstat		; select SFR bank
			btfsc	sspstat,r_w	; test write bit
								; state
			goto	$-1			; module busy
								; so wait
			return

;Генерация NACK от MASTER
I2CNACK
			banksel	sspcon2		; select SFR
								; bank
			bsf		sspcon2,ackdt	; set ack bit
								; state to 1
			bsf		sspcon2,acken	; initiate ack
			return
Кроме пары- тройки строчек "мусора" всё скопипастено из AN735. В протеусе запустил с анализатором I2C шины и вот что получаю-

S-9E-A-AC-A-9F-A-FF-A

Ну, с S-A и так понятно.
9E- это адрес с битом W.
AC- команда далласа.

Тут делаем restart, он тоже почему- то не отмечен протеусом (а есть ли он вообще?)

9F- адрес с битом R.
FF- пришла цифра не понятная (в регистре далласа другая сидит)

Собственно и трабла заключается в том, что не отпускается шина, нет сигнала N(ACK) от мастера. Или я что- то недопонял, или что- то не допонял я. Кстати, и P (стопа) тоже нет. Хотя я их кидаю.

Чего тут недомудрёно? отключение прерывания? ещё что- то? (( где- то рядом- же порыто!
Slava_D вне форума   Ответить с цитированием
Старый 19.10.2011, 22:03   #19 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

1. Разбираться с железом нужно на железе, а не в симуляторе.
2. А резисторы подтягивающие у вас есть?
Long Cat вне форума   Ответить с цитированием
Старый 20.10.2011, 04:50   #20 (permalink)
Slava_D
Member
 
Регистрация: 20.06.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Да, конечно, на 10ком. Схема включения стандартная, дело в том, что другую команду-посылаю, не требующую NACK, а только стоп- выполняется, линия свободна и датчик в режиме ожидания обращения к нему по его адресу. С NACK "косяк" какой-то. В коде- то правильно я его применяю?
Slava_D вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 13:33.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.