Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Часы DS1305 и HT1380.
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Цифровые схемы, высокоскоростные ЦС
Oleg_IT
Собрал, подключил. данные не идут. осциллографом вижу что они работают (картинка на 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; Пробовал ставить задержки при установки клоков. Результат не меняется.

Что это может быть?
Nemo2000
схемку бы посмотреть...
Oleg_IT
Цитата(Nemo2000 @ Apr 18 2006, 11:08) *
схемку бы посмотреть...


Из даташита, на первой странице
Vbat = 3-4.5В
Nemo2000
при записи PORT_DS130x_IO
при чтении PIN_DS130x_IO
так должно и быть?
Oleg_IT
Цитата(Nemo2000 @ Apr 18 2006, 12:07) *
при записи PORT_DS130x_IO
при чтении PIN_DS130x_IO
так должно и быть?


Конечно.
При записи в дивайс (DDR = 1) пишем в порт, при чтении из дивайса (DDR = 0) читаем с пина.
Nemo2000
Поскольку с AVR я не работал, уточню, порт - это 8 бит(пинов) или под этим подразумевается один пин?
PIN_DS130x_IO это часть порта PORT_DS130x_IO?
В общем это все к тому, что при изменении направления запись/чтение не получается ли так, что у Вас становятся входами и
PORT_DS130x_SCLK, PORT_DS130x_CE?
AndyBig
Вообще в АВР для работы с портом используются три имени - DDR, PORT и PIN. DDR - для установки направления (ввод/вывод), PORT для вывода, PIN для ввода. Скажем, для вывода на ноги порта С надо писать
Код
DDRC = 0xFF;
PORTC = 0x12;

а для чтения состояния ног:
Код
DDRC = 0x00;
char i = PINC;

Аналогично можно работать с каждым битом порта отдельно:
Код
DDRC_Bit4 = 1;
PORTC_Bit4 = 1;


По самой проблеме ничего сказать не могу, не сталкивался с таким поведением... На Vccif точно подается 5 вольт? И в 8 раз меньше - это сколько по значению?
Oleg_IT
Цитата(AndyBig @ Apr 18 2006, 17:07) *
По самой проблеме ничего сказать не могу, не сталкивался с таким поведением... На Vccif точно подается 5 вольт? И в 8 раз меньше - это сколько по значению?


На Vccif как по приведённой схеме 5В точно.
И в 8 раз меньше это по делениям осциллографа относительно уровня запроса от AVR.
Сдаётся мне, что это не аппаратная проблема т.к. и DS и HT работают одинаково «тихо», а подключение их разное, у HT только один источник питания и ошибиться там не возможно, по моему.
AndyBig
Программно, насколько я в курсе, уровень сигналов ни в HT, ни в DS никак ограничить нельзя - не предусмотрено такого. Что еще напрашивается - AVR держит на этих выводах низкий уровень (не переключает их в режим входов). Попробуйте в линии связи между AVR и часами поставить резистро 500-800 Ом и посмотрите после этого уровень сигнала со стороны часов и со стороны AVR.
Oleg_IT
А кода работаю на вход (DDR = 0) подтягивать к плюсу нужно (PORT = 1)? Или там, внутри всё реализовано?
Пробовал при чтении (DDR = 0) PORT = 1, читает 0xFF, PORT = 0, читает 0x00. Получается читает то что записано в PORT.
С резистором попробую.
arttab
попробуйте внешние резисторы подтяжки 5к-10к. с подключеной мк и без. очень похоже на отсутствие подтяжки.
или я не понял или Вы неправильно читаете состояния нв входе. читать надо PIN
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.