Easyelectronics.ru

Электроника для всех
Текущее время: 19 окт 2019, 00:54

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: STM32F103C8T6 + DS1302
СообщениеДобавлено: 02 апр 2018, 00:42 
Здравствуйте!

Зарегистрирован: 01 апр 2018, 23:59
Сообщения: 4
Здравствуйте господа. Имею честь играться с китайским DS1302. Не хочет работать и всё.

Код:
BYTE      DS1302_Read_Byte(BYTE Addr)
{
   uint8_t iCount;
   BYTE   Result=0;
   Delay_1ns();
   Set_PIN(Bit_SET, Wire_RST);
   Delay_1ns();
   for(iCount=0; iCount <7; iCount++)
   {
      Set_PIN((Addr & 1) ? Bit_SET : Bit_RESET, Wire_DATA);
      Set_PIN(Bit_SET, Wire_CLK);
      Delay_1ns();
      Set_PIN(Bit_RESET, Wire_CLK|Wire_DATA);
      Delay_1ns();
      Addr >>=1;
   };
   Set_PIN((Addr & 1) ? Bit_SET : Bit_RESET, Wire_DATA);
   Set_PIN(Bit_SET, Wire_CLK);
   Delay_1ns();
   Set_PIN(Bit_RESET, Wire_DATA);
   Delay_1ns();
// Не обязательно
   SPEAKER_PORT->CRH &= ~(0x00000F00);
   SPEAKER_PORT->CRH |= (0x00000400);
   for(iCount=0; iCount <8; iCount++)
   {
      Result >>=1;
      Delay_1ns();
// По новому CLK
      GPIOB->ODR ^= Wire_CLK;
      Delay_1ns();
// Старому CLK
//Set_PIN(Bit_SET, Wire_CLK);
      if (GPIOB->IDR & PIN_DATA)
         Result |= 0x80;
      Set_PIN(Bit_RESET, Wire_CLK);
      Delay_1ns();
           Delay_1ns();
   };
//     Не обязательно, но я по пробовал еще так
   SPEAKER_PORT->CRH &= ~(0x00000F00);
   SPEAKER_PORT->CRH |= (0x00000300);
   //Wire_RST|
   Set_PIN(Bit_RESET, Wire_CLK|Wire_DATA);
   return Result;
};
// Где
void Set_PIN(BitAction Bit, Wire Register)
{
   if (Bit == Bit_RESET)
   {
      PB_RST = Register;
   } else
   {
      PB_SET = Register;
   }
};

void Delay_1ns()
{
   uint16_t Cnt;
   for(Cnt = 0; Cnt<=0x0A; Cnt++);
}

#ifndef BYTE
#define BYTE unsigned char
#endif

#define          PB_RST      GPIOB->BRR
#define            PB_SET      GPIOB->BSRR
#define          PIN_DATA   GPIO_Pin_10

typedef enum
{ Wire_RST    = GPIO_Pin_1,
  Wire_DATA   = GPIO_Pin_10,
  Wire_CLK   = GPIO_Pin_11
}Wire;


Так как имею логический анализатор хочу показать скрины, того что имею по факту.
Подключал так:
B1=RST
B10=DAT
B11=CLK

И в цикле while(1)
Код:
DS1302_Read_Byte(0xC1);

В процедуре чтения пробую считать 0xC0
Код:
DS1302_Write_Byte(0x8E, 0x80); // Убрать бит WP
DS1302_Write_Byte(0xC0, 0b01101100); // Записать число


Скрины с анализатора находятся ниже.
1. При постоянном запросе выдает разные значения.
2. Вывод с датчика постоянно длительностю 0.125 мксек. Насколько я понимаю вывод синхронизируется по спаду CLK, а я получаю какую-то ересь. Но если не переводить порт на ввод то импульсов с датчика не видно. Вроде так.
Может еще кто-то имел подобные проблемы. Может кто-то поборол. Мыслей нет, скажите что он плохой)), и я зря с ним теряю время. Заранее спасибо.


Вложения:
Комментарий к файлу: Что интересно длительность импульса 1/8 мкс. Задержку пробовал менять все тоже.
2.JPG
2.JPG [ 70.21 Кб | Просмотров: 1261 ]
Комментарий к файлу: Как видно датчик живет своей жизнью. Но выводит разые значения.
1.JPG
1.JPG [ 30.79 Кб | Просмотров: 1261 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F103C8T6 + DS1302
СообщениеДобавлено: 02 апр 2018, 00:49 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 1016
Круто, Delay_1ns() в проектах для STM32 я еще не видел, хотя при условии, что в релизе оптимизатор эту паузу выкинет, получится даже не так далеко от истины :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F103C8T6 + DS1302
СообщениеДобавлено: 02 апр 2018, 00:55 
Здравствуйте!

Зарегистрирован: 01 апр 2018, 23:59
Сообщения: 4
Давайте не будем критичны к задержке. Она для отладки. Я думал что частота слишком быстрая для датчика и ввел задержку. Когда ее длительность менять ничего не меняется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F103C8T6 + DS1302
СообщениеДобавлено: 04 апр 2018, 14:46 
Старожил

Зарегистрирован: 19 апр 2016, 11:59
Сообщения: 444
В STM32F103C8T6 есть встроенные часы, зачем понадобились внешние?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32F103C8T6 + DS1302
СообщениеДобавлено: 06 апр 2018, 22:54 
Здравствуйте!

Зарегистрирован: 01 апр 2018, 23:59
Сообщения: 4
Тут сыграл интерес подключения датчика. Может кто-то подскажет, можно ли попробовать по играться с резисторами. Какие номиналы или другие варианты. Уважаемая интеллигенция оно заработало. Не знаю как, чудо. Ничего не менял по схеме. Правда поигрался с задержками.
Может кому то нужно будет:
Я смог считать при длительности синхроимпульсов
("1" = 0.75 мкс, "0"=1.875 мкс). Камень работает на 72 МГц.
Я что то думаю, что я имел проблемы с питанием или может какие то наводки. Не могу объяснить. Всем добра, спасибо за помощь. Тему можно закрывать.


Вложения:
Комментарий к файлу: Тоже работает. Убрал задержку. Импульсы не успевают сбрасываться.
w.JPG
w.JPG [ 28.15 Кб | Просмотров: 1039 ]
Комментарий к файлу: Работает. Большая задержка. Видно как импульсы устанавливаются в "0". Проще их считать.
e.JPG
e.JPG [ 28.63 Кб | Просмотров: 1039 ]
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB