Например TDA7294

Форум РадиоКот • Просмотр темы - enc28j60+stm32f100
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт дек 26, 2025 04:35:37

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: enc28j60+stm32f100
СообщениеДобавлено: Ср ноя 27, 2013 02:39:50 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 19, 2010 23:10:20
Сообщений: 21
Рейтинг сообщения: 0
Добрый день. Уже третий день бьюсь с даной связкой.Никак не могу понять че тупит enc28j60.
Вот схемы:

Вложение:
333333333.png [26.91 KiB]
Скачиваний: 706

Вложение:
2222222.png [23.03 KiB]
Скачиваний: 796

Вложение:
333.png [21.5 KiB]
Скачиваний: 355


Изображение
Изображение
Изображение
Изображение
Изображение



И чуть ниже выложу код с IAR с ноутбука))) и краткие пояснения


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Ср ноя 27, 2013 02:53:22 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 19, 2010 23:10:20
Сообщений: 21
Рейтинг сообщения: 0
Код:
#include <stm32f10x.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_tim.h>
#include <misc.h>

#define enc28j60_select() asm("nop")
#define enc28j60_release() asm("nop")

//Èíèöèàëèçàöèÿ GPIO
void gpio_init()
{
 
        // Initialize SPI
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

        GPIO_InitTypeDef GPIO_InitStruct;

        // MOSI & CLK
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOA, &GPIO_InitStruct);

        // MISO
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOA, &GPIO_InitStruct);

        // SS
        GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

        GPIO_Init(GPIOA, &GPIO_InitStruct);

        // RESET
        GPIO_InitTypeDef GPIO_InitStruct2;
        GPIO_InitStruct2.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStruct2.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct2.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStruct2);


        SPI_InitTypeDef SPI_InitStruct;

        SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
        SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
        SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
        SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
        SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStruct.SPI_CRCPolynomial = 7;
        SPI_Init(SPI1, &SPI_InitStruct);


        SPI_Cmd(SPI1, ENABLE);
}

// Îïåðàöèÿ ÷òåíèÿ
uint8_t enc28j60_read_op(uint8_t cmd, uint8_t adr)
{
  uint8_t data;

  // Íèçêèé óðîâåíü íà CS
  enc28j60_select();
   
  // Îòïðàâëÿåì êîìàíäó
  SPI1->DR = (uint8_t)cmd | (adr & 0x1f);
   
  while(!(SPI1->SR & SPI_SR_TXE)); //Îæèäàåì îêîí÷àíèÿ ïðèåìà äàííûõ ìîäóëåì SPI1 (RXNE =1 - ïðèåìíûé áóôåð ñîäåðæèò äàííûå)

  // Ïðè íåîáõîäèìîñòè, ïðîïóñêàåì "ëîæíûé" áàéò
  if(adr & 0x80)
  {
    SPI1->DR = (uint8_t)0x1f;
    while(!(SPI1->SR & SPI_SR_TXE)); //Îæèäàåì îêîí÷àíèÿ ïðèåìà äàííûõ ìîäóëåì SPI1 (RXNE =1 - ïðèåìíûé áóôåð ñîäåðæèò äàííûå)
  }
   
  // ×èòàåì äàííûå
  data = SPI1->DR;
   
  // Âûñîêèé óðîâåíü íà íîæêå CS
  enc28j60_release();
  return data;
}





// Îïåðàöèÿ çàïèñè
void enc28j60_write_op(uint8_t cmd, uint8_t adr, uint8_t data)
{
    enc28j60_select();
   
    // Îòïðàâëÿåì êîìàíäó
    SPI1->DR = cmd | (adr & 0x1f);
  while(!(SPI1->SR & SPI_SR_TXE)); //Îæèäàåì îêîí÷àíèÿ ïðèåìà äàííûõ ìîäóëåì SPI1 (RXNE =1 - ïðèåìíûé áóôåð ñîäåðæèò äàííûå)
   
    // Îòïðàâëÿåì çíà÷åíèå
  SPI1->DR = data;
  while(!(SPI1->SR & SPI_SR_TXE)); //Îæèäàåì îêîí÷àíèÿ ïðèåìà äàííûõ ìîäóëåì SPI1 (RXNE =1 - ïðèåìíûé áóôåð ñîäåðæèò äàííûå)
   
   enc28j60_release();
}




