решил вспомнить былое и поюзать МК как хобби. (взял ардуинки, атмегу8 ну и msp430)
начал с MSP430G2553 ланчпад
поюзал кнопку, диодиками поморгал под IAR и Енергия.
но вот загвоздка с выводом UART вроде как дожно выводить но нифига.
так с выводом разобрался оказывается нужно было перемычки RXD TXD перевернуть как у казано на плате!!
под Енергией всё пошло и вывело на терминал.
а вот под IAR ни чего не нашел что бы компилело. всё ошибками.
#include "msp430g2553.h"
#include <stdio.h>
#include <string.h>
void sendString(char*);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//P1DIR |= (BIT0|BIT7); // Set the LEDs on P1.0, P1.1, P1.2 and P1.6 as outputs
P1DIR |= BIT0 + BIT6 + BIT7 ;
P1OUT &= ~BIT7;
P1OUT = 0x01;
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // Echo back received character
char buf[30];
sprintf(buf, "RH=%d\n", 56);
sendString(buf);
if (UCA0RXBUF == 'W') P1OUT |= BIT0; // Turn on P1.0 red LED when R is received
else if (UCA0RXBUF == 'w') P1OUT &= ~BIT0; // Turn off P1.0 red LED when r is received
if (UCA0RXBUF == 'G') P1OUT |= BIT6; // Turn on P1.6 green LED when G is received
else if (UCA0RXBUF == 'g') P1OUT &= ~BIT6; // Turn off P1.6 green LED when g is received
if (UCA0RXBUF == 'F') P1OUT |= BIT7; // Turn on P1.6 green LED when G is received
else if (UCA0RXBUF == 'f') P1OUT &= ~BIT7; // Turn off P1.6 green LED when g is received
}
void sendString(char * text) {
int i = 0;
for (i = 0; i < strlen(text); i++) {
while (!(IFG2 & UCA0TXIFG))
;
UCA0TXBUF = text[i];
}
}
Вопрос - на выводе RST обязательно наличие резистора подтянутого к +? Без него не будет болтанки уровня? А если перевести вывод в режим NMI, но это прерывание не активировать, можно без резистора обойтись?
Даже если перевести этот вывод в режим NMI (немаскируемого прерывания, вторая функция этой ножки)?
А у вас есть под рукой какой-либо макет, что б проверить, что на этом выводе без резистора?
Просто в описании контроллера не указано явно, что этот резистор строго обязателен и причем в обоих режимах. Указано, что этот вход МОЖЕТ использоваться для сброса при низком уровне и режиме RST.
Хочу сделать из MSP430 LaunchPad тестовый прибор, с которым можно связаться через com-порт компьютера (по протоколу modbus).
На первое время хочу сделать связь через com-порт компьютера с MSP430 LaunchPad, чтобы банально сканер com-порта показывал, что MSP430 LaunchPad шлёт биты на компьютер.
Пока я не нашёл в инете рабочего примера, как сделать связь между MSP430 LaunchPad и компьютером через com-порт. Те примеры, что нашёл (energia), дали мне ещё больше вопросов.
1. LaunchPad содержит в себе мост USB-UART, который можно использовать для связи с МК.
2. COM-порт и MODBUS - самоцель? Или цель - просто переслать байты в МК?
3. Почитайте про модуль USCI в User's Guide. USCI ЕМНИП можно сконфигурировать как UART, а это и есть то, что Вам надо. Со стороны Windows используйте функции API CreateFile, WriteFile (да, с COM-портом можно работать как с файлом).
Разница между теорией и практикой на практике гораздо больше, чем в теории.
YS писал(а):1. LaunchPad содержит в себе мост USB-UART, который можно использовать для связи с МК.
2. COM-порт и MODBUS - самоцель? Или цель - просто переслать байты в МК?
3. Почитайте про модуль USCI в User's Guide. USCI ЕМНИП можно сконфигурировать как UART, а это и есть то, что Вам надо. Со стороны Windows используйте функции API CreateFile, WriteFile (да, с COM-портом можно работать как с файлом).
1. У меня возникло сомнение, что это можно использовать для передачи байт в МК, т.к. этот самый мост (com-порт) использует (резервирует) IAR при отладке.
2. Цель - переслать байты в МК и/или обратно в ПК. Модбас - это уже потоммм.
3. Я как раз связывался через com-порт с прибором по протоколу модбас, и общался с ними по com-порту (C# Net).
подскажите, а код вашей статьи тоже имеет такую особенность: пересылаемые пакеты не покажет программа portmon?
Я спрашиваю, потому что найденный в инете простой код для energia:
Спойлерvoid setup() {
// P1_0 - red LED
// P1_6 - green LED
pinMode(P1_0, OUTPUT);
pinMode(P1_6, OUTPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(P1_0, HIGH); // set the LED on
digitalWrite(P1_6, LOW); // set the LED off
Serial.println('H');
delay(1000); // wait for a second
digitalWrite(P1_6, HIGH); // set the LED on
digitalWrite(P1_0, LOW); // set the LED off
Serial.println('L');
delay(1000); // wait for a second
}
- от его работы тоже отображает пересылаемые данные только putty (или с monitor-ом, встроенный в energia), а portmon наотрез отказывается что-нибудь показывать. Терялся в догадках, - это ведь через com-порт кидается, а значит сканер com-порта portmon должен показывать хотя бы мусор. ..Или portmon не умеет сканировать или должен быть как-то хитро настроен (а при этом пакеты, которые я кидаю используя c# net, portmon прекрасно показывает). Просветите.
Тут проблема может быть в том, что, если использовать мост USB-UART, порт получается виртуальный. И кто знает, как там portmon на него реагирует...
хм... я полагал, что переходник usb-com, используемый для связи с приборами по com-порту (c# net, Win XP Home Edition SP3 лиц), предоставляет в систему такой же виртуальный com-порт, что и MSP430 LaunchPad (в смысле свободной доступности к нему всеми возможными программными средствами как к аппаратному com-порту).
Выходит, эти два com-порта для системы представлены по-разному?
в смысле свободной доступности к нему всеми возможными программными средствами
Вопрос как раз в том, как этот самый portmon осуществляет к нему доступ. Он же вроде как-то перехватывает поток данных, а не по-человечески открывает порт...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
VLeshka писал(а):пересылаемые пакеты не покажет программа portmon?
Никогда о такой не слышал, но LaunchPad предоставляет в систему стандартный COM порт. Скачайте одну из тех программ терминалок, что в статье упомянуты, и все будет работать. С Energia я тоже не балуюсь и Вам не советую.
Написал на c# net простенькую прогу, подключающаяся к com-порту и показывающая всё что оттуда идёт - так и есть, данные от MSP430 LaunchPad через com-порт идут!
Вы были правы, portmon в данном случае просто не работает!