реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> DS1307 может оживить время?, Помогите прочитать с DS1307 больше одного байта! плиз..
chu
сообщение Jun 4 2012, 10:44
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



Цитата(AVRdeveloper @ Jul 24 2008, 19:43) *
Всем доброе время суток! У меня проблема с DS1307. Использую Мегу16
После инициализации МК произвожу чтение с этой МС раз в секунду таким способом:
Первый байт принимаеться каждый раз с новым значением, а второй - постоянно $FF
Как принять последовательность из нескольких байт?


call TWI_init ; инитим I2C МК
call TWI_stop
call TWI_start
ldi r16,0b11010001
call TWI_send_adr
ldi r16,0 ; r16 используеться для передачи след. ф.-ии значений
call TWI_send_data
call get_byte1 ; При приеме первого байта считываеться случаqное число регистра данных TWI
call get_byte2 ; При приеме второго байта постоянно принимается $FF
call TWI_stop
..
..

если не ошибаюсь, 0b11010001 ==0xD1, вот что написанов даташите на ds1307:
Цитата
The device’s slave address is D0h and cannot be modi-fied by the user. When the R/W bit is 0 (such as in D0h), the master is indicating it writes data to the slave. If R/W = 1 (D1h in this case), the master is
indicating it wants to read from the slave. If an incor-rect slave address is written, the device assumes the
master is communicating with another I2C device and ignore the communication until the next START condi-tion is sent.

а для считывания необходимо повторный рестарт делать
go forth
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jun 4 2012, 17:07
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Алгоритм считывания данных приведён на Figure 6. Data Read (Write Pointer, Then Read)—Slave Receive and Transmit в DS


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
chu
сообщение Jun 5 2012, 12:11
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246



у меня с ds1307 таких проблем, как у топикстартера, не было.
в приведенном фрагменте кода (amforth) протокол обмена по шине i2c представлен весьма прозрачно

Код
  $d0  constant  twi.ds1307   \ device address on i2c bus

\ запись байта <c> по адресу <addr> в ds1307
  : twi.rtc! ( c addr -- )

      \ send device address
        twi.ds1307
        twi.start
        twi.tx      $18 twi.status?

      \ send ds1307 address pointer
        twi.tx      $28 twi.status?

      \ send data byte
        twi.tx      $28 twi.status?
        twi.stop
       ;

\ чтение байта по адресу <addr> из ds1307
  : twi.rtc@ ( addr -- c )

        twi.ds1307
        twi.start
        twi.tx      $18 twi.status?
        twi.tx      $28 twi.status?

      \ repeated start to read the data byte
        twi.start   $10 twi.status?
        twi.ds1307  set-rw
        twi.tx      $40 twi.status?
        twi.rxn     $58 twi.status?
        twi.stop
       ;


and so forth...
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th August 2025 - 12:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016