PIC18F2520 записывает данные в DS1307 но не читает
|
|
Володимир |
Дата: Пн, 14.02.2011, 11:01 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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
|
|
|
|
ivan_fd |
Дата: Пн, 14.02.2011, 14:11 | Сообщение # 2 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
А вы попробуйте в Протеусе просимулировать. Еще замечание, команда для чтения $D0, а для записи $D1.
|
|
|
|
Володимир |
Дата: Пн, 14.02.2011, 22:13 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
Quote (ivan_fd) Еще замечание, команда для чтения $D0, а для записи $D1. Может наоборот, запись идет, но не читает, а записываю я $D0. Хотя спасибо за совет, только что перечитал даташит, действительно по двум адресам, но как раньше работало на пик16ф876а по одному адресу, програма были скомпилирована на пыкбейсикпро.
|
|
|
|
ivan_fd |
Дата: Пн, 14.02.2011, 22:46 | Сообщение # 4 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Володимир) Может наоборо Да поспешил, Запись данных - D0. Чтение данных - D1.
|
|
|
|
Володимир |
Дата: Пн, 14.02.2011, 22:56 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Может подключить на штатные ноги (14,15) ноги шины I2C контроллера?
|
|
|
|
demanik |
Дата: Пн, 14.02.2011, 23:34 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (anatol) Может подключить на штатные ноги (14,15) ноги шины I2C контроллера? Работает на любых, лиш бы не аналоговые. $D0 адрес для чтения $D1 адрес для записи читаем внимательно мануал. Quote (Володимир) но как раньше работало на пик16ф876а по одному адресу, програма были скомпилирована на пыкбейсикпро. пикбасикпро сам ставит единицу в младший разряд при отправке в шину I2C и 0 при приеме с шины
Попробуй всё и вся... может быть пол...
|
|
|
|
Володимир |
Дата: Вт, 15.02.2011, 09:18 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Вот рабочая прога с протеусом:
Попробуй всё и вся... может быть пол...
|
|
|
|
ivan_fd |
Дата: Вт, 15.02.2011, 12:44 | Сообщение # 11 |
Группа:
Модераторы
Ранг:
Специалист
Сообщений:
894
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (demanik) $D0 адрес для чтения $D1 адрес для записи читаем внимательно мануал. Наверное я что то не понимаю, или как. У меня у 3 мануалах одно и тоже. Володимир, создайте свой проект в протеусе, и увидите работает или нет.
|
|
|
|
Володимир |
Дата: Пн, 05.11.2012, 17:08 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 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
Замечания:
±
На сайте с 12.01.2009
Статус:
Offline
|
Quote (Володимир) Подскажите, а можно при записи в ДС1307 писать не все данные а тольно последний байт конфигуриции?
Можно, пишите адрес регистра конфигурации.
BusOut $D0, $07,[%00010000]
|
|
|
|
Володимир |
Дата: Вт, 04.11.2014, 13:53 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
69
Замечания:
±
На сайте с 22.04.2010
Статус:
Offline
|
А можно проводить операции над битами, например при кождой подаче питания на контролер принудительно посилать ноль на бит CH.
|
|
|
|
MiXaS |
Дата: Вт, 04.11.2014, 13:59 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
можно
|
|
|
|