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

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

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

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

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

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

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

 
Опции темы
Непрочитано 03.03.2008, 12:04  
stepashka
Частый гость
 
Регистрация: 13.12.2006
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stepashka на пути к лучшему
По умолчанию pic16f628 , I2C и ЕЕПРОМ 24С08

подскажите программкуу для работы с интерфейсом I2C
для pic16f628 для считывания из микросхемы ЕЕПРОМ типа 24С08 .
пробовал не один вариант программок с инета
к сожалению мне не удалось ни одну "заточить" для себя не точ то заточить но и запустить
моя тестовая схемка :
попробовал эту прошивку с http://www.piclist.com/
тоже не стала работать после переназначения портов и ног пинов. подскажите реально работающий код для 628 пика
Код:
; Call with: EEPROM address in Mem_Loc
; Returns with: byte in Data_Buf
ReadEPROM
		bcf	STATUS, RP0
		movf	PORTA, 0		; for EEPROM operation,
		andlw	0xF9			; load zero into RB1 and RB2
		movwf	PORTA			; for passive control of bus
		bsf	STATUS, RP0		; select Bank 1 for TRISB access (passive SCL/SDA control)
		bsf	SDA			; let SDA line get pulled high
		bsf	SCL			; let SCL line get pulled high
		bcf	SDA			; START - data line low
		movlw	0xA0			; send "dummy" write (10100000) to set address
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine		; NOTE: MUST USE "RETURN" FROM THERE
		movf	Mem_Loc, 0
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine
		bcf	SCL			; pull clock line low in preparation for 2nd START bit
		nop
		bsf	SDA			; pull data line high - data transition during clock low
		bsf	SCL			; pull clock line high to begin generating START
		bcf	SDA			; 2nd START - data line low
		movlw	0xA1			; request data read from EPROM (read=10100001)
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine
;------ Note that Byte_Out leaves with SDA line freed to allow slave to send data in to master.
		call	Byte_In
		movf	Data_Buf, 0		; put result into W register for returning to CALL
		bcf	SCL			; extra cycle for SDA line to be freed from EPROM
		nop
		bcf	SDA			; ensure SDA line low before generating STOP
		bsf	SCL			; pull clock high for STOP
		bsf	SDA			; STOP - data line high
		bcf	STATUS, RP0		; leave with Bank 0 active as default
		return

;------ Save each byte as it's written (not page write mode).
;------ We can speed this up to ~1.5ms for fast page write capable EEPROMs, but in case we want to
;------ use another slower memory chip, the default is 10ms delay per write.
;
; Call with:  EEPROM address in Mem_Loc, byte to be sent in Data_Buf
; Returns with:  nothing returned
WriteEPROM
		bcf	STATUS, RP0
		movf	PORTA, 0		; for EEPROM operation,
		andlw	0xF9			; load zero into RB1 and RB2
		movwf	PORTA			; for passive control of bus
		bsf	STATUS, RP0		; select Bank 1 for TRISB access (passive SCL/SDA control)
		bsf	SDA			; ensure SDA line is high
		bsf	SCL			; pull clock high
		bcf	SDA			; START - data line low
		movlw	0xA0			; send write (10100000) to set address
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine		; NOTE: MUST USE "RETURN" FROM THERE
		movf	Mem_Loc, 0
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine
		movf	Data_Buf, 0		; move data to be sent to W
		call	Byte_Out
		btfsc	flags, 0
		goto	Error_Routine
		bcf	SCL			; extra cycle for SDA line to be freed from EPROM
		nop
		bcf	SDA			; ensure SDA line low before generating STOP
		bsf	SCL			; pull clock high for STOP
		bsf	SDA			; STOP - data line high
		call	Delay10ms		; 10ms delay max. required for EPROM write cycle
		bcf	STATUS, RP0		; leave with Bank 0 active by default
		return

;------ This routine reads one byte of data from the EPROM into Data_Buf
Byte_In
		clrf	Data_Buf
		movlw	0x08			; 8 bits to receive
		movwf	GenCount
ControlIn
		rlf	Data_Buf, 1		; shift bits into buffer
		bcf	SCL			; pull clock line low
		nop
		bsf	SCL			; pull clock high to read bit
		bcf	STATUS, RP0		; select Bank 0 to read PORTB bits directly!
		btfss	SDA			; test bit from EPROM (if bit=clear, skip because Data_Buf is clear)
		goto	$+3
		bsf	STATUS, RP0		; select Bank 1 to access variables
		bsf	Data_Buf, 0		; read bit into 0 first, then eventually shift to 7
		bsf	STATUS, RP0		; select Bank 1 to access variables
		decfsz	GenCount, 1
		goto	ControlIn
		return

