Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 25.11.2016, 23:10  
Nikolaysherbakov
Временная регистрация
 
Регистрация: 28.07.2011
Адрес: Петропавловск, Казахстан.
Сообщений: 61
Сказал спасибо: 10
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Nikolaysherbakov на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Сообщение от NewWriter Посмотреть сообщение
Может, стоит начать изучение с чего-то попроще? Поверьте, это эффективнее.
В МК есть как минимум два SPI. Настройте их так, чтобы один передавал другому хотябы пару любых байт. Это и будет первой решенной задачей. Задача бесполезная, зато решенная
NewWriter абсолютно прав - пробуйте с меньшего, получив результат - офигеете.
Реклама:
Nikolaysherbakov вне форума  
Непрочитано 29.11.2016, 18:47  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Я перечитал в очередной раз даташит на RFFC5071 и оказывается он не должен подключаться через SPI к СТМ. Я так понял, что необходимо самостоятельно писать интерфейс, в соответствии с временной диаграммой считывания и записи данных!
Я написал такой код для СТМ32Ф103С8:
Нажмите, чтобы открыть спойлер
//usart2_rx-PA3, usart2_tx-PA2
//spi1_mosi-pa7,spi1_miso-pa6,spi1_sck-pa5,spi1_nss-pa4

#include "stm32f10x.h"

uint32_t i;
uint8_t temp, temp1;

void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}

void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹1;i++);
return;
}

void imp_inv()
{
zero();
one();
return;
}

void imp_norm()
{
one();
zero();
return;
}

int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;

GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;

GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;

GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;

GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;

GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;



//
GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1


while (1)
{

GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;


//write addr 0x15, data=0x8000
one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

//write addr 0x15
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();

//write addr data=0x8000
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);
//write addr 0x15 and read flag, read dATA

one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

//write addr 0x15 with r=1
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();

GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0

GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();

//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}
}


По осциллографу тактовые импульсы, импульсы данных на передачу верные. Но импульса принимаемых данных НЕТ!!! Как я понял, я должен принимать 0х8000.
Может кто подскажет что не так!!!!
Спасибо!
Дмитрий1987 вне форума  
Непрочитано 29.11.2016, 20:14  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Дмитрий1987, тебе или лечиться надо или начинать изучать основы. Ты даже документацию осознать не можешь.
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 30.11.2016, 06:32  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Dosikus, я так понимаю вы профессиональный программист и, когда вы первый раз читаете даташит на микросхему, вы сразу все понимаете, тут же пишете программу, и у вас микросхема с первого раза работает правильно! И опыт в разработке программ у вас просто немыслимый!
Я же пока еще где-то на дне и, прочитав даташит даже раз 10, не получается все осознать, и на разработку простейших программок у меня уходит пока недели две!
Вот я и обратился на этот форум, чтоб такие же профессионалы как вы посмотрели на мой донный код и сказали, что, если его модернизировать так-то, так-то, то сразу все заработает!
Дмитрий1987 вне форума  
Непрочитано 30.11.2016, 11:22  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Я код подправил, лучше подпаяли выводы RFFC5071 и все заработало! Я начал получать данные и с регистра 0х15, и с регистра 0х00!

Кому интересно, вот рабочий код по считыванию данных с RFFC5071 на СТМ32Ф103С8!

Нажмите, чтобы открыть спойлер
#include "stm32f10x.h"

uint32_t i;
uint8_t temp, temp1;

void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}

void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹1;i++);
return;
}

void imp_inv()
{
zero();
one();
return;
}

void imp_norm()
{
one();
zero();
return;
}

//write addr 0x15, data=0x8000
void WR15_8000()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;

one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

//write addr 0x15
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();

//write addr data=0x8000
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);
}

//write addr 0x15 and read flag, read dATA
void RD15()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;

one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

//write addr 0x15 with r=1
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();

GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0

GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();

//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}

//write addr 0x00 and read flag, read dATA
void RD00()
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;

one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();
imp_inv();

GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0

GPIOA-›CRL&=~GPIO_CRL_MODE7;//sdata,inp
GPIOA-›CRL&=~GPIO_CRL_CNF7;//
GPIOA-›CRL|=GPIO_CRL_CNF7_0;//pp
imp_norm();

//read data
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();
imp_norm();

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_norm();
for (i=0;i‹10;i++);
}

int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;

GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;

GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;

GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;

GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;

GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;



//initialize
GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1


WR15_8000();

while (1)
{

//RD15();
RD00();

}
}
Дмитрий1987 вне форума  
Непрочитано 30.11.2016, 11:30  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Дмитрий1987, Вы мой пост читали ? https://kazus.ru/forums/showpost.php...92&postcount=9
Там все что вам нужно.
А ваш софтовый ногодрыг никому не нужен...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 01.12.2016, 14:50  
Дмитрий1987
Временная регистрация
 
