Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.10.2009, 15:30  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Проблема с PIC16F73

subj, привожу пример кода:
Код:
i2c_send_byte
		bsf     STATUS,RP0 ;bank1
                          bcf     STATUS,RP1 ;bank1
		bcf     SDA_SET ; SDA - вывод 
		bcf     SCL_SET ;SCL - на вывод
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN  ; SCL - 0
		call	i2c_wait
		movlw	0x08
---------------------//--------------------------------
                         return;
происходит подвисание PIC-а
после первой же команды вызванной функции(причем независимо, что это за команда, пытался подставлять разные
если попробовать заглушить функцию
Код:
i2c_send_byte
                   return;
то выполнение функции нормально завершается и программа
идет дальше :о
Мрак какой-то никто с похожим не сталкивался???
Я уже не знаю что и думать
Реклама:
tolyanv8 вне форума  
Непрочитано 02.10.2009, 18:46  
otest
Почётный гражданин KAZUS.RU
 
Регистрация: 29.01.2005
Адрес: Воронеж
Сообщений: 1,384
Сказал спасибо: 24
Сказали Спасибо 243 раз(а) в 182 сообщении(ях)
otest на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

С этим МК плотно не работал но что то с банками мудрено.
otest вне форума  
Непрочитано 02.10.2009, 19:25  
realid
Супер-модератор
 
Аватар для realid
 
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
realid на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Это чисто программная ошибка. Копайте свою прогу или приводите здесь весь текст.
realid на форуме  
Непрочитано 02.10.2009, 19:55  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Цитата:
Это чисто программная ошибка. Копайте свою прогу или приводите здесь весь текст.
Все бы было ничего, но виснет даже на совсем невинных
командах типа:
bsf STATUS,RP0 ;
причем сразу же после захода в функцию, т.е.
даже банк переключить не могу :о
Часть кода: (причем первые три функции работают нормально)
Код:
i2c_init
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
                bcf     SDA_SET ;SDA - сначала на вывод данных
		bcf     SCL_SET ;SCL - тоже
		bcf     STATUS,RP0        ; set file register bank to 0
                bcf	SCL_PIN ;SCL - низкий уровень
		bsf     SDA_PIN
		call	i2c_wait
		bsf	SCL_PIN ;SCL - высокий уровень
		call	i2c_wait
		bcf     SDA_PIN ;инициируем нисходящий фронт
		call	i2c_wait
		bcf	SCL_PIN ;SCL - низкий уровень
		return;

i2c_close
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
                bcf     SDA_SET ;SDA - сначала на вывод данных
		bcf     SCL_SET ;SCL - тоже
		bcf     STATUS,RP0        ;bank 0
		bcf     SDA_PIN
		bsf	SCL_PIN
		call	i2c_wait
		bsf     SDA_PIN ;инициируем восходящий фронт
		return;

i2c_wait
		nop
		return;
		movlw	0x02
;		movlw	0x32
		movwf	i2c_count
wait		nop
		decfsz	i2c_count,1
		goto	wait
		return;

i2c_send_byte
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		btfsc	SDA_SET
		bcf     SDA_SET ; SDA - вывод 
		btfsc	SCL_SET
		bcf     SCL_SET ;SCL - на вывод
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN  ; SCL - 0
		call	i2c_wait
		movlw	0x08
		movwf	i2c_tmp
send_bit
		bcf     STATUS,RP0        ;bank 0
		bcf     STATUS,RP1
		btfsc	i2c_byte,7	; бит данных - 0?
		bsf	SDA_PIN	; нет,выводим 1 на SDA

		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bsf     SCL_SET ;SCL - на вход!!!

;;		bcf     STATUS,RP0 ;bank0
;;		bcf     STATUS,RP1
;;		bsf	SCL_PIN	; нет,выводим 1 на SCL
get_scl_write	btfss	SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
		goto	get_scl_write
		; попустило :)))
		call	i2c_wait ; ждем-ссс

		rlf	i2c_byte,1	; сдвигаем влево байт данных
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bcf     SCL_SET ;SCL - на выход
		bcf     STATUS,RP0        ;bank 0
		bcf     STATUS,RP1
		bcf	SCL_PIN	; выводим 0 на SCL 
		bcf	SDA_PIN	; выводим 0 на SDA 

		call	i2c_wait

		decfsz	i2c_tmp,1	; конец цикла ?
		goto	send_bit	; нет - переход

		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bsf     SDA_SET	; SDA - ввод
		bsf     SCL_SET ;SCL - на вход!!!
		bcf     STATUS,RP0        ;bank 0
