Перейти к содержанию
    

vesago

Свой
  • Постов

    747
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные vesago


  1. Скорее всего нужно написать скрипт, который запустить в отладчике. По крайней мере по i2c и uart данные отлично гоняются. i2c я качнул с сайта кейла какой-то пример и подрихтовал под свои нужды. По симулятору кейла можно почитать на www.onembedding.com. Вот пример для i2c и уарт:

    // Simulation of I2C Memory (Slave)
    
    MAP 0x30000, 0x37FFF READ WRITE      // Map User 64kB Memory region
    
    DEFINE int SADR                              // Slave Address
    
    signal void I2CMEMORY (void) {
      unsigned long adr;
    
      adr = 0x30000;
    
      while (1) {
        wwatch (I2C_OUT);                        // Wait for data from Microcontroller
        while (I2C_OUT == 0x0100) {              // START detected
          wwatch (I2C_OUT);                      // Wait for data from Microcontroller
          if (I2C_OUT > 0xFF) continue;
          if ((I2C_OUT >> 1) != SADR) continue;  // test if Slave is addressed
          I2C_IN = 0xFF00;                       // ACK to Microcontroller
          if (I2C_OUT & 1) {                     // Slave Read
            while (1) {  
              I2C_IN = _RBYTE(adr);              // Read Byte from Memory
              adr++;                             // Increment Address
              wwatch (I2C_OUT);                  // Wait for ACK from Microcontroller
              if (I2C_OUT != 0xFF00) break;
            }
          }
          else {                                 // Slave Write
            wwatch (I2C_OUT);                    // Wait for data from Microcontroller
            if (I2C_OUT > 0xFF) continue;
            adr = (I2C_OUT << 8) | 0x30000;      // Set Memory Address High Byte
            I2C_IN = 0xFF00;                     // ACK to Microcontroller
            wwatch (I2C_OUT);                    // Wait for data from Microcontroller
            if (I2C_OUT > 0xFF) continue;
            adr = I2C_OUT | adr;                 // Set Memory Address Low Byte
            I2C_IN = 0xFF00;                     // ACK to Microcontroller
            while (1) {
              wwatch (I2C_OUT);                  // Wait for data from Microcontroller
              if (I2C_OUT > 0xFF) break;
              _WBYTE (adr, I2C_OUT);             // Store Byte in Memory
              adr++;                             // Increment Address
              I2C_IN = 0xFF00;                   // ACK to Microcontroller
            }
          } 
        }
      }
    }
    
    
    SADR = 0x50  // Slave Address
    I2CMemory()  // Starting signal function
    
    
    //mode com1 38400
    //assign com1 <s0in>s0out
    
    SIGNAL void q (void) 
    {
    //     while (1)
    //    {
            S0IN = 0xC0;
            twatch (60000);
               S0IN = 0x81;
               twatch (60000);
            S0IN = 0x07;
            twatch (60000);
    
            S0IN = 0x05;
            twatch (60000);
    
            S0IN = 0x06;
            twatch (60000);
            S0IN = 0x00;
            twatch (60000);
            S0IN = 0x00;
            twatch (60000);
            S0IN = 0x00;
            twatch (60000);
            S0IN = 0x05;
            twatch (60000);
       
            S0IN = 0xDA;
            twatch (60000);
      //    }
    }

  2. Каким образом можно решить проблему подсчета контрольной суммы прошивки, если код написан в кейле? Там такой фишки как в яре к сожалению нет. Каким сторонним инструментом можно воспользоваться, чтобы узнать CRC фирмвари?

  3. Да, именно так. Ну можно еще резаки последовательно влупить для надежности. Дело в том, что GSM и GPS в составе XT55 - физически независимые устройства. Они выполнены на отдельных платах - GPS крепится на GSM матери и питание у них разделено. И производители у них разные. На фотке это видно. TCP фирмваря живет в GPS модуле. Соответственно и выходы GSM заводим на GPS для обработки данных. Кстати GPS понежнее в плане питания будет. Как-то по ошибке подал вольт 15 вместо 3.3. GSM выжил, а в GPS поджарился арм.

    post-1263-1213684458_thumb.jpg

  4. Выскажу и я свое мнение. Я работал в следующей последовательности PIC-51-LPC2000-AVR-MSP430. Имхо наиболее приятные в освоении LPC2000. Понравилась документация, с программированием гемора нет. Работает все в точности как и написано. В общем недостатков не нашел. Крайне дружелюбные. Придется правда раскошелиться на мтлинк за $70. От авр тоже приятные впечатления. Сейчас ставлю его везде - цена подкупает и удобство использования. Недавно сотряпал пару-тройку приборов на MSP430. Постараюсь их применять только в крайнем случае - если критично будет энергопотребление. В данном случае подпишусь под каждым словом defunct. Имхо старт с данного семейства может убить энтузиазм в освоении uC. Документация мне понравилась.

  5. Сегодня качнул и поставил. Компильнул проект. Все нормально, но вывалил варнинги типа:

    Warning[Pa092]: implicit conversion to integer does not preserve the value H:\PPS\ACCESS CONTROLLER\Program\v1.16_test\onewire.c 92

     

    Ругается на конструкцию:

    __delay_cycles(0.00049*XTAL);

     

    Где XTAL объявлен

    #define XTAL 14745600ul //

     

    Как мне бороться с этим и чем грозит игнорирование?

  6. Накрылся кажись мой дракон - как попало подключался к таргету. Перестало видеть таргет по исп и дебагваре. Думаю погорели какие ключи. Возле исп разъема козявки 6-ти ногие. Может кто знает, что за они - хочу купить перепаять?

    Нашлось - оказалось транзисторная сборка.

    BC847BS_2.pdf

  7. Реальное шаманство. А всего-то надо было в первой строке исправить тип переменной с char на int.

     

    Тестировал LPC2132 (без внешней шины) на предмет помехоустойчивости. С помощью искроподжигателя газа (применяющегося в котельных) так и не смог подвесить проц. Даже когда искра (мощная) происходила в 3 см от процессора. Плата простая двухсторонняя.

     

    А у меня дивайс управляет электромагнитными защелками через реле. Если диод не поставить - гарантированно виснет. Причем внутренний вачдог бывает не помогает. Но это несомненно проблема конструкции.

  8. :) Ну если LPC,это поминаемый Вами LPC22xx c внешней шиной на которой висит RAM/ROM и все это по традиции на 2x слойной плате спроектированой без опыта шаманства со скростными девайсами на двуслойных платах, то это совершенно "нормально" :). Кроме того,какое отношение Ваша реплика имеет к заданному вопросу?

     

    Да, собственно, никакого. Просто поделился впечатлением.

  9. Я проект с LPC2214 переносил на m128. Размер кода к моему удивлению принципиально не снизился. Вот другое дело - avr показался мне устойчивее. На плате стоит хостовый LPC и периферийная мега. При мощных помехах LPC загибается. Спасает только внешний вачдог. АВР ни разу не отказывал. Думаю LPC затактировать от генератора.

  10. Пример:

    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    //
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void SPI_Init(void)
    {
      SPI_PORT |= (1<<SCK)|(1<<MOSI)|(1<<MISO);
    //  PORT_SPI &= ~(1<<SCK);
    
      SPI_DDR |= (1<<SCK)|(1<<MOSI);
      SPI_DDR &= ~(1<<MISO);
    
      SPSR = (1<<SPI2X);
      SPCR = (1<<SPE)|(1<<MSTR);  //Mode 0
    }
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Записываем байт
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    void SPI_Write_Byte(u8_t b)
    {
      SPDR = b;
      while ((SPSR & (1<<SPIF)) == 0);
    }
    
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    // Читаем байт
    //::::::::::::::::::::::::::::::::::::::::::::::::::::::
    u8_t SPI_Read_Byte(void)
    {
      SPDR = 0x00;
      while ((SPSR & (1<<SPIF)) == 0);
      return SPDR;
    }

×
×
  • Создать...