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

 
 
> MCP3208 + mega1284, Проблема с зависаниями
athlon64
сообщение Oct 1 2010, 04:33
Сообщение #1


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

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Процессор ATmega 1284P, напряжение питания 3.3В, кварц на 12.8 МГц. MCP3208 подключена через 2 оптопары ADUM1200.
Раз в милисекунду инициируется чтение из АЦП аппаратным SPI. Частота работы SPI = 800 КГц
Проблема в том что устройство зависает в произвольные моменты времени, бывает через минуту после включения, бывает через 20.
При выключенном SPI зависаний не наблюдается.

Инициализация SPI:
Код
  SPCR = BIT(SPE) | BIT(SPIE) | BIT(MSTR) | BIT(SPR0);                //16 // 800 КГц


Старт чтения (в обработчике прервания таймера, раз в 1 мсек):
Код
  Buf2SPI[1] = (ChanSPI1<<6);
  PORTB &= ~BIT(SS);        // Выставить /CS1.
  if (ChanSPI1 & BIT(2))     // START и первый байт выдаем.
    SPDR=0x05;
  else
    SPDR=0x04;
  PtrByteSPI=0;


Обработчик прерывания от SPI:
Код
  #pragma vector=SPI_STC_vect
__interrupt void IRQ_SPI()
{
  unsigned int val;
  char i;

  BufFromSPI[PtrByteSPI++] = SPDR;        // Пришло.
  
  if (PtrByteSPI < 3)    // Принят/послан не последний байт. 0,1,2
    SPDR = Buf2SPI[PtrByteSPI];        // передаем.
  else                                // Принят/послан последний байт.
  {
    PORTB &= ~BIT(MOSI);        // Снять MOSI.
    PORTB |= BIT(SS);    // Снять /CS.

    val = BufFromSPI[2] + ((BufFromSPI[1]&0x0F)<<8);
    SumBuf_SPI_ADC[(ChanSPI1&0x07)>>1] += val;

    ChanSPI1 += 2;
    
    if (ChanSPI1 == 0x80) // 16 раз по 4 каналов прошли.
    {
      for (i=0; i<4; i++) // осреднение.
      {
        Buf2Kan[i] = SumBuf_SPI_ADC[i]>>6; // для 10 бит АЦП
        SumBuf_SPI_ADC[i] = 0;
      }
      ChanSPI1 = 0;
    }
  }
}


Данные из АЦП принимаются правильные.
Прбовал снижать частоту SPI до 200 КГц - не помогает


--------------------
Руслан
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 11:01
Рейтинг@Mail.ru


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