|
Часы DS1305 и HT1380., Отвечают тихим шёпотом |
|
|
|
Apr 18 2006, 06:55
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Собрал, подключил. данные не идут. осциллографом вижу что они работают (картинка на I/O выводе каждую секунду меняется, битики видны, генераторы тоже работают), но уровень сигнала в восемь раз меньше необходимого. Думаю AVR-ка именно поэтому их не видит. Игрался портами, пинами, особого разнообразия нет, не помогает. Читаю секунды с DS так:
void WriteByte_DS130x(unsigned char Byte); unsigned char ReadByte_DS130x(void); unsigned char GetSec_DS130x(void) { unsigned char Sec; PORT_DS130x_CE = 1; WriteByte_DS130x(0x00); Sec = ReadByte_DS130x(); PORT_DS130x_CE = 0; return Sec; } void WriteByte_DS130x(unsigned char Byte) { unsigned char i; DDR_DS130x_IO = 1; for (i = 0; i < 8; i++) { PORT_DS130x_IO = Byte & 0x1; PORT_DS130x_SCLK = 1; PORT_DS130x_SCLK = 0; Byte >>= 1; } }
unsigned char ReadByte_DS130x(void) { unsigned char i,Byte,TMP; DDR_DS130x_IO = 0; PORT_DS130x_IO = 1; for (i = 0; i < 8; i++) { PORT_DS130x_SCLK = 1; TMP |= PIN_DS130x_IO; PORT_DS130x_SCLK = 0; Byte |= (TMP << 7); Byte >>= 1; } return Byte; }
PORT_DS130x_IO, DDR_DS130x_IO … соответствующие порты AVR. Пишу на IAR. При чтении байта ставил и PORT_DS130x_IO = 1; и PORT_DS130x_IO = 0; Пробовал ставить задержки при установки клоков. Результат не меняется.
Что это может быть?
|
|
|
|
|
 |
Ответов
(1 - 10)
|
Apr 18 2006, 07:17
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Nemo2000 @ Apr 18 2006, 11:08)  схемку бы посмотреть... Из даташита, на первой странице Vbat = 3-4.5В
Прикрепленные файлы
DS1305.bmp ( 46.86 килобайт )
Кол-во скачиваний: 57
|
|
|
|
|
Apr 18 2006, 09:57
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(Nemo2000 @ Apr 18 2006, 12:07)  при записи PORT_DS130x_IO при чтении PIN_DS130x_IO так должно и быть? Конечно. При записи в дивайс (DDR = 1) пишем в порт, при чтении из дивайса (DDR = 0) читаем с пина.
|
|
|
|
|
Apr 18 2006, 13:07
|

Иногдящий
   
Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931

|
Вообще в АВР для работы с портом используются три имени - DDR, PORT и PIN. DDR - для установки направления (ввод/вывод), PORT для вывода, PIN для ввода. Скажем, для вывода на ноги порта С надо писать Код DDRC = 0xFF; PORTC = 0x12; а для чтения состояния ног: Код DDRC = 0x00; char i = PINC; Аналогично можно работать с каждым битом порта отдельно: Код DDRC_Bit4 = 1; PORTC_Bit4 = 1; По самой проблеме ничего сказать не могу, не сталкивался с таким поведением... На Vccif точно подается 5 вольт? И в 8 раз меньше - это сколько по значению?
|
|
|
|
|
Apr 19 2006, 13:33
|
Знающий
   
Группа: Свой
Сообщений: 922
Регистрация: 3-06-05
Из: Москва
Пользователь №: 5 709

|
Цитата(AndyBig @ Apr 18 2006, 17:07)  По самой проблеме ничего сказать не могу, не сталкивался с таким поведением... На Vccif точно подается 5 вольт? И в 8 раз меньше - это сколько по значению? На Vccif как по приведённой схеме 5В точно. И в 8 раз меньше это по делениям осциллографа относительно уровня запроса от AVR. Сдаётся мне, что это не аппаратная проблема т.к. и DS и HT работают одинаково «тихо», а подключение их разное, у HT только один источник питания и ошибиться там не возможно, по моему.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|