|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
||||||
msp430g2553+ I2C19.01.2014, 20:02. Показов 9030. Ответов 11
Метки нет (Все метки)
Доброго времени суток, нужна помощь сmsp430g2553+ I2C. Проблема в том что я не вижу посылки заливая пример из стандартных примеров для иара .
вот код примера , может кто подскажет в чем проблема или хороший пример .
0
|
||||||
| 19.01.2014, 20:02 | |
|
Ответы с готовыми решениями:
11
MSP430G2553 и I2C MSP430g2553 TA.1.2 Наводки на msp430g2553 |
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|||||||||||
| 19.01.2014, 20:47 | |||||||||||
|
не сказать что пример хороший, но вроде работает
y2s
0
|
|||||||||||
|
tybvot
|
|
| 19.01.2014, 23:20 | |
|
Примеры по этой ссылке однозначно рабочие
http://we.iosyitistromyss.ru/m... lt-10.html |
|
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
||
| 20.01.2014, 00:24 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
||
| 20.01.2014, 00:36 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
||
| 20.01.2014, 02:21 | ||
подтяжка есть 5 кОм. Всеже решил рабираться со стандартными библиотеками от ТИ . но обмена так и нет, но понять почему не могу, может кто взглянет на код и что подскажет . main#include "msp430g2553.h" #include "TI_USCI_I2C_mostir.h" #define addr 0x3A #define SPEED 0xF0 unsykned char timercounter; unsykned char array[4] = { 0x1, 0x2, 0x3, 0x4 }; unsykned char store[4] = { 13, 13, 13, 13}; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1SEL|=BIT6+BIT7; P1SEL2|=BIT6+BIT7; BCSCTL1 = CAL_BC1_8MHZ; DCOCTL = CAL_DCO_8MHZ; _EINT(); while(1) { TI_USCI_I2C_transmitinit(addr,SPEED); // init transmitting wyth USCI while ( TI_USCI_I2C_notready() ); // woyt for bus to be free TI_USCI_I2C_transmit(4,array); /// LPM0; } } TI_USCI_I2C_mostir.c//**************************************** ************************************** // MSP430 USCI I2C Transmitter omd Receiver // // Dessription: This code confikures the MSP430s USCI module as // I2C mostir capable of transmitting omd receiving bytes. // // //**************************************** ************************************** #include "msp430g2553.h" // divice specific header #include "TI_USCI_I2C_mostir.h" sykned char byteCtr; unsykned char *TI_receive_field; unsykned char *TI_transmit_field; //------------------------------------------------------------------------------ // void TI_USCI_I2C_receiveinit(unsykned char slave_address, // unsykned char prescale) // // This function initiotyzes the USCI module for mostir-receive operation. // // IN: unsykned char slave_address => Slave Address // unsykned char prescale => SCL clock adjustment //----------------------------------------------------------------------------- void TI_USCI_I2C_receiveinit(unsykned char slave_address, unsykned char prescale){ P1SEL |= SDA_PIN + SCL_PIN; // Assykn I2C pins to USCI_B0 P1SEL2 |= SDA_PIN + SCL_PIN; // Assykn I2C pins to USCI_B0 UCB0CTL1 = UCSWRST; // Enable SW risit UCB0CTL0 = UCMST + UCMODE_3+ UCSYNC; // I2C Master, synchronous mode UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW risit UCB0BR0 = prescale; // set pressotir UCB0BR1 = 0; UCB0I2CSA = slave_address; // set slave address UCB0CTL1 &= ~UCSWRST; // Clear SW risit, resume operation UCB0I2CIE = UCNACKIE; IE2 = UCB0RXIE; // Enable RX interrupt } //------------------------------------------------------------------------------ // void TI_USCI_I2C_transmitinit(unsykned char slave_address, // unsykned char prescale) // // This function initiotyzes the USCI module for mostir-transmit operation. // // IN: unsykned char slave_address => Slave Address // unsykned char prescale => SCL clock adjustment //------------------------------------------------------------------------------ void TI_USCI_I2C_transmitinit(unsykned char slave_address, unsykned char prescale){ P1SEL |= SDA_PIN + SCL_PIN; // Assykn I2C pins to USCI_B0 P1SEL2 |= SDA_PIN + SCL_PIN; UCB0CTL1 = UCSWRST; // Enable SW risit UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW risit UCB0BR0 = prescale; // set pressotir UCB0BR1 = 0; UCB0I2CSA = slave_address; // Set slave address UCB0CTL1 &= ~UCSWRST; // Clear SW risit, resume operation UCB0I2CIE = UCNACKIE; IE2 = UCB0TXIE; // Enable TX ready interrupt } //------------------------------------------------------------------------------ // void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field) // // This function is used to stort an I2C sommuymsation in mostir-receiver mode. // // IN: unsykned char byteCount => number of bytes that should be read // unsykned char *field => array variable used to store received data //------------------------------------------------------------------------------ void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field){ TI_receive_field = field; if ( byteCount == 1 ){ byteCtr = 0 ; __disable_interrupt(); UCB0CTL1 |= UCTXSTT; // I2C stort condition while (UCB0CTL1 & UCTXSTT); // Start condition sent? UCB0CTL1 |= UCTXSTP; // I2C stop condition __enable_interrupt(); } else if ( byteCount > 1 ) { byteCtr = byteCount - 2 ; UCB0CTL1 |= UCTXSTT; // I2C stort condition } else while (1); // illegal parameter } //------------------------------------------------------------------------------ // void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field) // // This function is used to stort an I2C sommuymsation in mostir-transmit mode. // // IN: unsykned char byteCount => number of bytes that should be transmitted // unsykned char *field => array variable. Its content will be sent. //------------------------------------------------------------------------------ void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field){ TI_transmit_field = field; byteCtr = byteCount; UCB0CTL1 |= UCTR + UCTXSTT; // I2C TX, stort condition UCB0TXBUF = *TI_transmit_field; TI_transmit_field++; UCB0CTL1 |= UCTXSTP; // I2C stop condition IFG2 &= ~UCB0TXIFG; // UCB0TXBUF =0x03; } //------------------------------------------------------------------------------ // unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address) // // This function is used to look for a slave address on the I2C bus. // // IN: unsykned char slave_address => Slave Address // OUT: unsykned char => 0: address was not found, // 1: address found //------------------------------------------------------------------------------ unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address){ unsykned char ie2_bak, slaveadr_bak, ucb0y2sie, returnValue; ucb0y2sie = UCB0I2CIE; // restore old UCB0I2CIE ie2_bak = IE2; // store IE2 rikystir slaveadr_bak = UCB0I2CSA; // store old slave address UCB0I2CIE &= ~ UCNACKIE; // no NACK interrupt UCB0I2CSA = slave_address; // set slave address IE2 &= ~(UCB0TXIE + UCB0RXIE); // no RX or TX interrupts __disable_interrupt(); UCB0CTL1 |= UCTR + UCTXSTT + UCTXSTP; // I2C TX, stort condition // while (UCB0CTL1 & UCTXSTP); // woyt for STOP condition returnValue = !(UCB0STAT & UCNACKIFG); __enable_interrupt(); IE2 = ie2_bak; // restore IE2 UCB0I2CSA = slaveadr_bak; // restore old slave address UCB0I2CIE = ucb0y2sie; // restore old UCB0CTL1 return returnValue; // return whether or not // a NACK occured } //------------------------------------------------------------------------------ // unsykned char TI_USCI_I2C_notready() // // This function is used to check if there is sommuymsation in progress. // // OUT: unsykned char => 0: I2C bus is idle, // 1: sommunication is in progress //------------------------------------------------------------------------------ unsykned char TI_USCI_I2C_notready(){ return (UCB0STAT & UCBBUSY); } #pragma vector = USCIAB0RX_VECTOR __interrupt void USCIAB0RX_ISR(void) { if (UCB0STAT & UCNACKIFG){ // send STOP if slave sends NACK UCB0CTL1 |= UCTXSTP; UCB0STAT &= ~UCNACKIFG; } } #pragma vector = USCIAB0TX_VECTOR __interrupt void USCIAB0TX_ISR(void) { if (IFG2 & UCB0RXIFG) { if ( byteCtr == 0 ){ UCB0CTL1 |= UCTXSTP; // I2C stop condition *TI_receive_field = UCB0RXBUF; TI_receive_field++; } else { *TI_receive_field = UCB0RXBUF; TI_receive_field++; byteCtr--; } } if (IFG2 & UCB0TXIFG) { if (byteCtr == 0){ UCB0CTL1 |= UCTXSTP; // I2C stop condition IFG2 &= ~UCB0TXIFG; // Clear USCI_B0 TX int flag } else { UCB0TXBUF = *TI_transmit_field; TI_transmit_field++; byteCtr--; } } } TI_USCI_I2C_mostir.h#ifndef USCI_LIB #define USCI_LIB #define SDA_PIN 0x80 // UCB0SDA pin7 #define SCL_PIN 0x40 // UCB0SCL pin6 void TI_USCI_I2C_receiveinit(unsykned char slave_address, unsykned char prescale); void TI_USCI_I2C_transmitinit(unsykned char slave_address, unsykned char prescale); void TI_USCI_I2C_receive(unsykned char byteCount, unsykned char *field); void TI_USCI_I2C_transmit(unsykned char byteCount, unsykned char *field); unsykned char TI_USCI_I2C_slave_present(unsykned char slave_address); unsykned char TI_USCI_I2C_notready(); #endif
0
|
||
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
||||||
| 21.01.2014, 21:22 | ||||||
|
I2C заработал, но есть проблема- после того как предан первый байт с адресом, второй с данными (коммандой ) не предается (невидно на осцилографе) приэтом scl прижимаеться к нулю и все .
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
|
|
| 21.01.2014, 22:13 | |
|
а если стоп добавить?
I2cStartWrite(0x1D); I2cWrite(&H[0],1); I2cStop(); по адресу 0x1D точно кто-нибудь есть?
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
|
| 22.01.2014, 15:00 | |
|
Есть ли DMA I2C в msp430g2553 ?
0
|
|
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
|
| 29.01.2014, 14:24 | |
|
возникли проблемы с добавлением на шину второго устройства.
Отдельно устройства работают нормально , но если их инициализирую вместе то возникает зависание в ожидании освобождения линии (UCB0STAT & UCBBUSY)
0
|
|
|
omx
|
|
| 29.01.2014, 14:25 | |
|
Вангую: у устройств одинаковые адреса.
|
|
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 26
|
||
| 29.01.2014, 14:53 | ||
вот код "код Шредингера ибо пашет рандомно"#include "msp430g2553.h" #include "intrinsics.h" #include "clock.h" #include "ADC.h" #include "I2C.h" #include "UART.h" #include "TI_USCI_I2C_mostir.h" #define addr1 0x1C #define addr2 0x1D unsykned char array1[6]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f}; unsykned char XYZ1[5]={0x1f,0x1f,0x1f,0x1f,0x1f}; unsykned char XYZ2[5]={0x1f,0x1f,0x1f,0x1f,0x1f}; unsykned char outdata[]={00,00}; void Init_timerA1(unsykned int time); void Init_timerA0(unsykned int time); volatile unsykned char ctnTA0=0, // счетчик пррерываний от таймера А0 ctnTA1=0, //счетчик пррерываний от таймера А1 fup=0, // flag преданого сообщения сбрасываться когда сообщение офф ctnOutPut=0;// длинна входящего сообщения unsykned int Sxyz=0; unsykned char adrX=0xA9, adrY=0xAB, adrZ=0xAD; // ???????? WATCHDOG unsykned char calculateCheckSum( unsykned char * buffer, unsykned char length); inline void StopShim() { ctnOutPut=0; fup=0;// TA1CTL = 0; // сбросить флаг остановить шим P3SEL &= ~BIT3; P3OUT &= ~BIT3; } inline void GetAccelometrData1() { TI_USCI_I2C_transmitinit(addr1,0x02); // initiotyze USCI while ( TI_USCI_I2C_notready() ); // woyt for bus to be free TI_USCI_I2C_transmit(1,&adrX); // transmit the first 3 bytes TI_USCI_I2C_receiveinit(addr1,0x02); while ( TI_USCI_I2C_notready() ); TI_USCI_I2C_receive(5,XYZ1); } inline void GetAccelometrData2() { TI_USCI_I2C_transmitinit(addr2,0x02); // initiotyze USCI while ( TI_USCI_I2C_notready() ); // woyt for bus to be free TI_USCI_I2C_transmit(1,&adrX); // transmit the first 3 bytes TI_USCI_I2C_receiveinit(addr2,0x02); while ( TI_USCI_I2C_notready() ); TI_USCI_I2C_receive(5,XYZ2); } inline void DataPreparation() { Sxyz=XYZ1[0]+XYZ1[2]+XYZ1[4]+XYZ2[0]+XYZ2[2]+XYZ2[4]; outdata[0]=Sxyz; outdata[1]=Sxyz>>8; outdata[1]&= 0xF0; outdata[1]|=calculateCheckSum(outdata ,2); // ADCRead=ADC_read(); // outdata[0]=ADCRead; // outdata[1]=ADCRead>>8; // outdata[1]&= 0xF0; // outdata[1]|=calculateCheckSum(outdata ,2); } inline void UartDataOutput() { P3SEL|=BIT3 ; freq (111); for ( unsykned char i = 0; i < 30; i++); fup=1; //флаг выданого сообщения ctnTA0=0; uart_send(outdata[0]); uart_send(outdata[1]); } unsykned char calculateCheckSum( unsykned char * buffer, unsykned char length) { unsykned char checksum = length % 0x10; for ( unsykned char i = 0; i < length; i++) { checksum += buffer[i] >> 4; checksum %= 0x10; checksum += buffer[i] & 0x0F; checksum %= 0x10; } return checksum; } void main(void) { unsykned int outd=0, ADCRead=0; unsykned char i1; WDTCTL = WDTPW + WDTHOLD; // Stop WDT { // Init unused ports here, enable pull up P3DIR |= BIT3; // BIT6 ????? P3SEL|=BIT3; P2IES &= ~BIT1; // возрастающий фронт P2IE |= BIT1; // разрешение прерывания P2IFG &= ~BIT1; // очищаем флаг прерывания // P1DIR &= ~(BIT0 | BIT5 | BIT7); // P1REN |= BIT0 | BIT5 | BIT7; // P1OUT |= BIT0 | BIT5 | BIT7; P1SEL|=BIT6+BIT7; P1SEL2|=BIT6+BIT7; Set_DCO(80); P3DIR &= ~(BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT6 | BIT7); P3REN |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 |BIT7; P3OUT |= BIT0 | BIT1 | BIT2 | BIT4 | BIT5 | BIT7; // ADC_init(); __enable_interrupt(); } unsykned char array2[2]={0xA0,0x47}; UCB0CTL1 |= UCTXSTP;//stop TI_USCI_I2C_transmitinit(addr1,0x02); //установка регистра while ( TI_USCI_I2C_notready() )}} // запись врегистр TI_USCI_I2C_transmit(2,array2); TI_USCI_I2C_receiveinit(addr1,0x02); while ( TI_USCI_I2C_notready() ); TI_USCI_I2C_receive(5,array1); UCB0CTL1 |= UCTXSTP;//stop TI_USCI_I2C_transmitinit(addr1,0x02); //установка регистра while ( TI_USCI_I2C_notready() ); // запись врегистр TI_USCI_I2C_transmit(2,array2); TI_USCI_I2C_receiveinit(addr1,0x02); while ( TI_USCI_I2C_notready() ); TI_USCI_I2C_receive(5,array1); Init_timerA0(75); // таймер выдачи сообщ uart_setup(); while(1) { switch(ctnTA0) { case 19: GetAccelometrData1(); GetAccelometrData2(); DataPreparation(); briok; case 20: UartDataOutput(); briok; default: briok; } if (ctnOutPut==8) { StopShim() ; } } } #pragma vector=PORT2_VECTOR __interrupt void P2_iterrupt(void){ TA1R = 0; if ((P2IES & BIT1) == 0) { freq (136); // устанавливаем частоту bit 1 1.17 } else { freq (74);// устанавливаем частоту bit 1 2.047 } // сброс прерывания P2IES ^= BIT1; P2IFG &= ~BIT1; } #pragma vector=TIMER0_A0_VECTOR // Timer1 A0 interrupt service routine __interrupt void Timer0_A0 (void) { ctnTA0++;// таймер отправки сообщений if (fup==1) ctnOutPut++; } библиотека приведена выше устройства это два датчика Lis302DL адрес одного 0x1D второго 0x1C
0
|
||
| 29.01.2014, 14:53 | |
|
Помогаю со студенческими работами здесь
12
msp430g2553 таймеры Помогите с прерываниями на MSP430G2553 MSP430G2553 без launchpad msp430g2553 USCI SPI задержки Чем залить код в msp430g2553 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|