Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.05.2009, 21:56
|
|
Частый гость
Регистрация: 09.04.2005
Сообщений: 29
Сказал спасибо: 0
Сказали Спасибо 16 раз(а) в 10 сообщении(ях)
|
|
|
|
|
05.05.2009, 22:07
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,530
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: Подтяжка +5V
|
|
|
|
06.05.2009, 17:37
|
|
Прописка
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
|
Подтяжка +5V
Кстати, теперь к тому же результату приводят эксперименты с
программным включением/выключением внутренних подтяжек,
одна из причин глюков была ошибка в коде, которую сейчас я устранил
|
|
|
|
07.05.2009, 20:36
|
|
Прописка
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
|
WOW работает!!! всем респект!
Даже на внутренних подтяжках
Код:
|
#define SCL_PIN PORTA,0x4 ; SCL
#define SDA_PIN PORTA,0x5 ; SDA
#define SDA_SET TRISA,0x5 ; SDA - ввод/вывод
#define SCL_SET TRISA,0x4 ; SCL - ввод/вывод
#define SDA_PULL WPUA,0x5 ; SDA - pull
#define SCL_PULL WPUA,0x4 ; SCL - pull
-------------------//---------------------
i2c_init
bsf STATUS,RP0 ;bank1
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 - высокий уровень
bcf SDA_PIN ;инициируем нисходящий фронт
call i2c_wait
bcf SCL_PIN ;SCL - низкий уровень
return;
i2c_close
bsf STATUS,RP0 ;bank1
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
movlw 0x03
movwf i2c_count
wait nop
decfsz i2c_count,1
goto wait
return;
-------------------//---------------------
i2c_send_byte
bsf STATUS,RP0 ;bank1
bcf SDA_SET ; SDA - вывод
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
btfsc i2c_byte,7 ; бит данных - 0?
bsf SDA_PIN ; нет,выводим 1 на SDA
bsf STATUS,RP0 ;bank1
bsf SCL_SET ;SCL - на вход!!!
bcf OPTION_REG,NOT_RAPU ; этой командой переводим SCL в режим "мягкой" 1
bsf SCL_PULL
get_scl_write btfss SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
goto get_scl_write
; попустило :)))
call i2c_wait ; ждем-ссс
rlf i2c_byte,1 ; сдвигаем влево байт данных
bsf STATUS,RP0 ;bank1
bcf SCL_SET ;SCL - на выход
bcf STATUS,RP0 ;bank 0
bcf SCL_PIN ; выводим 0 на SCL
bcf SDA_PIN ; выводим 0 на SDA
call i2c_wait
decfsz i2c_tmp,1 ; конец цикла ?
goto send_bit ; нет - переход
bsf STATUS,RP0 ;bank1
bsf SDA_SET ; SDA - ввод
bsf SCL_SET ;SCL - на вход!!!
bcf OPTION_REG,NOT_RAPU ; этой командой переводим SDA! в режим "мягкой" 1
bsf SDA_PULL ;!!!
bsf SCL_PULL
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 SCL_SET ;SCL - на выход
bcf STATUS,RP0 ;bank 0
bcf SCL_PIN ; выводим 0 на SCL
bcf SDA_PIN ; выводим 0 на SDA
call i2c_wait
return;
;************************************************* *********************
; I2c_read
; считывание 8 бит с шины
;
i2c_read_byte
bsf STATUS,RP0 ;bank1
bsf SDA_SET ;SDA - на ввод
bcf SCL_SET ;SCL - на вывод
bcf OPTION_REG,NOT_RAPU ; этой командой переводим SDA в режим "мягкой" 1
bsf SDA_PULL ;!!!
bcf STATUS,RP0 ;bank 0
bcf SCL_PIN ;SCL - на 0
call i2c_wait
movlw 0x08
movwf i2c_tmp
read_bit rlf i2c_byte,1 ; сдвигаем байт влево
bcf i2c_byte,0 ; устанавливаем бит в 0
bsf STATUS,RP0 ;bank1
bsf SCL_SET ;SCL - на вход!!!
bcf OPTION_REG,NOT_RAPU ; этой командой переводим SCL в режим "мягкой" 1
bsf SCL_PULL
bcf STATUS,RP0 ;bank 0
get_scl btfss SCL_PIN ; и ожидаем, пока ведомое устройство не попустит :)
goto get_scl
; попустило - идем дальше ;)))
call i2c_wait
btfsc SDA_PIN ; SDA - 0?
bsf i2c_byte,0 ; нет - устанавливаем бит в 1
call i2c_wait
bsf STATUS,RP0 ;bank1
bcf SCL_SET ;SCL - на выход
bcf STATUS,RP0 ;bank 0
bcf SCL_PIN ; выводим 0 на SCL
call i2c_wait
decfsz i2c_tmp,1 ; конец цикла ?
goto read_bit ; нет - переход
return;
send_ack
bsf STATUS,RP0 ;bank1
bcf SDA_SET ; SDA - вывод для АСК
bcf STATUS,RP0 ;bank 0
bcf SDA_PIN ; выдаем АСК
bsf STATUS,RP0 ;bank1
bsf SCL_SET ;SCL - на ввод!!!
bcf OPTION_REG,NOT_RAPU ; этой командой переводим SCL в режим "мягкой" 1
bsf SCL_PULL
bcf STATUS,RP0 ;bank 0
get_ack_scl btfss SCL_PIN
goto get_ack_scl ;опять ждем :)))
call i2c_wait
bsf STATUS,RP0 ;bank1
bcf SCL_SET ;SCL - на выход
bcf STATUS,RP0 ;bank 0
bcf SCL_PIN ; выводим 0 на SCL
call i2c_wait
return; |
|
|
|
|
08.05.2009, 18:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: WOW работает!!! всем респект!
Ну братцы... люди для вас уже всё давно написали...
AN554 от Микрочипа... лень вам поискать ....
Прикрепленный файл: 7237468.RAR
|
|
|
|
08.05.2009, 20:49
|
|
Прописка
Регистрация: 29.09.2007
Адрес: Донецк, ????
Сообщений: 199
Сказал спасибо: 21
Сказали Спасибо 19 раз(а) в 15 сообщении(ях)
|
Re: WOW работает!!! всем респект!
Сорри, просто не знал про него (хотя нарыл много другой доки ![Улыбка](images/smilies/icon_smile.gif)
Прошу не судить строго и не бить больно (все-таки первый более-менее серьезный проект ![Улыбка](images/smilies/icon_smile.gif)
Кстати приведенный код по-моему не использует внутренние
PULL-UPы, главное - что докопался сам! ![Улыбка](images/smilies/icon_smile.gif)
(и до PULL-UP-ов тоже ![Улыбка](images/smilies/icon_smile.gif)
В любом случае спасибо за информацию !!!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
PIC16F630
|
Lex_DJ |
Микроконтроллеры, АЦП, память и т.д |
39 |
06.11.2010 22:22 |
asm программирование МК PIC16F630
|
SVDimon |
Микроконтроллеры, АЦП, память и т.д |
13 |
13.12.2007 12:15 |
программирование PIC16F630
|
Lex_DJ |
Микроконтроллеры, АЦП, память и т.д |
0 |
25.05.2007 10:39 |
Проблема с I2C
|
HaZaR |
Микроконтроллеры, АЦП, память и т.д |
3 |
04.07.2005 17:10 |
I2C
|
chipic128 |
Микроконтроллеры, АЦП, память и т.д |
4 |
23.02.2005 02:19 |
Часовой пояс GMT +4, время: 14:52.
|
|