int main(void)
{
 
  for (int i=0; i<1; i++)  Delay3();

 
  gpio_init();
 
  SPI_Cmd(SPI1, ENABLE);
 
  GPIO_SetBits(GPIOB, GPIO_Pin_10);
  GPIO_SetBits(GPIOA, GPIO_Pin_4);
  GPIO_ResetBits(GPIOB, GPIO_Pin_10);

 
/* 
  GPIO_ResetBits(GPIOB, GPIO_Pin_1);
  Delay3();
  GPIO_SetBits(GPIOB, GPIO_Pin_1);
  Delay3();
  Delay3();
  Delay3();
  Delay3();
  Delay3();
  Delay3();
*/
  uint8_t data;   

//  SPI1->DR = 0xFF;
//  Delay3();

  for (int i=0; i<14; i++)
  {
   
   
    enc28j60_write_op(ENC28J60_SPI_BFC, 0x1f, 0x03);
    enc28j60_write_op(ENC28J60_SPI_BFS, 0x1f, 0x03);

    enc28j60_write_op(ENC28J60_SPI_BFC, 0x15, 0x07);
    enc28j60_write_op(ENC28J60_SPI_BFS, 0x15, 0x01);

//    enc28j60_write_op(ENC28J60_SPI_BFC, 0x15, 0x05);
//    enc28j60_write_op(ENC28J60_SPI_BFS, 0x15, 0x01);

//    enc28j60_write_op(ENC28J60_SPI_BFC, 0x15, 0x05);

/*    data =  enc28j60_read_op(ENC28J60_SPI_RCR, 0x00);
     data++;
     data =  enc28j60_read_op(ENC28J60_SPI_RCR, 0x01);
     data++;
     data =  enc28j60_read_op(ENC28J60_SPI_RCR, 0x15);   
     data++;
     data =  enc28j60_read_op(ENC28J60_SPI_RCR, 0x12);   
     data++;
  */         
   // enc28j60_select();
  //  SPI1->DR = 0xFF;
 
   // while(!(SPI1->SR & SPI_SR_TXE)); //Îæèäàåì îêîí÷àíèÿ ïðèåìà äàííûõ ìîäóëåì SPI1 (RXNE =1 - ïðèåìíûé áóôåð ñîäåðæèò äàííûå)
     
   // enc28j60_release();
  }
  while (1)
   {
     
     data =  enc28j60_read_op(ENC28J60_SPI_RCR, 0x12);
     data++;
 Delay1(); 
 
   }
   
}



Краткие пояснения: пытаюсь изменить частоту выхода ClockOut микросхемы enc28j60. Но тут есть пару помойму ошибок, я думаю что это
1. Померял выходной сигнал с этого вывода, выходит синусоида, но не ровная, а как бы поплыла
2. Возможно нужно соеденять меньшими проводами и витой парой а не прямыми?
3. С микросхемы енки выходит какойто мусор с выхода СПИ, как будто биты иногда проскакивают.
4. Танцы с бубнами и множество перезагрузок иногда меняло частоту енки и иногда как я понял отключало клок, только почемуто на +, возможно включало частоту 25мгц и осилографом не видно было.
5.соеденял между собой выходы на стм микросхеме, данные отправляются и принимаются нормально, а на енку почемуто не идут.
В чем может быть причина? уровни питания везде нормальные.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Чт ноя 28, 2013 21:01:34 
Нашел транзистор. Понюхал.

Карма: 1
Рейтинг сообщений: 25
Зарегистрирован: Пт сен 21, 2007 17:53:23
Сообщений: 190
Откуда: Зарайск
Рейтинг сообщения: 0
wiskas писал(а):
...Никак не могу понять че тупит enc28j60...

MISO можно настроить как и MOSI с CLK - GPIO_Mode_AF_PP
при приеме по SPI проверяем не SPI_SR_TXE а SPI_I2S_FLAG_RXNE или SPI_SR_BSY
вот мой код чтения/записи по SPI
Код:
uint8_t enc28j60_rxtx(uint8_t data)
{
  ENC28J60_SPI->DR = data;
  while( 0 != (ENC28J60_SPI->SR & SPI_SR_BSY) ); // wait RX/TX complette
  return ENC28J60_SPI->DR;
}

PS код с easyelectronics http://we.easyelectronics.ru/electro-and-pc/podklyuchenie-mikrokontrollera-k-lokalnoy-seti-rabotaem-s-enc28j60.html рабочий - можно скопировать, кроме обмена


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Чт ноя 28, 2013 22:33:45 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 19, 2010 23:10:20
Сообщений: 21
Рейтинг сообщения: 0
Вы не поняли меня. Данные приходящие от ENC я снимаю осцилографом, и выход с ENC не подключен к контроллеру.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Пт ноя 29, 2013 01:16:56 
Первый раз сказал Мяу!

Зарегистрирован: Вс дек 19, 2010 23:10:20
Сообщений: 21
Рейтинг сообщения: 0
Тема решена. Ответ был прост - меньше ходи по чужим огородам, меньше наступишь на грабли.
Вход CS ENC28J60 не должен в тупую весеть на земле. Он должен вешатся на землю в начале передачи и подниматся в конце. Хотя гдето на чъемто огороде я видел что КС подтянут на землю, а на контролере на плюс.
Вот такие вот грабли :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Пт ноя 29, 2013 22:17:30 
Встал на лапы

Карма: 1
Рейтинг сообщений: 39
Зарегистрирован: Ср фев 01, 2012 10:55:53
Сообщений: 145
Рейтинг сообщения: 0
mrFox, из даташита:
Цитата:
Do not use the BSY flag to handle each data transmission or reception. It is better to use the
TXE and RXNE flags instead.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: enc28j60+stm32f100
СообщениеДобавлено: Пн дек 02, 2013 22:08:50 
Нашел транзистор. Понюхал.

Карма: 1
Рейтинг сообщений: 25
Зарегистрирован: Пт сен 21, 2007 17:53:23
Сообщений: 190
Откуда: Зарайск
Рейтинг сообщения: 0
wiskas писал(а):
...Вход CS ENC28J60 не должен в тупую весеть на земле...

я бы на это и не подумал ибо обычно делаешь автоматически, особенно когда в даташите прописанно
BorisSPB писал(а):
Do not use the BSY flag to handle each data transmission or reception.

ну не знаю с BSY все работает нормально да и RXNE я предлагал


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y