реклама на сайте
подробности

 
 
> DS1338 + XMEGA
Pavel_Bor
сообщение Jul 6 2011, 12:14
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



В даташите на эти часики указаны 2 режима работы: Fast mode(400КГц), Standart mode(100КГц).
В меге инициализирован RC на 32Мгц.
Как между собой связать скорости. или какое время нужно давать при задержке.

При коде следующего вида никаких изменений не происходит..

CODE
void rtc_init()
{
RTC_DATA_DIR_SET;
RTC_DATA_SET;
RTC_SCL_UP;
delay_us(1);
}

void rtc_start()
{
RTC_DATA_CLR;
delay_us(1);
RTC_SCL_DOWN;
delay_us(1);
}

void rtc_stop()
{

RTC_SCL_UP;
delay_ms(1);
RTC_DATA_DIR_SET;
RTC_DATA_SET;
delay_ms(1);
}

void rtc_write (unsigned char buffer)
{
unsigned char MASK;
RTC_DATA_DIR_SET;
for(i=8;i>=0;--i)
{
if(buffer&&MASK )
RTC_DATA_SET;
else
RTC_DATA_CLR;
RTC_SCL_UP;
delay_ms(1);
RTC_SCL_DOWN;
delay_ms(1);
MASK>>1;
}

RTC_SCL_UP;
delay_ms(1);
RTC_SCL_DOWN;
delay_ms(1);
}

unsigned char read_rtc()
{
unsigned char buffer=0;

RTC_DATA_DIR_CLR;
for(i=8;i>=0;--i)
{
buffer|=((buffer<<1)||(PORTE.IN&PIN3_bm));
RTC_SCL_UP;
delay_ms(1);
RTC_SCL_DOWN;
delay_ms(1);
}
return buffer;
}

void RTC_ACKNOWLEGDGE_0()
{
RTC_DATA_DIR_SET;
RTC_DATA_SET;
delay_ms(1);
RTC_SCL_UP;
delay_ms(1);
RTC_SCL_DOWN;
delay_ms(1);
}

void RTC_ACKNOWLEGDGE_1()
{
RTC_DATA_DIR_SET;
RTC_DATA_CLR;
delay_ms(1);
RTC_SCL_UP;
delay_ms(1);
RTC_SCL_DOWN;
delay_ms(1);
}


Сообщение отредактировал IgorKossak - Jul 6 2011, 20:08
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение Jul 8 2011, 03:00
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата(Pavel_Bor @ Jul 7 2011, 16:21) *
а внешние подтягивающие резисторы в схеме нужны?


Подтягивающие резисторы обычно рекомендуют ставить.

У меня недавно был клюк. На линиях TWI, видать в целях экономии места на плате, не поставили подтяжку. При этом, при касании осциллографом любой из линий, процессор вылетал в неизвестно куда. Пришлось напаять резисторы и проблема исчезла. Нормально отлаженая программа также хорошо работала и без подтягивающих резисторов.
Но эта проблема была только на линиях аппаратного TWI. При программной реализации все работало и без подтяжек.

Сообщение отредактировал alexeyv - Jul 8 2011, 03:00
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Jul 8 2011, 07:23
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Я так понимаю время задержки между тактами значения не имеет. Главное чтобы оно было больше минимального.
Когда программа получает АСК, пока SCL в "1" ACK никуда не денется до тех пор пока SCL не станет "0"?

Есть шаг №2. Читаю с регистров 0. Пошли часы)

Не получается записать в регистры новые значения.
текущий программа для записи:
Код
void i2c_tx_soft(unsigned char byte)
{
  
  unsigned char count;
  RTC_DATA_DIR_SET;
  if(i2c_error_soft)
    return;
  for(count=0;count<8;count++)
    {
      if(byte&0x80)
        RTC_DATA_SET;
      else
        RTC_DATA_CLR;
      RTC_SCL_UP;
      delay_ms(5);
      RTC_SCL_DOWN;
      delay_ms(5);
      byte<<=1;
    }
  RTC_DATA_DIR_CLR;
  RTC_SCL_UP;
  delay_ms(5);
  while(in_sda());
  delay_ms(5);
  RTC_SCL_DOWN;
  delay_ms(5);
  RTC_DATA_DIR_SET;
}