;------ This routine sends out the byte in the W register and then waits for ACK from EPROM (256us timeout period)
Byte_Out
		movwf	OutputByte
		movlw	0x08			; 8 bits to send
		movwf	GenCount
		rrf	OutputByte, 1		; shift right in preparation for next loop
ControlOut
		rlf	OutputByte, 1		; shift bits out of buffer
		bcf	SCL			; pull clock line low
		nop
		btfsc	OutputByte, 7		; send current "bit 7"
		goto	BitHigh
		bcf	SDA
		goto	ClockOut
BitHigh		
		bsf	SDA
ClockOut	
		bsf	SCL			; pull clock high after sending bit
		decfsz	GenCount, 1
		goto	ControlOut
		bcf	SCL			; pull clock low for ACK change
		bsf	SDA			; free up SDA line for slave to generate ACK
		nop
		nop
		nop				; wait for slave to pull down ACK
		bsf	SCL			; pull clock high for ACK read
		clrf	GenCount		; reuse this register as a timeout counter (to 256us) to test for ACK
WaitForACK
		bsf	STATUS, RP0		; select Bank1 for GenCount access
		incf	GenCount, 1		; increase timeout counter each time ACK is not received
		btfsc	STATUS, Z
		goto	No_ACK_Rec
		bcf	STATUS, RP0		; select Bank0 to test SDA PORTB input directly!
		btfsc	SDA			; test pin. If clear, EEPROM is pulling SDA low for ACK
		goto	WaitForACK		; ...otherwise, continue to wait
		bsf	STATUS, RP0		; select Bank1 as default during these routines
		bcf	flags, 0		; clear flag bit (ACK received)
		return


;------ No ACK received from slave (must use "return" from here)
;; Typically, set a flag bit to indicate failed write and check for it upon return.
No_ACK_Rec
		bsf	flags, 0		; set flag bit
		return				; returns to Byte_Out routine (Bank 1 selected)


;------ No ACK received from slave.  This is the error handler.
Error_Routine
; Output error message, etc. here
		bcf	STATUS, RP0		; select Bank0 as default before returning home
		return				; returns to INITIAL calling routine


Delay10ms
	movlw	0x0A
	movwf	GenCount
Delay_Start
	nop
	movlw 0x07			; 249 cycles * 4us per cycle + 5us = 1.000ms
Delay
	addlw 0x01
	btfss STATUS, Z
	goto Delay
	decfsz GenCount, 1
	goto Delay_Start
	return
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/03032008/8639148.GIF" frameborder="0" name="fr4943417" scrolling="yes" width="470" height="463" align="bottom"›[img]nuke/users_images/03032008/8639148.GIF[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.

‹/IFRAME›
‹/center›
Реклама:
stepashka вне форума  
Непрочитано 03.03.2008, 13:48  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Если знаеш какие команды выполняет ЕЕПРОМ 24С08 то проблем с написание обмена по шине i2c не должно быть,если конечно шину знаеш как работает,где у меня было на ассамблере,если надо позже выложу.
CERGEI1982 вне форума  
Непрочитано 03.03.2008, 15:22  
stepashka
Частый гость
 
Регистрация: 13.12.2006
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stepashka на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
Если знаеш какие команды выполняет ЕЕПРОМ 24С08 то проблем с написание обмена по шине i2c не должно быть,если конечно шину знаеш как работает,где у меня было на ассамблере,если надо позже выложу.
дело для меня новое откудаж мне все знать
вся информация на буржуйском языке
окей буду ждать тогда твоего кода на Асме спасибо
если для ЕЕПРОМ 24С128 или ЕЕПРОМ 24С02 тоже пойдет
stepashka вне форума  
Непрочитано 03.03.2008, 18:10  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Сообщение от stepashka
Сообщение от CERGEI1982
Если знаеш какие команды выполняет ЕЕПРОМ 24С08 то проблем с написание обмена по шине i2c не должно быть,если конечно шину знаеш как работает,где у меня было на ассамблере,если надо позже выложу.
дело для меня новое откудаж мне все знать
вся информация на буржуйском языке
окей буду ждать тогда твоего кода на Асме спасибо
если для ЕЕПРОМ 24С128 или ЕЕПРОМ 24С02 тоже пойдет
Почитай вот эту книжку http://dasbook.ru/?book=22 ,там что то есть об ЕЕПРОМ,с ней не работал,но думаю ничего сложно нет.
Код на ассамбере посмотрю,тока там подпрограммы-старт,рестарт,стоп и передача байта.В той же книжке есть описание i2c так что почитай,потом сможеш подпрограммы подключить в свою программу.
CERGEI1982 вне форума  
Непрочитано 04.03.2008, 09:08  
stri
Прописка
 
Аватар для stri
 
Регистрация: 11.07.2006
Адрес: Ru, Nsk
Сообщений: 249
Сказал спасибо: 1
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
stri на пути к лучшему
По умолчанию

вот если что код на С. Работает как надо.
Код:
void putatmel(unsigned int adr ,unsigned char data1){
char a;
unsigned char adrL;
unsigned char adrH;

GIE=0;
WP=0;//write protect off

adrL = adr & 0xff;
adrH = (((adr ›› 8) ‹‹ 1) & 0x0E) | 0xA0;



i2c_WriteTo(adrH);
i2c_PutByte(adrL);
i2c_PutByte(data1);
i2c_Stop();
WP=1;//write protect on
GIE=1;
DelayMs(20);
}



unsigned char getatmel(unsigned int adr){
unsigned char result;
unsigned char adrL;
unsigned char adrH;

GIE=0;

adrL = adr & 0xff;
adrH = (((adr ›› 8) ‹‹ 1) & 0x0E) | 0xA0;

i2c_WriteTo(adrH);
i2c_PutByte(adrL);

i2c_ReadFrom(adrH);
result=i2c_GetByte(I2C_LAST);//MORE
i2c_Stop();

GIE=1;
return result;
}
stri вне форума  
Непрочитано 04.03.2008, 17:48  
stepashka
Частый гость
 
Регистрация: 13.12.2006
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stepashka на пути к лучшему
По умолчанию

Сообщение от CERGEI1982

Почитай вот эту книжку http://dasbook.ru/?book=22 ,там что то есть об ЕЕПРОМ,с ней не работал,но думаю ничего сложно нет.
Код на ассамбере посмотрю,тока там подпрограммы-старт,рестарт,стоп и передача байта.В той же книжке есть описание i2c так что почитай,потом сможеш подпрограммы подключить в свою программу.
книга отличная прочел почти все спасибо большое за ссылку , насчет програмки все таки посматри ее
попробую разобраться ..
Сообщение от stri
вот если что код на С. Работает как надо.
.
вот к сожелению пока в СЯХ никак
если нужда заставит то буду разбираться ....
stepashka вне форума  
Непрочитано 04.03.2008, 20:27  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

stepashka можно сказать спасибо тебе,просто был проект который на ассамблере не додел,бросил давным давно(термометр делал на жки),все таки дадел сейчас,ведь обещал тебе подпрограммы на шину i2c.
Вот сами подпрограммы,если что не понятно спрашивай
Код:
;=================================================  ==============
;+++++++++++++++++++++++++++++++++++++++++++++++++  +++++++++++++++         
;ЗАДЕРЖКА 2 Мкс
PAUSE5      NOP
            CLRWDT
            nop
            RETLW       0
;ПОДПРОГРАММА СТАРТА ШИНЫ I2C
I2CSTART    
            BCF         SDA
            CALL        PAUSE5
            BCF         SCL
            CALL        PAUSE5
            RETURN
startR ;Рестарт
            bcf         SCL
            CALL        PAUSE5
            bsf         SDA
            CALL        PAUSE5
            bsf         SCL
            CALL        PAUSE5
            bcf         SDA
            CALL        PAUSE5
            bcf         SCL
            return
;ПОДПРОГРАММА  СТОПА ШИНЫ I2C
I2CSTOP     CALL        PAUSE5
            BSF         SCL
            CALL        PAUSE5
            BSF         SDA
            RETURN
;ПОДПРОГРАММА  ЗАПИСИ В SLAVE УСТРОЙСТВО
I2CSEND     MOVWF       I2CTEMP
            MOVLW       .8
            MOVWF       COUNTER
LOOP        CLRWDT
	    BCF		STATUS,C
            RLF         I2CTEMP,1     ;СДВИГ ВЛЕВО ЧЕРЕЗ БИТ С
            BTFSC       C1
            BSF         SDA
            NOP
            BTFSS       C1
            BCF         SDA
            BSF         SCL
            CALL        PAUSE5

	    MOVLW       0X01        ;ЕСЛИ ПЕРЕДАЛИ ПОСЛЕДНИЙ БИТ,
	    SUBWF       COUNTER,W   ;ТО SCL ОПУСКАЕМ КОГДА ВЫЙДЕМ ИЗ ЦИКЛА
	    BTFSS       STATUS,Z
            BCF         SCL

            CALL        PAUSE5
            DECFSZ      COUNTER
            GOTO        LOOP

            BSF         SHIFT       ;ПРОВЕРКА БИТА АСК 
            BSF         TRISB,7
            BCF         SHIFT
	    BCF         SCL
            CALL        PAUSE5

            BSF         SCL        
            CALL        PAUSE5
            BTFSS       SDA
            BSF         ACK
            NOP
            BSF         SHIFT
            BCF         TRISB,7
            BCF         SHIFT
            BCF         SCL
            BCF         SDA
            RETURN
