Разбираюсь с UARTом. Нашел рабочий пример по ссылке, данной выше - http://dbindner.freeshell.org/msp430/#_a_uart_receiver Теперь пытаюсь разобрать код.
Вообще моя задача состоит в том, чтобы определить, какие данные были посланы в порт, и соответственно отреагировать. Нашел пример с контроллером MSP430F2274. Однако на моем MSP430G2211 оно работать отказывается (немудрено, собстно).
Так вот. Большая просьба - укажите неразумному на путь истинный) Причем желательно что-нибудь на русском языке, ибо в буржуицком я не бум-бум)
С UARTом разобрался сам. Взял за основу драйвер, написанный товарищем YS'ом - спасибо ему за это) Но вот опять проблема возникла...
Собственно, проблема, скорее всего, больше софтовая, чем железячная. А заключается она вот в чем.
Пишу я в QT программу, для обмена данными между платой ЛончПада и компьютером. Использую для этого библиотеку QExtSerialPort. Так вот. Несмотря на то, что в Диспетчере устройств плата отображается и опознается как порт COM11, QExtSerialEnumerator ее не видит ни в какую! Все остальные COM-порты в программе видны. Терминальные программы типа HyperTerminal и PuTTY с портом спокойно работают. Если моей программе указать порт для подключения статично, то и она нормально работает... А вот так, чтобы увидеть порт в списке доступных портов - никак.
Я понимаю, что мала вероятность найти здесь программистов на QT, но чем черт не шутит...
Взял за основу драйвер, написанный товарищем YS'ом - спасибо ему за это)
Рад, что помог, но... Как? У меня же не драйвер железного UART'a, а его софтовая реализация. Впрочем, если помогло, я очень рад.
А вот так, чтобы увидеть порт в списке доступных портов - никак.
Для доступа к портам с номером выше COM9 необходимо специальным способом задавать путь (\\.\COMnn). Видимо, стандартная процедура поиска этого не умеет.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
YS писал(а):Для доступа к портам с номером выше COM9 необходимо специальным способом задавать путь (\\.\COMnn). Видимо, стандартная процедура поиска этого не умеет.
Да, именно так и нужно обращаться к этим портам. Но все веселье в том, что порты COM12, COM13 и т.д. до 20-го (виртуальные порты Блюзуб-адаптера) Енумератор показывает без проблем.
Всем привет.
Я год работал с AVR но было очень много проблем и решил перейти на MSP430. Купил себе launchpad с официального сайта. http://www.ti.com/launchpad
Получилось только поморгать светодиодами. Кто уже с ними работал? С чего начать? Помогите найти хороший курс по этим МК , можно и на английском.
Я там не нашёл чего искал
Моя задача на данный момент такова: Используя launchpad сзявать МК и копм через serial comunication port я использую IDE energia но когда посылаю данные через Serial Monitor никакой реакции(
Компы меня никогда не интересовали, а про курс - на 3 странице темы, на которую дал ссылку, есть ссылка на умную книгу. Правда, для начинающих, но всё-равно полезная к чтению.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
x3medima17
В комплекте к лончпаду версии 1.5 идет два контроллера - MSP430G2452 и MSP430G2553. G2553 имеет аппаратный последовательный порт, для работы с ним подходят встроенные функции, но сначала надо переставить джамперы на плате launchpad (где написано SW UART/HW UART). MSP430G2452 аппаратного UART не имеет, но в энергии есть реализация программного - это библиотека TimerSerial.h. В примерах работа с ней есть, называется TimerSerial Example.
А вообще, согласен с YS - ардуиноподобные IDE это путь в никуда. Поэтому сейчас пытаюсь пересесть на IAR, но дальше дерганья ногами пока не ушел. Еще можете посмотреть http://www.ti.com/grace - генератор кода для работы с периферией MSP430. Я с ним пока не разобрался, может у вас получится.
2 x3medima17 Про энергия и СОМ посмотри в обсуждениях здесь http://we.easyelectronics.ru/msp430/ene ... duino.html, там кстати рабочий пример с I2C на LM75
А вообще она обновилась, появились библиотеки для работы с LCD 2x16, команда tone заработала, I2C/
А чем плоха Energia? (ну кроме того, что там нет отладчика)
Компилятор там - обычный gcc, точнее даже g++. Поддержка языка отличная (из особенностей - нет new (что логично) нет исключений и нет стандартной библиотеки). Причем это современный gcc. Причем с полным набором инструментов, в том числе дизассемблером.
Доброго времени суток! Подскажите как мне сделать на msp430g2553 так, чтобы посылая через uart определенный символ скажем цифру 1 порт 1.0 менял свое значение.
Ни как не могу разобраться.....
Эммм вы хотите чтобы когда контроллер выдает байт по уарту тут же менял значение одной из ножек?Или вы хотите хэндшейк сделать?? Если второе: до загрузки в буфер символа.
я с компьютера посылаю символ по uart. контроллер его принимает и распознает. если пришлел символ A то надо переключить состояние ножки 1.0. как то так я хотел)
//******************************************************************************
// MSP430G2xx2 Demo - Timer_A, Ultra-Low Pwr UART 9600 Echo, 32kHz ACLK
//
// Description: Use Timer_A CCR0 hardware output modes and SCCI data latch
// to implement UART function @ 9600 baud. Software does not directly read and
// write to RX and TX pins, instead proper use of output modes and SCCI data
// latch are demonstrated. Use of these hardware features eliminates ISR
// latency effects as hardware insures that output and input bit latching and
// timing are perfectly synchronised with Timer_A regardless of other
// software activity. In the Mainloop the UART function readies the UART to
// receive one character and waits in LPM3 with all activity interrupt driven.
// After a character has been received, the UART receive function forces exit
// from LPM3 in the Mainloop which configures the port pins (P1 & P2) based
// on the value of the received byte (i.e., if BIT0 is set, turn on P1.0).
// ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO
// //* An external watch crystal is required on XIN XOUT for ACLK *//
//
// MSP430G2xx2
// -----------------
// /|\| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// | CCI0B/TXD/P1.1|-------->
// | | 9600 8N1
// | CCI0A/RXD/P1.2|<--------
//
// D. Dang
// Texas Instruments Inc.
// December 2010
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
//------------------------------------------------------------------------------
// Global variables used for full-duplex UART communication
//------------------------------------------------------------------------------
unsigned int txData; // UART internal variable for TX
unsigned char rxBuffer; // Received UART character
for (;;)
{
// Wait for incoming character
__bis_SR_register(LPM0_bits);
// Update board outputs according to received byte
if (rxBuffer ==' A') P1OUT |= 0x01; else P1OUT &= ~0x01; // P1.0
if (rxBuffer == 'B') P1OUT |= 0x08; else P1OUT &= ~0x08; // P1.3
// Echo received character
TimerA_UART_tx(rxBuffer);
}
}
//------------------------------------------------------------------------------
// Function configures Timer_A for full-duplex UART operation
//------------------------------------------------------------------------------
void TimerA_UART_init(void)
{
TACCTL0 = OUT; // Set TXD Idle as Mark = '1'
TACCTL1 = SCS + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture, Int
TACTL = TASSEL_2 + MC_2; // SMCLK, start in continuous mode
}
//------------------------------------------------------------------------------
// Outputs one byte using the Timer_A UART
//------------------------------------------------------------------------------
void TimerA_UART_tx(unsigned char byte)
{
while (TACCTL0 & CCIE); // Ensure last char got TX'd
TACCR0 = TAR; // Current state of TA counter
TACCR0 += UART_TBIT; // One bit time till first bit
TACCTL0 = OUTMOD0 + CCIE; // Set TXD on EQU0, Int
txData = byte; // Load global variable
txData |= 0x100; // Add mark stop bit to TXData
txData <<= 1; // Add space start bit
}
//------------------------------------------------------------------------------
// Prints a string over using the Timer_A UART
//------------------------------------------------------------------------------
void TimerA_UART_print(char *string)
{
while (*string) {
TimerA_UART_tx(*string++);
}
}
//------------------------------------------------------------------------------
// Timer_A UART - Transmit Interrupt Handler
//------------------------------------------------------------------------------
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A0_ISR(void)
{
static unsigned char txBitCnt = 10;
C HD44780 кто нибудь разобрался? У меня 3,3V вариант его, не хочет работать и все тут... в инете нашел описание, что в некоторых стоят совместимые чипы HD44780/ST7066. Вот на второй вариант чипа не пробовал писать, может у кого библиотека есть на него?