Регистрация: 10.11.2016
Сообщений: 65
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Дмитрий1987 на пути к лучшему
По умолчанию Re: Не могу считать данные с RFFC5071!!!

Вот рабочий код по конфигурированию регистров RFFC5071!

Нажмите, чтобы открыть спойлер
//resetx-pa2, enbl-pa1,sdata-pa7, sck-pa5, enx-pa4


#include "stm32f10x.h"

uint32_t i, j,temp2,temp3;
uint8_t temp, temp1;

//uint32_t B[3]={0x133a,0x7645,0xa200};//500M
uint32_t B[3]={0x1ec6,0x89ba,0x5e00};//200M
//uint32_t B[3]={0x12ca,0xb13b,0x1300};//245M

void one()
{
GPIOA-›ODR|=GPIO_ODR_ODR5;//sck=1
for (i=0;i‹1;i++);
return;
}

void zero()
{
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹4;i++);
return;
}

void imp_inv()
{
zero();
one();
return;
}

void imp_norm()
{
one();
zero();
return;
}

void WR(uint8_t A, uint32_t D)
{
GPIOA-›CRL&=~GPIO_CRL_CNF7;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;

one();
GPIOA-›ODR&=~GPIO_ODR_ODR4;//enx=0
imp_inv();

for (j=0;j‹8;j++)
{
temp1=0x80››j;
temp=A;
temp=temp&temp1;
if (temp==temp1)
{
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
}
else
{
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
}
imp_inv();
}

for (j=0;j‹16;j++)
{
temp3=0x8000››j;
temp2=D;
temp2=temp2&temp3;

if (temp2==temp3)
{
GPIOA-›ODR|=GPIO_ODR_ODR7;//sdata=1
}
else
{
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
}
imp_inv();
}

GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
imp_inv();
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
for (i=0;i‹10;i++);

return;
}


int main()
{
RCC-›APB2ENR=RCC_APB2ENR_IOPAEN;

GPIOA-›CRL&=~GPIO_CRL_CNF1;//enbl,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE1;//max
GPIOA-›ODR&=~GPIO_ODR_ODR1;
GPIOA-›CRL&=~GPIO_CRL_CNF2;//resetx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE2;//max
GPIOA-›ODR&=~GPIO_ODR_ODR2;

GPIOA-›CRL&=~GPIO_CRL_CNF4;//enx,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE4;//max
//GPIOA-›ODR&=~GPIO_ODR_ODR4;
GPIOA-›ODR|=GPIO_ODR_ODR4;

GPIOA-›CRL&=~GPIO_CRL_CNF5;//sck,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE5;//max
GPIOA-›ODR&=~GPIO_ODR_ODR5;

GPIOA-›CRL&=~GPIO_CRL_CNF7;//sdata,out,pp
GPIOA-›CRL|=GPIO_CRL_MODE7;//max
GPIOA-›ODR&=~GPIO_ODR_ODR7;




GPIOA-›ODR&=~GPIO_ODR_ODR2;//resetx=0
GPIOA-›ODR|=GPIO_ODR_ODR4;//enx=1
GPIOA-›ODR&=~GPIO_ODR_ODR5;//sck=0
GPIOA-›ODR&=~GPIO_ODR_ODR7;//sdata=0
GPIOA-›ODR&=~GPIO_ODR_ODR1;//enbl=0
for (i=0;i‹100;i++);
GPIOA-›ODR|=GPIO_ODR_ODR2;//resetx=1

WR(0x15,0xA000);
WR(0x00,0x7FFA);
WR(0x0F,B[0]);
WR(0x10,B[1]);
WR(0x11,B[2]);

WR(0x15,0xE000);


while (1);

}

Дмитрий1987 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать данные из файла.txt в eeprom контроллера? Zemlyanov Микроконтроллеры, АЦП, память и т.д 2 02.12.2010 16:54
Ищу данные по м/с 701МЛ19 alexander70 Поиск схем. Делимся схемами 0 06.10.2008 11:33
ATmega48 не могу разобраться с АЦП jtlex2007 Микроконтроллеры, АЦП, память и т.д 3 09.09.2008 15:04
как в PIC 18F452 считать из такойто ячейки ОЗУ данные? DAS_WEYDER Микроконтроллеры, АЦП, память и т.д 5 22.08.2007 11:09
как вывести на LCD данные из буфера? goooblin Микроконтроллеры, АЦП, память и т.д 11 02.04.2007 10:01


Часовой пояс GMT +4, время: 07:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot