Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
PIC18F2520 записывает данные в DS1307 но не читает
Володимир Дата: Пн, 14.02.2011, 11:01  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Подскажите почему PIC18F2520 можен не читать данных из DS1307, в DS1307 данные пишутся точно, так как запускается генератор, а вот при попытке чтения читаются одни нули. Ниже схема подключения и часть кода. Сначала думал что проблема может быть в том что подтягивающие резисторы на контролере работають только на вход, переключал микросхему на порт А, та же картина.

Спасибо.

Device 18F2520
Xtal 16
Declare I2C_Slow_Bus 0
TRISB.0 = 1 'Порт RB0 вход
TRISB.1 = 0 'Порт RB1 выход
TRISB.2 = 1 'Порт RB2 вход
TRISB.3 = 1 'Порт RB3 вход
TRISB.4 = 1 'Порт RB4 вход
TRISB.5 = 1 'Порт RB5 вход
TRISB.6 = 1 'Порт RB6 вход
TRISB.7 = 1 'Порт RB7 вход
INTCON2 = %00000000 'Включить подтягущие резисторы
INTCON = %00000000 'Выключить все преривания
I2Cin I2C_SDA, I2C_SCL, $D0, 0, [sec,mins,hr,day,date,mon,yr] 'читаем данные
I2COUT I2C_SDA, I2C_SCL, $D0, 0, [sec,mins,hr,day,date,mon,yr,%00010000] 'пишем данные

http://vlad5229.narod.ru/musor/bk.JPG

ЯНДЕКС Дата: 14.02.2011
ivan_fd Дата: Пн, 14.02.2011, 14:11  |                                                                                                                Сообщение # 2
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

А вы попробуйте в Протеусе просимулировать.
Еще замечание, команда для чтения $D0, а для записи $D1.
Володимир Дата: Пн, 14.02.2011, 22:13  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (ivan_fd)
Еще замечание, команда для чтения $D0, а для записи $D1.
Может наоборот, запись идет, но не читает, а записываю я $D0. Хотя спасибо за совет, только что перечитал даташит, действительно по двум адресам, но как раньше работало на пик16ф876а по одному адресу, програма были скомпилирована на пыкбейсикпро.
ivan_fd Дата: Пн, 14.02.2011, 22:46  |                                                                                                                Сообщение # 4
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Володимир)
Может наоборо

Да поспешил, Запись данных - D0. Чтение данных - D1.

Володимир Дата: Пн, 14.02.2011, 22:56  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (ivan_fd)
Да поспешил, Запись данных - D0. Чтение данных - D1.

Не, не пашет, ни командой
I2Cin I2C_SDA, I2C_SCL, $D1, 0, [sec,mins,hr,day,date,mon,yr]
ни
BusIn $D1, 0, [sec,mins,hr,day,date,mon,yr]

Declare I2C_Slow_Bus пробовол и ноль и еденицу, никакой разницы, одни нули читаются.

anatol Дата: Пн, 14.02.2011, 23:33  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 471
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Может подключить на штатные ноги (14,15) ноги шины I2C контроллера?
demanik Дата: Пн, 14.02.2011, 23:34  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Я так работаю с часами:

DECLARE SDA_PIN PORTC.6
DECLARE SCL_PIN PORTC.7
'---чтение-----------
BUSIN $D0, 0, [Sec,Mins,Hr,Day,Date,Mon,Yr]
'---запись-----------
BUSOUT $D1, 0, [Sec,Mins,Hr,Day,Date,Mon,Yr]

и все работает


Попробуй всё и вся... может быть пол...

demanik Дата: Пн, 14.02.2011, 23:39  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (anatol)
Может подключить на штатные ноги (14,15) ноги шины I2C контроллера?

Работает на любых, лиш бы не аналоговые.

$D0 адрес для чтения
$D1 адрес для записи
читаем внимательно мануал.

Quote (Володимир)
но как раньше работало на пик16ф876а по одному адресу, програма были скомпилирована на пыкбейсикпро.

пикбасикпро сам ставит единицу в младший разряд при отправке в шину I2C и 0 при приеме с шины


Попробуй всё и вся... может быть пол...

Володимир Дата: Вт, 15.02.2011, 09:18  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (anatol)
Может подключить на штатные ноги (14,15) ноги шины I2C контроллера?
Можно, но нужно травить новую плату.
Quote (demanik)
Работает на любых, лиш бы не аналоговые.
$D0 адрес для чтения
$D1 адрес для записи
читаем внимательно мануал.
Странно в даташите к дс1307 написано обратное, но это в принципе неважно, так как данные пишутся (при этом бит направления равен 0) и генератор запустился и на выходе SQW у меня есть сигнал частотой в 1 гЦ, значит часы должны полюбому считать и выдавать какую либо информацию. Я читал и с битом направления и 1 и 0, читаются одни нули.

Quote (Техническое описание DS1307 – 64 X 8 часы реального времени с последовательным интерфейсом)
Режим ведомого приёмника (режим записи DS1307).
который имеет значение 1101000, и следующий за ним бит направления (R/W), который для записи равен 0

Quote (Техническое описание DS1307 – 64 X 8 часы реального времени с последовательным интерфейсом)
Чтение данных – режим ведомого передатчика
который равен 1101000, и следующего за ним бита направления передачи (R/W), который для чтения равен 1
demanik Дата: Вт, 15.02.2011, 12:25  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Вот рабочая прога с протеусом:
Прикрепления: ds1307.rar (68.2 Kb)


Попробуй всё и вся... может быть пол...

ivan_fd Дата: Вт, 15.02.2011, 12:44  |                                                                                                                Сообщение # 11
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (demanik)

$D0 адрес для чтения
$D1 адрес для записи
читаем внимательно мануал.

Наверное я что то не понимаю, или как. У меня у 3 мануалах одно и тоже.

Володимир, создайте свой проект в протеусе, и увидите работает или нет.

Прикрепления: 7819658.gif (12.5 Kb) · 2549421.gif (13.5 Kb)
ЯНДЕКС Дата: 15.02.2011
Володимир Дата: Пн, 05.11.2012, 17:08  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

Quote (demanik)
Вот рабочая прога с протеусом:
Да, мистика, в даташите одно а тут наоборот, может чтобы дс1307 начал видавать время в него нужно запысать именно по адресу $D1? Короче попробую отпишусь.
Quote (demanik)
пикбасикпро сам ставит единицу в младший разряд при отправке в шину I2C и 0 при приеме с шины
Вот код с asm-файла с предыдущей схемы на пик16ф876а там и заапись и чтение происходило по $d0 и все работало, разве что подмена происходила на этапе компиляции в хексфайл, прога была написана на пикбейсикпро.

LABEL?L _read_time
I2CDATA?T _I2C_SDA
I2CCLOCK?T _I2C_SCL
I2CWRITE?C 0D0h
I2CWRITE?C 000h
I2CREAD?B _sec
I2CR EAD?B _mins
I2CREAD?B _hr
I2CREAD?B _day
I2CREAD?B _date
I2CREAD?B _mon
I2CREADS?B _yr

LABEL?L _write_time
I2CDATA?T _I2C _SDA
I2CCLOCK?T _I2C_SCL
I2CWRITE?C 0D0h
I2CWRITE?C 000h
I2CWRITE?B _sec
I2CWRITE?B _mins
I2CWRITE?B _hr
I2CWRITE?B _day
I2C WRITE?B _date
I2CWRITE?B _mon
I2CWRITE?B _yr
I2CWRITES?C 010h
RETURN?

Добавлено (15.02.2011, 13.04.55)
---------------------------------------------
Quote (ivan_fd)
Володимир, создайте свой проект в протеусе, и увидите работает или нет.
Попробую, незнаю получится у меня, а то я сним пока не работал.

Есче один вопрос, я исполюзую кварц на 16мГц, как правильно декларировать Declare Slow_Bus On - Off, я имею ввиду что должно быть 1 или 0?

Добавлено (15.02.2011, 15.44.49)
---------------------------------------------
Также хочу добавить что пробовал этот проект в протеусе, и там нет разницы какой одрес ставить, работает и так и так.

Добавлено (16.02.2011, 09.57.04)
---------------------------------------------
Quote (demanik)
$D0 адрес для чтения
$D1 адрес для записи
читаем внимательно мануал.
Пробовал сегодня и так, всеравно не читает.

Добавлено (17.02.2011, 18.41.18)
---------------------------------------------
Перекинул выводы SDA SCL ds1307 на порт 7 МК на соотверствующие выводы SDA SCL, заработало, на других выводах никак не заставил работать.

Добавлено (05.11.2012, 17:08)
---------------------------------------------
Подскажите, а можно при записи в ДС1307 писать не все данные а тольно последний байт конфигуриции?

BusOut $D0, 0, [sec,mins,hr,day,date,mon,yr,%00010000]

Сообщение отредактировал Володимир - Пн, 05.11.2012, 17:09
ivan_fd Дата: Пн, 05.11.2012, 17:51  |                                                                                                                Сообщение # 13
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Quote (Володимир)
Подскажите, а можно при записи в ДС1307 писать не все данные а тольно последний байт конфигуриции?


Можно, пишите адрес регистра конфигурации.

BusOut $D0, $07,[%00010000]
Володимир Дата: Вт, 04.11.2014, 13:53  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 69
Репутация: 3   ±
Замечания:   ±
На сайте с 22.04.2010

Статус: Offline

А можно проводить операции над битами, например при кождой подаче питания на контролер принудительно посилать ноль на бит CH.
MiXaS Дата: Вт, 04.11.2014, 13:59  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 549
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

можно
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: