[C7] Nhắn nhủ về Bài tập tốt nghiệp :D

doancongthang

Thành Viên PIF
mấy anh chị cho hỏi về con msp430 28 chân dán. e nạp code vào nó chạy bình thường, nhưng khi rút dây nạp ra nó im ru, chạm tay vào chân RST nó mới chạy, không chạm tay nó câm nín. lỗi vậy là lỗi gì, cách khắc phục. thankssss
 

vanthinhvt92

Thành Viên PIF
mấy anh chị cho hỏi về con msp430 28 chân dán. e nạp code vào nó chạy bình thường, nhưng khi rút dây nạp ra nó im ru, chạm tay vào chân RST nó mới chạy, không chạm tay nó câm nín. lỗi vậy là lỗi gì, cách khắc phục. thankssss
Có trở kéo chân RST lên nguồn chưa ? Bạn xem lại hệ thống tụ chống nhiểu xem sao.
 

Kisses Hacker

Art Supporter
Staff member
mấy anh chị cho hỏi về con msp430 28 chân dán. e nạp code vào nó chạy bình thường, nhưng khi rút dây nạp ra nó im ru, chạm tay vào chân RST nó mới chạy, không chạm tay nó câm nín. lỗi vậy là lỗi gì, cách khắc phục. thankssss
Nghe y chang bên thớt này: http://www.diendanti.com/showthread.php?317-Lỗi-Reset-MSP-430&p=4627#post4627
Mình thấy cứ vẽ theo schematic mạch C7 là nạp tuốt hết :D
 
mấy anh chị cho hỏi về con msp430 28 chân dán. e nạp code vào nó chạy bình thường, nhưng khi rút dây nạp ra nó im ru, chạm tay vào chân RST nó mới chạy, không chạm tay nó câm nín. lỗi vậy là lỗi gì, cách khắc phục. thankssss
chắc là thiếu trở kéo lên vcc rồi.
 

honghiep

Cố Vấn CLB
Staff member
Sao mà chữ bị nhòa và không ổn định. Có ai biết lý do bị sao ko
Bạn nên kiểm tra xem vị trí xảy ra ngắt (phần cứng) có bị thay đổi do độ rung của motor khi quay hay ko?
Về phần code, bạn xem lại phần thuật toán để chắc chắn việc khi xảy ra ngắt, hình ảnh của 1 vòng quay mới đc bắt đầu xuất ra (tức hình ảnh của vòng quay trước không bị chồng sang vòng quay sau) :)
 

Kisses Hacker

Art Supporter
Staff member
Có một vấn đề nhỏ mà một số bạn gặp khó khăn, đó là khi cấp nguồn cho mạch bằng cổ góp (hoặc chổi quét),mạch liên tục bị reset do nguồn cấp cho MCU bị đứt quãng khi cánh quạt quay. Có một cách khá đơn giản là gắn 1 con tụ vào để lọc.

Hình minh họa (ở đây mình xài 2 tụ lọc cho chắc cú, và con 1000u cũng hơi dư, các bạn xài 100u cũng đủ rồi):


Cấp bằng vòng bi không biết có bị tình trạng này không, nếu có thì giải quyết tương tự.
P.s: đi hỏi thăm mới biết có người thắc mắc chỗ này mãi mà không lên forum hỏi :2cool_burn_joss_stick:

P.s 2: có nhiều bạn hỏi thăm mình về con MSP430G2553 dán 20 chân, mình thông báo luôn là mình không có con này, hiện CLB chỉ có loại 28 chân SSOP thôi. Và trước khi vẽ schematic các bạn phải chắc chắn tìm đủ linh kiện mình cần, tránh việc vẽ xong layout, ủi mạch, hàn được gần hết mới nhớ ra "Ủa con này kiếm đâu ra bi giờ :gach"
 

phucuong23192

Thành Viên PIF
Sao mà chữ bị nhòa và không ổn định. Có ai biết lý do bị sao ko
Bạn nên kiểm tra xem vị trí xảy ra ngắt (phần cứng) có bị thay đổi do độ rung của motor khi quay hay ko?
Về phần code, bạn xem lại phần thuật toán để chắc chắn việc khi xảy ra ngắt, hình ảnh của 1 vòng quay mới đc bắt đầu xuất ra (tức hình ảnh của vòng quay trước không bị chồng sang vòng quay sau) :)
code đây mọi ng nghiên cứu hoàn thành giúp thử
#include <msp430g2553.h>
#include "Basic_config.h"
unsigned char Data[100] = {0x00 ,0x00,0x00,0xe7,0xe7,0xe7,0x07,0x07,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0xc0,0x80,0x73,0x73,0x80,0xc0,0xff,0xff,0xff,0x00, 0x00, 0xe7, 0xe7, 0xe7, 0x00, 0x00,0xff,0xff,0xff};
unsigned long count = 0, cycle,temp=0;//Counter, Rotating cycle variable
void Timera0_init();
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//Stop Watchdog Timer
P2SEL = 0;
P2SEL2 = 0;
P2DIR = 0xff;//Configure Port 2 as Output
P1IE |= BIT0;// Enable P1.0 Interrupt
P1IES |= BIT0;// Falling Edge Interrupt
P1IFG &= ~BIT0;// Clear Interrupt Flag
__enable_interrupt();// Enable Masketable Interrupt

TA0CTL = TASSEL_2 + MC_2 + ID_3+ TAIE ;
//Source Clock : SMCLK
//Divided by 8
//Continuous Mode
//Enable Overflow Interrupt
while (1)
{
if (count < 47)
P2OUT = Data[count];
else
P2OUT = 0xFF;
delay_us(cycle/200);
count++;//count is reset by an interrupt program
}
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void TAIV_Interrupt (void)
{
temp++;//Count number of overflow
TA0CTL &=~TAIFG;

}
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR (void)
{
count = 0;//Reset counter
temp <<= 16;
cycle = temp | TA0R;
TA0R = 0; // reset result
P1IFG &= ~BIT0;// Clear P1.0 interrupt flag
temp = 0;
}
 