get_scl_ack	btfss	SCL_PIN ;	ожидаем подтверждения SCL!!!
		goto	get_scl_ack

get_ack		btfsc	SDA_PIN	; читаем  АСК, и идем дальше 
		nop
  ;		goto	get_ack	; или что нить делаем... (т.е. ожидаем подтверждения ACK :)
		call	i2c_wait
		bsf     STATUS,RP0 ;bank1
		bcf     STATUS,RP1
		bcf     SCL_SET ;SCL - на выход
		bcf     STATUS,RP0        ;bank 0
		bcf	SCL_PIN	; выводим 0 на SCL 
		bcf	SDA_PIN	; выводим 0 на SDA 
		call	i2c_wait
		return;
tolyanv8 вне форума  
Непрочитано 03.10.2009, 01:33  
tsb
Прописка
 
Аватар для tsb
 
Регистрация: 25.11.2006
Адрес: Харьков
Сообщений: 295
Сказал спасибо: 25
Сказали Спасибо 71 раз(а) в 60 сообщении(ях)
tsb на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

А чем Вы видите, на каких командах "виснет"?
tsb вне форума  
Непрочитано 03.10.2009, 09:43  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Подставляю некое видимое действие, например вывод в
порт, сконфигурированный на вывод определенного
значения до вызова функции (нормально проходит)
и в самой функции (не работает даже если стоит в самом начале)
Если функцию заглушить, то после выхода из нее
вывод проходит тоже нормально :о
tolyanv8 вне форума  
Непрочитано 03.10.2009, 10:03  
otest
Почётный гражданин KAZUS.RU
 
Регистрация: 29.01.2005
Адрес: Воронеж
Сообщений: 1,384
Сказал спасибо: 24
Сказали Спасибо 243 раз(а) в 182 сообщении(ях)
otest на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

А почему вы Mplab не пользуете или симулятор для наглядности?
otest вне форума  
Непрочитано 03.10.2009, 12:11  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Mplab пользовал, но в нем-то как раз все проходит
без сучка и задоринки в отличие от реала
tolyanv8 вне форума  
Непрочитано 03.10.2009, 18:21  
Driver_gv
Временная регистрация
 
Регистрация: 09.06.2006
Адрес: Lugansk
Сообщений: 75
Сказал спасибо: 0
Сказали Спасибо 26 раз(а) в 21 сообщении(ях)
Driver_gv на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Ожидать внешнее событие без выхода по таймауту - плохой тон программирования,
если событие по какимто причинам не произошло то программа как-бы "зависнет"

Пример из Вашего кода
Код:
get_scl_write	btfss	SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
		goto	get_scl_write
Если ведомое устройство не "попустило" то программа будет вечно ждать.
Правильно сделать ожидание в течении некоторого времени, и если устройство в этот период не ответило, выставлять флаг ошибки переферийного устройства и выходить из функции.
Driver_gv вне форума  
Непрочитано 03.10.2009, 19:54  
tolyanv8
Прописка
 
Аватар для tolyanv8
 
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
tolyanv8 на пути к лучшему
По умолчанию Re: Проблема с PIC16F73

Цитата:
Ожидать внешнее событие без выхода по таймауту - плохой тон программирования,
если событие по какимто причинам не произошло то программа как-бы "зависнет"
Это понятно
В этом случае проц будет сброшен по WDT
Тем более, что зависание происходит не там (пробовал убирать
этот цикл а буквально в первой строчке функции.

P.S. На другом PIC-е этот же код отлично функционирует
tolyanv8 вне форума  
 

Закладки
Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема при запуске Atmega16 zamsv Микроконтроллеры, АЦП, память и т.д 5 02.10.2009 12:52
[Решено] проблема при работе с Bluetooth модулем Gn0me Автоматика и аппаратура связи 1 02.10.2009 09:33
[Решено] Проблема с eeprom в Proteus Memfis666 Proteus, KiCAD и другие ECAD 1 01.10.2009 15:38
Проблема запитывания демо платы от PICKIT2 alexander70 Микроконтроллеры, АЦП, память и т.д 9 28.09.2009 22:17


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot