|
DS1307 может оживить время?, Помогите прочитать с DS1307 больше одного байта! плиз.. |
|
|
|
Jul 24 2008, 12:43
|
Группа: Новичок
Сообщений: 11
Регистрация: 8-02-08
Пользователь №: 34 857

|
Всем доброе время суток! У меня проблема с 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 .. .. .. TWI_init: ldi r16,(0<<TWPS0)|(1<<TWPS1) out TWSR,r16 ldi r16,9 ; битрейт при частоте 8МГц меньше 100кГц out TWBR,r16 ldi r16,(1<<TWEA)|(1<<TWEN)|(0<<TWIE); out TWCR,r16 ret ; ; TWI_start:
ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) out TWCR, r16; формирование режима START waitST: in r16,TWCR ; Проверка бита TWINT sbrs r16,TWINT rjmp waitST ; Не получен TWINT - цикл
RETURN: ret
TWI_send_adr:
// проверим, что предидущее состояние было старт // в регистре r16 содержится адрес адрессуемого устройства push r16
in r16,TWSR ; Проверка кода ответа andi r16,0xF8 cpi r16,$08 breq dalee11 cpi r16,$10 breq dalee11 ; Правильный код -выход из подпрограммы brne TWI_error ; Нет - повтор.
dalee11: pop r16 out TWDR, r16 ldi r16, (1<<TWEA)|(1<<TWINT)|(1<<TWEN)|(0<<TWIE) out TWCR, r16
wait2: in r16,TWCR sbrs r16,TWINT rjmp wait2 // передача не происходит? или установка флага не происходит из-за другой причины? in r16,TWSR andi r16, 0xF8 cpi r16, $18 breq tsa_00 cpi r16, $40 brne TWI_ERROR tsa_00: ret ; get_byte1: in r16,TWCR sbrs r16,TWINT rjmp get_byte1 in r16,twdr ldi XH,high(secs_twi1) ldi XL,low(secs_twi1) st x,r16 // Секунды в БЦД формате записали ldi r16,(1<<TWEA)|(1<<TWINT)|(1<<TWEN)|(0<<TWIE) out TWCR,r16 ret ; ; get_byte2: in r16,TWCR sbrs r16,TWINT rjmp get_byte2 in r16,twdr ldi XH,high(secs_twi2) ldi XL,low(secs_twi2) st x,r16 // Секунды в БЦД формате записали ldi r16,(1<<TWEA)|(1<<TWINT)|(1<<TWEN)|(0<<TWIE) out TWCR,r16 ret ; TWI_send_data: out TWDR, r16 ldi r16, (0<<TWEA)|(1<<TWINT)|(1<<TWEN)|(1<<TWIE) out TWCR, r16; wait3: sei nop cli in r16,TWCR sbrs r16,TWINT rjmp wait3 in r16,TWSR andi r16, 0xF8 cpi r16, $28;MT_DATA_ACK breq tsa_01 cpi r16,$58 breq tsa_01 cpi r16,$50 brne TWI_error TSA_01: ret
Сообщение отредактировал AVRdeveloper - Jul 24 2008, 12:44
|
|
|
|
|
 |
Ответов
|
Jul 24 2008, 13:55
|
Участник

Группа: Участник
Сообщений: 52
Регистрация: 11-01-07
Пользователь №: 24 303

|
Цитата(aaarrr @ Jul 24 2008, 16:09)  ACK, нaверное, не выставляется после 1-о чтения. При приёме первого байта get_byte1: in r16,TWCR sbrs r16,TWINT rjmp get_byte1 in r16,twdr ldi XH,high(secs_twi1) ldi XL,low(secs_twi1) st x,r16 // Секунды в БЦД формате записали ldi r16,(1<<TWEA)|(1<<TWINT)|(1<<TWEN)|(0<<TWIE); Флаг (1<<TWEA) - для формирования АСК! out TWCR,r16 ret Ещё: TWEA - TWI Enable Acknowledge Bit Я устанавливаю этот бит после и перед приемом (т.е. после отправки адресса), и после приема первого байта.. наверное, АСК выставляеться...
--------------------
Роботы делают роботов - предел автоматизации
|
|
|
|
Сообщений в этой теме
AVRdeveloper DS1307 может оживить время? Jul 24 2008, 12:43  defunct Цитата(Шалапут:-) @ Jul 24 2008,... Jul 24 2008, 14:27 Александр Куличок TWI_send_data:
out TWDR, r16
ldi r16, (0<<TW... Jul 24 2008, 14:24 AVRdeveloper Цитата(Александр Куличок @ Jul 24 2008, 17... Jul 25 2008, 05:23  AVRdeveloper Цитата(AVRdeveloper @ Jul 25 2008, 08:23)... Jul 25 2008, 14:56   Qwertty Цитата(AVRdeveloper @ Jul 25 2008, 18:56)... Jul 25 2008, 17:41   defunct Цитата(AVRdeveloper @ Jul 25 2008, 17:56)... Jul 25 2008, 22:12    AVRdeveloper Цитата(defunct @ Jul 26 2008, 01:12) Стар... Jul 28 2008, 07:14     defunct Цитата(AVRdeveloper @ Jul 28 2008, 10:14)... Jul 28 2008, 09:58      AVRdeveloper Цитата(defunct @ Jul 28 2008, 12:58) не н... Jul 28 2008, 12:37       Олег Хохлов вот мои библиотеки для работы с DS1307 для IAR C, ... Jul 30 2008, 13:57 Шалапут:-) Всем спасибо, ваши советы помогли, но все равно пе... May 17 2012, 09:12 ILYAUL Цитата(Шалапут:-) @ May 17 2012,... May 17 2012, 11:49 chu Цитата(AVRdeveloper @ Jul 24 2008, 19:43)... Jun 4 2012, 10:44 ILYAUL Алгоритм считывания данных приведён на Figure 6. ... Jun 4 2012, 17:07 chu у меня с ds1307 таких проблем, как у топикстартера... Jun 5 2012, 12:11
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|