Вызов ее вот отсюда
Код
void rtc_set_time(unsigned char hours, unsigned char minutes, unsigned char seconds)
{
  i2c_start_soft();
  i2c_tx_soft(DS1338_ADDR|WR);
  i2c_tx_soft(0);
  i2c_tx_soft(dec2bcd(seconds));
  i2c_tx_soft(dec2bcd(minutes));
  i2c_tx_soft(dec2bcd(hours));

  i2c_stop_soft();
}


void rtc_set_date(unsigned char date, unsigned char month, unsigned int year)
{
  i2c_start_soft();
  i2c_tx_soft(DS1338_ADDR|WR);
  i2c_tx_soft(3);
  i2c_tx_soft(dec2bcd(rtcTime.day));
  i2c_tx_soft(dec2bcd(date));
  i2c_tx_soft(dec2bcd(month));
  i2c_tx_soft(dec2bcd(year));
  i2c_stop_soft();
}


Сообщение отредактировал Pavel_Bor - Jul 8 2011, 12:11
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Pavel_Bor   DS1338 + XMEGA   Jul 6 2011, 12:14
- - alexeyv   Кодvoid rtc_write (unsigned char buffer) {...   Jul 7 2011, 04:55
|- - Pavel_Bor   ЦитатаЗначение с шины надо считывать ПОСЛЕ подачи ...   Jul 7 2011, 06:04
- - alexeyv   1. А это исправил? Цитата2. MASK>>1; - перем...   Jul 7 2011, 06:39
|- - Pavel_Bor   Цитата1. А это исправил? написал по другому if(bu...   Jul 7 2011, 07:18
- - alexeyv   1. А не забыл в rtc_init что-то типа RTC_SCL_DIR_S...   Jul 7 2011, 07:52
|- - Pavel_Bor   RTC_SCL_DIR_SET; в инициализации портов ЦитатаЭт...   Jul 7 2011, 08:11
- - alexeyv   Цитата"&"="*" "&...   Jul 7 2011, 08:36
|- - Pavel_Bor   ЦитатаВ первом листинге не было!!! я ...   Jul 7 2011, 08:51
- - alexeyv   Цитатая в листинг не включал. Так может ошибки в ...   Jul 7 2011, 09:01
|- - Pavel_Bor   Цитата(alexeyv @ Jul 7 2011, 12:01) Так м...   Jul 7 2011, 09:09
- - alexeyv   Поздравляю! Только 248=0xF8, а 0xFF=255.   Jul 7 2011, 09:17
|- - Pavel_Bor   Цитата(alexeyv @ Jul 7 2011, 12:17) Тольк...   Jul 7 2011, 09:29
- - alexeyv   В функции rtc_write после цикла выставления байта ...   Jul 7 2011, 10:23
|- - Pavel_Bor   Код bool RTC_ACKW() { RTC_DATA_DIR_CLR; ...   Jul 7 2011, 10:36
- - alexeyv   функцию контроля АСК проще сделать не отдельно, а ...   Jul 7 2011, 10:56
|- - Pavel_Bor   ЦитатаМаленький вопрос. Подтягивающие резисторы на...   Jul 7 2011, 11:04
- - alexeyv   ЦитатаНаправление порта должно быть входом иначе н...   Jul 7 2011, 11:09
|- - Pavel_Bor   Цитата(alexeyv @ Jul 7 2011, 14:09) В смы...   Jul 7 2011, 11:21
- - alexeyv   Цитатаwhile(in_sda()); Во время подачи клока, по ...   Jul 11 2011, 04:39
|- - Pavel_Bor   С часами уже все ок) Значение с внешнего RTC (DS13...   Jul 11 2011, 11:37
- - alexeyv   ЦитатаПрерываний будет много но со временем. (клав...   Jul 11 2011, 12:10
- - Pavel_Bor   Сделаем. Спасибо   Jul 11 2011, 13:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016