;ПОДПРОГРАММА СЧИТЫВАНИЯ СО SLAVE УСТРОЙСТВА
I2CREAD     BSF         SHIFT
            BSF         TRISB,7
            BCF         SHIFT
            MOVLW       .8
            MOVWF       COUNTER
LOOP1       CLRWDT
            BSF         SCL
            CALL        PAUSE5
            BCF         C1
            BTFSC       SDA
            BSF         C1
            BCF         SCL
            CALL        PAUSE5
            RLF         I2CTEMP,1      ;СДВИГ ВЛЕВО ЧЕРЕЗ БИТ С
            DECFSZ      COUNTER
            GOTO        LOOP1 
            BSF         SHIFT
            BCF         TRISB,7
            BCF         SHIFT
            BSF         SDA
            BTFSS       F              ;ПРОВЕРКА ВЫДАВАТЬ ИЛИ НЕТ АСК
            GOTO        $+2
            BCF         SDA
            BSF         SCL
            CALL        PAUSE5
            BCF         SCL
            BCF         SDA 
            MOVF        I2CTEMP,W
            RETURN
Вот объявлены имена
Код:
#DEFINE   SHIFT     STATUS,RP0
#DEFINE   ZERO      STATUS,Z
#DEFINE   SCL       PORTB,6
#DEFINE   SDA       PORTB,7
#DEFINE   LED       PORTA,0
#DEFINE   ACK       FLAG,0
#DEFINE   F         FLAG,1
#DEFINE   C1        STATUS,C
#DEFINE   E         PORTB,0
#DEFINE   RS        PORTB,2
#DEFINE   RW        PORTB,1
Также прикрепляю проект термометра на ЖКИ,тока нужен руссифицированый жки в протеусе,отлаживал за вечер на скорую руку

Прикрепленный файл: 1762186.rar
CERGEI1982 вне форума  
Непрочитано 04.03.2008, 20:29  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

stepashka а Си учу на будущее,советую,дельная вещь,но знание ассамблера не помешает
CERGEI1982 вне форума  
Непрочитано 05.03.2008, 02:31  
stepashka
Частый гость
 
Регистрация: 13.12.2006
Сообщений: 36
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
stepashka на пути к лучшему
По умолчанию

Сообщение от CERGEI1982
stepashka можно сказать спасибо тебе,просто был проект который на ассамблере не додел,бросил давным давно(термометр делал на жки),все таки дадел сейчас,ведь обещал тебе подпрограммы на шину i2c.
Вот сами подпрограммы,если что не понятно спрашивай
[code]
Вот объявлены имена
Код:
#DEFINE   SHIFT     STATUS,RP0
#DEFINE   ZERO      STATUS,Z
#DEFINE   SCL       PORTB,6
#DEFINE   SDA       PORTB,7
#DEFINE   LED       PORTA,0
#DEFINE   ACK       FLAG,0
#DEFINE   F         FLAG,1
#DEFINE   C1        STATUS,C
#DEFINE   E         PORTB,0
#DEFINE   RS        PORTB,2
#DEFINE   RW        PORTB,1
Также прикрепляю проект термометра на ЖКИ,тока нужен руссифицированый жки в протеусе,отлаживал за вечер на скорую руку
вопрос такой а насколько совместимы подпрограммы от термометра и еепром чипа ?
мне кажется придется доробатывать ?
дело в том что я уже много программок перепробывал а результата нет почему то (прередача ни считывание еепром не работает ) пробовал код кулакова достаточно прозрачный и понятный но результат прежний
мн е кажется переключатель страниц тому виной
код вечером проверю спасибо .

Прикрепленный файл: 1762186.rar
stepashka вне форума  
Непрочитано 05.03.2008, 02:50  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию

Так в чем проблема? ты не можеш скачать даташифт на ЕЕПРОМ и посмотреть каким образом записывается в память? или хочеш чтоб всю работу сделал за тебя?
CERGEI1982 вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВИТАЯ ПАРА +220В И КАК ЗАШИТЬ ЕЕПРОМ Gladkih Микроконтроллеры, АЦП, память и т.д 26 24.12.2008 20:31
как записать массив 50 на 16 в еепром atmega128& sma-etu Микроконтроллеры, АЦП, память и т.д 0 15.02.2007 16:05
PIC16F628 max0000 Микроконтроллеры, АЦП, память и т.д 3 07.01.2007 02:19
PIC16F628 max0000 Микроконтроллеры, АЦП, память и т.д 1 06.01.2007 17:18
PIC16F628 max0000 Микроконтроллеры, АЦП, память и т.д 0 26.12.2006 22:40


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


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