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

Серега

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Серега

  • Звание
    Участник
    Участник

Контакты

  • ICQ
    Array
  1. А на другом МК тойже серии пробовали?
  2. Приходит. Н-да. О этом я забыл. Прерывание при сбое осциллятора не обрабатываю, только в начале провожу инициализацию. С емкостями поиграюсь. Всем спасибо.
  3. Свободного пина нет. Резонатор кварцевый. Емкости по 12 пФ. Пока обхожусь вторым кварцем.
  4. Дело не в модулях. Первая проблема: неправильная адресация массива, нужно _TAPRC[0]. Вторая проблема: см. код. Но проблема присвоение адреса одной переменной другой через третью пока не решена, помоему проще брать напрямую адрес _MsgBuf. Для модуля раскидайте функции и объявления. typedef struct { unsigned char lbyte; unsigned char hbyte; } word_t; word_t _TAPRC[1]; unsigned char _CRT; unsigned char _MsgBuf = 0x88; unsigned char *_pRMsg; unsigned char cnt=0; //variable for count the recieved byte unsigned char xxx = 0x55; void demo() { _TAPRC[0].lbyte = 0x77; // <-------------- _TAPRC[0].hbyte = 0x09; // <-------------- } void uartGetMsg (unsigned char *pMsg, unsigned char *count) //function returns the addres of received message { pMsg = &_MsgBuf; *count = _CRT; // <-------------- } void main(void) { _CRT = 10; demo(); _pRMsg = &xxx; uartGetMsg(_pRMsg, &cnt); //find the address of the message //uartGetMsg(&xxx, &cnt); demo(); }
  5. Тактирование

    Можно ли использовать вывод XOUT в качестве тактирующего для другого МК? Если да то как правильно это делать? Остальные выводы уже использованы (типа ACLK) Я соединил напрямую MK1 XOUT -> MK2 XIN. Второй проц не тактируется. МК: MSP430F2131
  6. Библиотека для 25lc640. 25lc640.rar
  7. Аналогично происходит с Opera 8.5 build 7700. Для Сахары все нормально.
  8. to VAI Нет он не удалился, после выдачи мессаги о своем отсутствии сама программа остается в каталоге.
  9. Трабл с IAR for MSP430 3.30a: дома все нормально, а на работе выдает мол не найден файл iarunicrack.exe. Дома и на работе OS WinXP SP1. Кто-нибудь сталкивался с подобным?
  10. В упрощенном режиме возможен только просмотр форума? Просто не нашел как создавать новую тему.
  11. Soft UART

    Большое спасибо, в понедельник буду пробовать.
  12. Soft UART

    Сорри, кварц на 16 МГц. "Это очень жестоко. Особенно приём." Идет в основном передача данных, пока можно и без приема обойтись. Проблема в том что при внешнем кварце скорость выше 2800 бод/с достигнуть не удается.
  13. Soft UART

    Помогите пожалуйста. Проблема с софт УАПП. Взял пример. Работает. //****************************************************************************** // MSP-FET430x110 Demo - Timer_A UART 115k, 16MHz DCO SMCLK // // Description: This program demonstrates a full-duplex 115k-baud UART using // Timer_A3 and a the DCO. A character is echoed on the Hyperterminal of a // a PC. The DCO frequency settings are stored in INFOA flash segment. // ACLK = LFXT1 = 32768, MCLK = SMCLK = saved DCO 16MHz // //* External watch crystal installed on XIN XOUT is required for ACLK *// // // MSP430F21x1 // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.3|--------> Power for MAX3221 // | CCI0A/TXD/P1.1|--------> // | | 115200 8N1 // | CCI0B/RXD/P2.2|<-------- // // H. Grewal / A. Dannenberg // Texas Instruments, Inc // July 2005 // Built with IAR Embedded Workbench Version: 3.30A //***************************************************************************** #include <msp430x21x1.h> #define RXD 0x04 // RXD on P2.2 #define TXD 0x02 // TXD on P1.1 // Conditions for 115200 Baud SW UART, DCO = 16000000Hz #define Bitime_5 69 // ~ 0.5 bit length #define Bitime 138 // ~ 115942 baud unsigned int RXTXData; unsigned char BitCnt; void TX_Byte(void); void RX_Ready(void); void main (void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_16MHZ; // Set DCO DCOCTL = CALDCO_16MHZ; TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear CCTL0 = OUT; // TXD Idle as Mark P1SEL = TXD; // P1.1/TA0 for TXD function P1DIR = TXD; // TXD output on P1 P2SEL = RXD; // P2.2/TA0 as RXD input P1DIR |= 0x08; // Power MAX3221 P1OUT |= 0x08; // // Mainloop for (;;) { RX_Ready(); // UART ready to RX one Byte _BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interr until char RXed TX_Byte(); // TX Back RXed Byte Received } } // Function Transmits Character from RXTXData Buffer void TX_Byte (void) { BitCnt = 0xA; // Load Bit counter, 8data + ST/SP CCR0 = TAR; // Current state of TA counter CCR0 += Bitime; // Some time till first bit RXTXData |= 0x100; // Add mark stop bit to RXTXData RXTXData = RXTXData << 1; // Add space start bit CCTL0 = OUTMOD0 + CCIE; // TXD = mark = idle while ( CCTL0 & CCIE ); // Wait for TX completion } // Function Readies UART to Receive Character into RXTXData Buffer // Sync capture not possible as DCO=TACLK=SMCLK can be off !! void RX_Ready (void) { BitCnt = 0x8; // Load Bit counter CCTL0 = CM1 + CCIS0 + OUTMOD0 + CAP + CCIE; // Neg Edge, Cap } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { CCR0 += Bitime; // Add Offset to CCR0 // RX if (CCTL0 & CCIS0) // RX on CCI0B? { if( CCTL0 & CAP ) // Capture mode = start bit edge { CCTL0 &= ~ CAP; // Switch from capture to compare mode CCR0 += Bitime_5; _BIC_SR_IRQ(SCG1 + SCG0); // DCO reamins on after reti } else { RXTXData = RXTXData >> 1; if (CCTL0 & SCCI) // Get bit waiting in receive latch RXTXData |= 0x80; BitCnt --; // All bits RXed? if ( BitCnt == 0) //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< { CCTL0 &= ~ CCIE; // All bits RXed, disable interrupt _BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR) } //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< } } // TX else { if ( BitCnt == 0) CCTL0 &= ~ CCIE; // All bits TXed, disable interrupt else { CCTL0 |= OUTMOD2; // TX Space if (RXTXData & 0x01) CCTL0 &= ~ OUTMOD2; // TX Mark RXTXData = RXTXData >> 1; BitCnt --; } } } Далее переделал для работы от кварца и на другую скорость. Выше скорости 2800 бод/с посылает нули вместо данных. Скорость же нужна 115200 бод/с. #include <msp430x21x1.h> #define TXD 0x02 // 2800 бод #define Bitime_5 1786 #define Bitime 3571 unsigned int RXTXData, i; unsigned char BitCnt; void TX_Byte(void); void main (void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = XTS; BCSCTL2 = SELM_3 + SELS; BCSCTL3 = LFXT1S_2; TACTL = TASSEL_2 + MC_2; // SMCLK, cont-mode, clear CCTL0 = OUT; // TXD Idle as Mark P1SEL = TXD; // P1.1/TA0 for TXD function P1DIR = TXD; // TXD output on P1 _EINT(); for (;;) { RXTXData = 0x71; TX_Byte(); for (i = 0xFFF; i > 0; i--); // Delay } } // Function Transmits Character from RXTXData Buffer void TX_Byte (void) { BitCnt = 0xA; // Load Bit counter, 8data + ST/SP CCR0 = TAR; // Current state of TA counter CCR0 += Bitime; // Some time till first bit RXTXData |= 0x100; // Add mark stop bit to RXTXData RXTXData = RXTXData << 1; // Add space start bit CCTL0 = OUTMOD0 + CCIE; // TXD = mark = idle while ( CCTL0 & CCIE ); // Wait for TX completion } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { CCR0 += Bitime; // Add Offset to CCR0 // TX if ( BitCnt == 0) CCTL0 &= ~ CCIE; // All bits TXed, disable interrupt else { CCTL0 |= OUTMOD2; // TX Space if (RXTXData & 0x01) CCTL0 &= ~ OUTMOD2; // TX Mark RXTXData = RXTXData >> 1; BitCnt --; } }
  14. Использовать МК только как UART может оказаться невыгодно.
  15. Задача: контроль высева семян. Датчик возможно установить практически у земли, что чревато быстрым засорением датчика. Реализовано с помощью фото приемо-передатчика с ОС. Датчик по ОС определяет наличие загрязнения и при надобности увеличивет световой поток. Пробовали сделать емкостной датчик, но емкость меняется слишком незначительно. Теперь вопрос: вроде слышал что была подобная система реализована на индукционных датчиках :blink: Есть идеи как это было сделано?
×
×
  • Создать...