honghiep

Cố Vấn CLB
Staff member
Sao mà chữ bị nhòa và không ổn định. Có ai biết lý do bị sao ko
Bạn nên kiểm tra xem vị trí xảy ra ngắt (phần cứng) có bị thay đổi do độ rung của motor khi quay hay ko?
Về phần code, bạn xem lại phần thuật toán để chắc chắn việc khi xảy ra ngắt, hình ảnh của 1 vòng quay mới đc bắt đầu xuất ra (tức hình ảnh của vòng quay trước không bị chồng sang vòng quay sau) :)
code đây mọi ng nghiên cứu hoàn thành giúp thử
#include <msp430g2553.h>
#include "Basic_config.h"
unsigned char Data[100] = {0x00 ,0x00,0x00,0xe7,0xe7,0xe7,0x07,0x07,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0xc0,0x80,0x73,0x73,0x80,0xc0,0xff,0xff,0xff,0x00, 0x00, 0xe7, 0xe7, 0xe7, 0x00, 0x00,0xff,0xff,0xff};
unsigned long count = 0, cycle,temp=0;//Counter, Rotating cycle variable
void Timera0_init();
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//Stop Watchdog Timer
P2SEL = 0;
P2SEL2 = 0;
P2DIR = 0xff;//Configure Port 2 as Output
P1IE |= BIT0;// Enable P1.0 Interrupt
P1IES |= BIT0;// Falling Edge Interrupt
P1IFG &= ~BIT0;// Clear Interrupt Flag
__enable_interrupt();// Enable Masketable Interrupt

TA0CTL = TASSEL_2 + MC_2 + ID_3+ TAIE ;
//Source Clock : SMCLK
//Divided by 8
//Continuous Mode
//Enable Overflow Interrupt
while (1)
{
if (count < 47)
P2OUT = Data[count];
else
P2OUT = 0xFF;
delay_us(cycle/200);
count++;//count is reset by an interrupt program
}
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void TAIV_Interrupt (void)
{
temp++;//Count number of overflow
TA0CTL &=~TAIFG;

}
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR (void)
{
count = 0;//Reset counter
temp <<= 16;
cycle = temp | TA0R;
TA0R = 0; // reset result
P1IFG &= ~BIT0;// Clear P1.0 interrupt flag
temp = 0;
}
Mình thấy việc nó bị nhòa có bị ảnh hưởng của phần code. Bạn thử làm theo cách ở phần trên mình nói nha :)
 

phucuong23192

Thành Viên PIF
Bạn nên kiểm tra xem vị trí xảy ra ngắt (phần cứng) có bị thay đổi do độ rung của motor khi quay hay ko?
Về phần code, bạn xem lại phần thuật toán để chắc chắn việc khi xảy ra ngắt, hình ảnh của 1 vòng quay mới đc bắt đầu xuất ra (tức hình ảnh của vòng quay trước không bị chồng sang vòng quay sau) :)
code đây mọi ng nghiên cứu hoàn thành giúp thử
#include <msp430g2553.h>
#include "Basic_config.h"
unsigned char Data[100] = {0x00 ,0x00,0x00,0xe7,0xe7,0xe7,0x07,0x07,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0x07,0x07,0x27,0x27,0x00,0x00,0xff,0xff,0xff,0xc0,0x80,0x73,0x73,0x80,0xc0,0xff,0xff,0xff,0x00, 0x00, 0xe7, 0xe7, 0xe7, 0x00, 0x00,0xff,0xff,0xff};
unsigned long count = 0, cycle,temp=0;//Counter, Rotating cycle variable
void Timera0_init();
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//Stop Watchdog Timer
P2SEL = 0;
P2SEL2 = 0;
P2DIR = 0xff;//Configure Port 2 as Output
P1IE |= BIT0;// Enable P1.0 Interrupt
P1IES |= BIT0;// Falling Edge Interrupt
P1IFG &= ~BIT0;// Clear Interrupt Flag
__enable_interrupt();// Enable Masketable Interrupt

TA0CTL = TASSEL_2 + MC_2 + ID_3+ TAIE ;
//Source Clock : SMCLK
//Divided by 8
//Continuous Mode
//Enable Overflow Interrupt
while (1)
{
if (count < 47)
P2OUT = Data[count];
else
P2OUT = 0xFF;
delay_us(cycle/200);
count++;//count is reset by an interrupt program
}
}

#pragma vector = TIMER0_A1_VECTOR
__interrupt void TAIV_Interrupt (void)
{
temp++;//Count number of overflow
TA0CTL &=~TAIFG;

}
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR (void)
{
count = 0;//Reset counter
temp <<= 16;
cycle = temp | TA0R;
TA0R = 0; // reset result
P1IFG &= ~BIT0;// Clear P1.0 interrupt flag
temp = 0;
}
Mình thấy việc nó bị nhòa có bị ảnh hưởng của phần code. Bạn thử làm theo cách ở phần trên mình nói nha :)
là cách gì nói ko hiểu lắm
 

Kisses Hacker

Art Supporter
Staff member
là cách gì nói ko hiểu lắm
Nếu hết một vòng quay mà vẫn còn xuất tiếp dữ liệu của vòng cũ thì nó sẽ hiện tầm bậy. Bạn viết sao cho cứ có ngắt hồng ngoại (tức trọn 1 vòng) là xuất lại dữ liệu từ đầu hoặc xuất tiếp dữ liệu khác.
P.s: tên ấy là tay to đấy nhé =))
 
Top