пытаюсь прикрутить ds1302 к МК.Да что-то непонятных вещей полно. одна из них тайминги. В даташите большинство из них в наносекундах, так в студии задержки в наносекундах нет. ну и быть наверное не может у меня кварц 8 Мгц отсюда 1 такт длится 125 нс... что делают обычно с этим? вообще без задержки работать? Спасибо
DS 1302
Приветствую!!!
пытаюсь прикрутить ds1302 к МК.Да что-то непонятных вещей полно. одна из них тайминги. В даташите большинство из них в наносекундах, так в студии задержки в наносекундах нет. ну и быть наверное не может у меня кварц 8 Мгц отсюда 1 такт длится 125 нс... что делают обычно с этим? вообще без задержки работать? Спасибо
пытаюсь прикрутить ds1302 к МК.Да что-то непонятных вещей полно. одна из них тайминги. В даташите большинство из них в наносекундах, так в студии задержки в наносекундах нет. ну и быть наверное не может у меня кварц 8 Мгц отсюда 1 такт длится 125 нс... что делают обычно с этим? вообще без задержки работать? Спасибо
- Реклама
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3134171#p3134171"]одна из них тайминги. В даташите большинство из них в наносекундах[/uquote]В даташите указаны минимальное и/или максимальное время.
Соответственно, нужно обеспечить все временные диаграммы в этом диапазоне.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3134171#p3134171"]в студии задержки в наносекундах нет[/uquote]Цикл ожидания пишется в пару строчек. Значения вычисляются по ассемблерным командам или подгоняются с помощью осциллографа.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3134171#p3134171"]что делают обычно с этим?[/uquote]Зависит от ожидаемого результата.
Если хочется, чтобы всё работало - стоит соблюдать даташит.
Соответственно, нужно обеспечить все временные диаграммы в этом диапазоне.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3134171#p3134171"]в студии задержки в наносекундах нет[/uquote]Цикл ожидания пишется в пару строчек. Значения вычисляются по ассемблерным командам или подгоняются с помощью осциллографа.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3134171#p3134171"]что делают обычно с этим?[/uquote]Зависит от ожидаемого результата.
Если хочется, чтобы всё работало - стоит соблюдать даташит.
В шите такие параметры как 50,60,70 нс. время 1 цикла МКна частоте 8 Мгц 125 нс...какими ассемблерными командами мне заставить МК работать быстрее?или я что-то не правильно понимаю?Цикл ожидания пишется в пару строчек. Значения вычисляются по ассемблерным командам или подгоняются с помощью осциллографа.
Да, неправильно.
Например, время предустановки линии I/O относительно активного фронта SCLK должно быть не менее 50ns при напряжении питания 5V (200ns при 2V), а на максимальное время оной никаких ограничений не накладывается. Или, момент начала обмена должен быть задержан относительно фронта CE не менее чем на 1us (4us при 2V). Всё остальное по аналогии.
Например, время предустановки линии I/O относительно активного фронта SCLK должно быть не менее 50ns при напряжении питания 5V (200ns при 2V), а на максимальное время оной никаких ограничений не накладывается. Или, момент начала обмена должен быть задержан относительно фронта CE не менее чем на 1us (4us при 2V). Всё остальное по аналогии.
В ДШ на стр.11 есть параметр, на который надо ориентироваться: CLK Frequency, максимальное значение которой равно 2 МГц при питании от 5 В и 0.5 МГц при питании от 2 В. Соответственно меньше может быть, больше - нет.
2 МГц равно периоду 0.5 мкс, значит половина периода (состояние 0 или 1) максимально может быть 250 нс. Но если будете "дергать" такты каждую микросекунду (0.5 МГц), 1302 также возражать не будет.
2 МГц равно периоду 0.5 мкс, значит половина периода (состояние 0 или 1) максимально может быть 250 нс. Но если будете "дергать" такты каждую микросекунду (0.5 МГц), 1302 также возражать не будет.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Реклама
Три раза перевел Даташит в переводчике google. никак не могу прикрутить ds1302 к МК. Взял новый модуль 1302 с кварцем и батарейкой. подключил к МК. напсиал функции записи и чтения. Отправляю ему байт команды 0b10000001 на чтение. и смотрю по осциллографу че мне он пишет...так он выдает корявенькие импульсы синхронные с CSLK напряжением 2 В. Никак не могу допедрить что да как с ним общаться.Подскажите пожалуйста что я делаю не так. 
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135243#p3135243"]что я делаю не так.
[/uquote]Гм, вот знаешь - все штатные телепаты сейчас в отпуске, лето же.
Может быть покажешь, что ты делаешь? Например, схему подключения и код работы с DS...
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135243#p3135243"]выдает корявенькие импульсы синхронные с CSLK напряжением 2 В.[/uquote]Есть подозрение, что у тебя выход на выход замкнуты.
Ногу МК, по которой передаёшь что-то наружу, на вход-то переводишь до момента начала приема?
Может быть покажешь, что ты делаешь? Например, схему подключения и код работы с DS...
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135243#p3135243"]выдает корявенькие импульсы синхронные с CSLK напряжением 2 В.[/uquote]Есть подозрение, что у тебя выход на выход замкнуты.
Ногу МК, по которой передаёшь что-то наружу, на вход-то переводишь до момента начала приема?
Вот что написано
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define DDR_ds1302 DDRC
#define PORT_ds1302 PORTC
#define PIN_ds1302 PINC
#define CE_ds1302 2
#define SCLK_ds1302 4
#define IO_ds1302 3
void ds1302_write(unsigned char cmd)
{
DDR_ds1302 |= (1<<CE_ds1302) | (1<<SCLK_ds1302);
PORT_ds1302 |= (1<<CE_ds1302);//E=1
_delay_us(1);
DDR_ds1302 |= (1<<IO_ds1302);//выход
for(char i=0; i<8; i++)
{
if((cmd&(1<<i)) == 1<<i)
{
PORT_ds1302 |= (1<<IO_ds1302);
}
else
{
PORT_ds1302&= ~(1<<IO_ds1302);
}
PORT_ds1302 |= (1<<SCLK_ds1302);
_delay_us(1);
PORT_ds1302 &= ~(1<<IO_ds1302);
PORT_ds1302 &= ~(1<<SCLK_ds1302);
}
}
//вызываем после записи байта данных в часы
void ds1302_end_write_data()
{
PORT_ds1302 &= ~(1<<CE_ds1302);
}
char ds1302_read()
{
char readbyte;
char i;
char readbyte=0;
DDR_ds1302 &= ~(1<<IO_ds1302);
for(int i=0;i<8;i++)
{
PORT_ds1302 |= 1<<SCLK_ds1302;
if((PIN_ds1302 & (1<<IO_ds1302))==0)
{
readbyte &= ~(1<<i);
}
else
{
readbyte |= 1<<i;
}
_delay_us(1);
PORT_ds1302 &= ~(1<<SCLK_ds1302);
_delay_us(1);
}
PORT_ds1302 &= ~(1<<CE_ds1302);
_delay_us(1);
return 0;
}
int main(void)
{
DDR_ds1302|=((1<<CE_ds1302)|(1<<IO_ds1302)|(1<<SCLK_ds1302));
PORT_ds1302&=~((1<<CE_ds1302)|(1<<IO_ds1302)|(1<<SCLK_ds1302));
DDRC=0xFF;
PORTC=0x00;
ds1302_write(0x81);
DDR_ds1302 &= ~(1<<IO_ds1302);
for(int x=0;x<8:x++)
{
PORT_ds1302 |= 1<<SCLK_ds1302;
_delay_us(1);
PORT_ds1302&=~(1<<SCLK_ds1302);
_delay_us(1);
}
}
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define DDR_ds1302 DDRC
#define PORT_ds1302 PORTC
#define PIN_ds1302 PINC
#define CE_ds1302 2
#define SCLK_ds1302 4
#define IO_ds1302 3
void ds1302_write(unsigned char cmd)
{
DDR_ds1302 |= (1<<CE_ds1302) | (1<<SCLK_ds1302);
PORT_ds1302 |= (1<<CE_ds1302);//E=1
_delay_us(1);
DDR_ds1302 |= (1<<IO_ds1302);//выход
for(char i=0; i<8; i++)
{
if((cmd&(1<<i)) == 1<<i)
{
PORT_ds1302 |= (1<<IO_ds1302);
}
else
{
PORT_ds1302&= ~(1<<IO_ds1302);
}
PORT_ds1302 |= (1<<SCLK_ds1302);
_delay_us(1);
PORT_ds1302 &= ~(1<<IO_ds1302);
PORT_ds1302 &= ~(1<<SCLK_ds1302);
}
}
//вызываем после записи байта данных в часы
void ds1302_end_write_data()
{
PORT_ds1302 &= ~(1<<CE_ds1302);
}
char ds1302_read()
{
char readbyte;
char i;
char readbyte=0;
DDR_ds1302 &= ~(1<<IO_ds1302);
for(int i=0;i<8;i++)
{
PORT_ds1302 |= 1<<SCLK_ds1302;
if((PIN_ds1302 & (1<<IO_ds1302))==0)
{
readbyte &= ~(1<<i);
}
else
{
readbyte |= 1<<i;
}
_delay_us(1);
PORT_ds1302 &= ~(1<<SCLK_ds1302);
_delay_us(1);
}
PORT_ds1302 &= ~(1<<CE_ds1302);
_delay_us(1);
return 0;
}
int main(void)
{
DDR_ds1302|=((1<<CE_ds1302)|(1<<IO_ds1302)|(1<<SCLK_ds1302));
PORT_ds1302&=~((1<<CE_ds1302)|(1<<IO_ds1302)|(1<<SCLK_ds1302));
DDRC=0xFF;
PORTC=0x00;
ds1302_write(0x81);
DDR_ds1302 &= ~(1<<IO_ds1302);
for(int x=0;x<8:x++)
{
PORT_ds1302 |= 1<<SCLK_ds1302;
_delay_us(1);
PORT_ds1302&=~(1<<SCLK_ds1302);
_delay_us(1);
}
}
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135270#p3135270"]Вот что написано[/uquote]Код, конечно, жуткий. Я за такой код расстреливал бы. И тебя даже не оправдывает то, что код не твой.
Вроде, должно работать, хоть и такое.
Реальную схему подключения покажи.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135243#p3135243"]Отправляю ему байт команды 0b10000001 на чтение. и смотрю по осциллографу че мне он пишет...[/uquote]Вначале проверь, что в часы пишешь - насколько диаграмма передачи соответствует таковой из даташита.
Надо порыть даташит - вывод I/O с открытым коллектором или же полноценный? В том плане, что нужна ли ему подтяжка в "1".
Вроде, должно работать, хоть и такое.
Реальную схему подключения покажи.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135243#p3135243"]Отправляю ему байт команды 0b10000001 на чтение. и смотрю по осциллографу че мне он пишет...[/uquote]Вначале проверь, что в часы пишешь - насколько диаграмма передачи соответствует таковой из даташита.
Надо порыть даташит - вывод I/O с открытым коллектором или же полноценный? В том плане, что нужна ли ему подтяжка в "1".
По поводу этого я скажу,что он частично не мой. Нужно же мне как- то найти проблему.Методом исключения решил проверить рабочий код(хотя я не проверял на работоспособность его), может я сам пишу не правильно.И тебя даже не оправдывает то, что код не твой
Добавлено after 25 minutes 5 seconds:
Начнем сначала: вот мой код:Вначале проверь, что в часы пишешь - насколько диаграмма передачи соответствует таковой из даташита.
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#define DDR_ds1302 DDRC
#define PORT_ds1302 PORTC
#define PIN_ds1302 PINC
#define CE 2
#define SCLK 3
#define DATA 4
void WRITE_ds1302(int comdata)
{
PORT_ds1302|=1<<CE;
DDR_ds1302|=1<<DATA; //на выход
for(char i=0;i<8;i++)
{
if((comdata&(1<<i)))
{
PORT_ds1302|=1<<DATA;
}
else
{
PORT_ds1302&=~(1<<DATA);
}
PORT_ds1302|=1<<SCLK;
PORT_ds1302&=~(1<<DATA);
PORT_ds1302&=~(1<<SCLK);
}
}
void see(void)
{
//PORT_ds1302|=1<<DATA;
for(char i=0;i<8;i++)
{
PORT_ds1302|=1<<SCLK;
_delay_us(1);
PORT_ds1302&=~(1<<SCLK);
_delay_us(1);
}
}
int main(void)
{
DDR_ds1302=0xFF;
PORT_ds1302&=~0xFF;
WRITE_ds1302(0x83);
DDR_ds1302&=~(1<<DATA);
see();
PORT_ds1302&=~(1<<CE);
}
[img][img]http://img.radiokot.ru/files/112412/thumbnail/1b9x8qvtp9.jpg[/img][/img]
[img][img]http://img.radiokot.ru/files/112412/thumbnail/1b9x4cmrpm.jpg[/img][/img]
Можете пробовать.
Это писалось мной под 8051, соответственно переключений вход-выход у даты нет, поскольку порт имеет двунаправленный режим (quasi-bidirectional). Настройку портов и переключение даты добавите самостоятельно.
Заголовочный файл не даю, там ничего существенного нет.
Добавлено after 13 minutes 11 seconds:
Кстати, относительно изначального вопроса про скорость работы хочу заметить, что задержка в конце листинга имеет чисто формальное название. Сколько там было в реальности я не помню, а диаграмму с ЛА я выкладывал здесь.
Это писалось мной под 8051, соответственно переключений вход-выход у даты нет, поскольку порт имеет двунаправленный режим (quasi-bidirectional). Настройку портов и переключение даты добавите самостоятельно.
Заголовочный файл не даю, там ничего существенного нет.
Спойлер
Код: Выделить всё
// DS1302 RTC IC
#include "ds1302.h"
unsigned char readbyte (void)
{
unsigned char b, i = 8;
while (i)
{
b >>= 1;
DS_SCLK = 0;
_nop_();
if (DS_IO) b |= 0x80; // set bit
else b &= 0x7F; // clear bit
i--;
if (i) DS_SCLK = 1;
_nop_();
}
return b;
}
void writebyte (unsigned char b)
{
unsigned char i = 8;
while (i)
{
DS_SCLK = 0;
DS_IO = (b & 1);
DS_SCLK = 1;
b >>= 1;
i--;
}
}
unsigned char ds_readbyte(unsigned char addr)
{
// ds1302 single-byte read
unsigned char b;
DS_CE = 0;
DS_SCLK = 0;
DS_CE = 1;
delay1us();
writebyte(addr); // send command
b = readbyte(); // read byte
return b;
}
void ds_writebyte(unsigned char addr, unsigned char dta)
{
// ds1302 single-byte write
DS_CE = 0;
DS_SCLK = 0;
DS_CE = 1;
delay1us();
writebyte(addr); // send command
writebyte(dta); // send data
}
void ds_readburst(void)
{
// ds1302 burst-read 8 bytes into array
unsigned char i;
DS_CE = 0;
DS_SCLK = 0;
DS_CE = 1;
delay1us();
writebyte(0xBF); // send cmd byte
// Read on falling edge.
for (i=0; i < 9; i++) // Shift bytes
{
ds_rtc[i] = readbyte(); // read
if (i < 8) DS_SCLK = 1; // If not the last byte, otherwise DS_SCLK remains low.
}
DS_CE = 0;
DS_SCLK = 0;
DS_IO = 0;
}
void ds_writeburst(void)
{
// ds1302 burst-write 8 bytes into array
unsigned char b, i;
b = 0xBE;
DS_CE = 0;
DS_SCLK = 0;
DS_CE = 1;
delay1us();
writebyte(b); // send cmd byte
for (i = 0; i < 8; i++) // Shift bytes
{
writebyte(ds_rtc[i]); // write bytes
}
DS_CE = 0;
DS_SCLK = 0;
DS_IO = 0;
}
//++++++++++++++++++++
// Common functions
//++++++++++++++++++++
void ds_init()
{
unsigned char b;
// Ток заряда может изменяться от большего к меньшему значениями
// A5h, A6h, A7h, A9h, AAh, ABh, либо отключен записью нуля.
if (ds_readbyte(0x8F)) ds_writebyte(0x8E,0); // Clear Write Protection bit if it's set.
if (ds_readbyte(0x91)) ds_writebyte(0x90,0); // Trickle charger off.
b = ds_readbyte(0x81);
if (b & 0x80) ds_writebyte(0x80, (b & 0x7F)); // clear "Clock Halt" bit.
b = ds_readbyte(0x85);
if (b & 0x80) ds_writebyte(0x84, (b & 0x7F)); // Set 24 hour mode.
}
void ds_reset_clock() // reset date, time
{
ds_writebyte(0x80, 0x00); // Clock halt off
ds_writebyte(0x82, 0x00); // 00 minutes
ds_writebyte(0x84, 0x07); // 07 hours
ds_writebyte(0x86, 0x01); // 01
ds_writebyte(0x88, 0x01); // January
ds_writebyte(0x8A, 0x05); // Friday
ds_writebyte(0x8C, 0x16); // 2016
ds_writebyte(0x8E, 0x00); // Write protect off
ds_writebyte(0x90, 0x00); // Trickle charger off
}
void delay1us (void) //@11.0592MHz
{
_nop_();
}
Кстати, относительно изначального вопроса про скорость работы хочу заметить, что задержка в конце листинга имеет чисто формальное название. Сколько там было в реальности я не помню, а диаграмму с ЛА я выкладывал здесь.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Спасибо за код! но я боюсь меня точно расстреляют за этоМожете пробовать.
Снял диаграмму как у Вас, с подтяжкой формируются какие то импульсы вроде как...как можно проверить их достоверность? чет добавить файл с ЛА не могу
Последний раз редактировалось ROMan2947 Пт июн 30, 2017 12:46:42, всего редактировалось 1 раз.
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135743#p3135743"]Начнем сначала: вот мой код:[/uquote]Теперь смотрим на осциллограмму.
Хотелось бы увидеть полную картинку - от выдачи сигнала CE (который ты обозвал RST на схеме - так он назывался в старом даташите!
)
По твоему коду вообще нет установки сигнала CE - он как встал в "1", так и стоит там.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135743#p3135743"]PORT_ds1302|=1<<SCLK;
PORT_ds1302&=~(1<<DATA);
PORT_ds1302&=~(1<<SCLK);[/uquote]Поясни в чем глубокий смысл обнулять передаваемый бит сразу после нарастающего фронта CLK?
И сравни с примером функции передачи данных от Zhuk72.
По схеме, надеюсь: сигнал "земля" у часов, а также "земля", "питание" и кварц у AVR не показаны лишь на схеме?
Хотелось бы увидеть полную картинку - от выдачи сигнала CE (который ты обозвал RST на схеме - так он назывался в старом даташите!
По твоему коду вообще нет установки сигнала CE - он как встал в "1", так и стоит там.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135743#p3135743"]PORT_ds1302|=1<<SCLK;
PORT_ds1302&=~(1<<DATA);
PORT_ds1302&=~(1<<SCLK);[/uquote]Поясни в чем глубокий смысл обнулять передаваемый бит сразу после нарастающего фронта CLK?
И сравни с примером функции передачи данных от Zhuk72.
По схеме, надеюсь: сигнал "земля" у часов, а также "земля", "питание" и кварц у AVR не показаны лишь на схеме?
да,без них уж глупо чет ожидать)По схеме, надеюсь: сигнал "земля" у часов, а также "земля", "питание" и кварц у AVR не показаны лишь на схеме?
Добавлено after 5 minutes 23 seconds:
Смысл моего кода, указанного выше в том, чтоб отправить команду на часы и увидеть обратную связь. ничего более. остальное уже допишем как надо.Мне нужно видеть, что часы меня слышать и отвечают. согласно даташиту я выставляю СЕ в 1 и шлю командный байт, затем перевожу ножку DATA на вход и наблюдаю по диаграмме что да как....ну и в конце main я сбрасываю ее для приличия. это не правильно?По твоему коду вообще нет установки сигнала CE - он как встал в "1", так и стоит там.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135861#p3135861"]чет добавить файл с ЛА не могу[/uquote]
Правый верхний угол окна "Options - Save capture".
Правый верхний угол окна "Options - Save capture".
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
в даташите на диаграмме я вижу,что: после считывания бита данных по нарастающему фронту SCLK нужно сбросить в исходное положение затем снова выставить бит...это может и лишняя операция,но на работоспособность думаю не влияет...Поясни в чем глубокий смысл обнулять передаваемый бит сразу после нарастающего фронта CLK?
Добавлено after 1 minute 19 seconds:
я его сохранил, но на форум не идет пишет, чт о администраторы запретили добавлять файл подобного расширенияПравый верхний угол окна "Options - Save capture".
zip/rar, иначе никак.
Смотрю на свой код и не пойму за каким чертом я делал эти проверки последнего бита
Просто неохота опять в это возвращаться и сравнивать с ДШ.
Смотрю на свой код и не пойму за каким чертом я делал эти проверки последнего бита
Просто неохота опять в это возвращаться и сравнивать с ДШ.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135896#p3135896"]согласно даташиту я выставляю СЕ в 1 и шлю командный байт[/uquote]Сравни диаграмму из даташита и свою.
Там английским по белому сказано установить CE из "0" в "1" перед обменом и сбросить в "0" по окончанию. Т.е. между обменом держать в "0".
Покажи на своей осциллограмме переход CE из "0" и "1" и сброс в "0" по окончанию обмена?
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135913#p3135913"]в даташите на диаграмме я вижу,что: после считывания бита данных по нарастающему фронту SCLK нужно сбросить в исходное положение затем снова выставить бит...[/uquote]Ну-ка, ну-ка покажи где ты такое нашёл?
Я вижу, что на нарастающему фронту происходит запись бита в сдвиговый регистр. А все изменения значения бита происходят только при низком уровне CLK.
Мелкий совет: когда что-то не получается, то стоит сделать всё по даташиту с "точностью до секунды"(с).
Там английским по белому сказано установить CE из "0" в "1" перед обменом и сбросить в "0" по окончанию. Т.е. между обменом держать в "0".
Покажи на своей осциллограмме переход CE из "0" и "1" и сброс в "0" по окончанию обмена?
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135913#p3135913"]в даташите на диаграмме я вижу,что: после считывания бита данных по нарастающему фронту SCLK нужно сбросить в исходное положение затем снова выставить бит...[/uquote]Ну-ка, ну-ка покажи где ты такое нашёл?
Я вижу, что на нарастающему фронту происходит запись бита в сдвиговый регистр. А все изменения значения бита происходят только при низком уровне CLK.
Мелкий совет: когда что-то не получается, то стоит сделать всё по даташиту с "точностью до секунды"(с).
Добавлено after 3 minutes 1 second:zip/rar, иначе никак.
Покажи на своей осциллограмме переход CE из "0" и "1" и сброс в "0" по окончанию обмена?
Добавлено after 11 minutes 3 seconds:
в том то и дело что на английском)) кажется я въезжаю.мне нужно после комбайта СE 0 и снова все сначала да? тогла что за импульсы мне шлют часы?МУСОР?Там английским по белому сказано установить CE из "0" в "1" перед обменом и сбросить в "0" по окончанию. Т.е. между обменом держать в "0".
- Вложения
-
- пекпм 2 MHz, 6 M Samples [58].rar
- (699 байт) 304 скачивания
- Сообщения: 312
- Зарегистрирован: Вс июл 29, 2012 16:25:39
Вот сейчас видно - и передача "туда" и ответ "обратно".
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]в том то и дело что на английском))[/uquote]В этом деле увы - необходимо умение читать технический английский...
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]нужно после комбайта СE 0 и снова все сначала да?[/uquote]Да, на время обмена CE=1, после обмена CE=0. Причем, в таташите указаны ВСЕ времена: пауза после CE=1, после CE=0 и т.д. и т.п.
И эти времена необходимо выдерживать.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]тогла что за импульсы мне шлют часы?МУСОР?[/uquote]Сейчас я вижу, что часы тебе отвечают. И отвечают значением "минуты".
Теперь реши загадку, почему передача байта в часы у тебя с каждым тактом всё медленнее.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]в том то и дело что на английском))[/uquote]В этом деле увы - необходимо умение читать технический английский...
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]нужно после комбайта СE 0 и снова все сначала да?[/uquote]Да, на время обмена CE=1, после обмена CE=0. Причем, в таташите указаны ВСЕ времена: пауза после CE=1, после CE=0 и т.д. и т.п.
И эти времена необходимо выдерживать.
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3135941#p3135941"]тогла что за импульсы мне шлют часы?МУСОР?[/uquote]Сейчас я вижу, что часы тебе отвечают. И отвечают значением "минуты".
Теперь реши загадку, почему передача байта в часы у тебя с каждым тактом всё медленнее.


