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

honghiep

Cố Vấn CLB
Staff member
là cách gì nói ko hiểu lắm
Tức là bạn phải làm sao cho khi có tín hiệu ngắt, MCU lập tức chuyển sang xuất dữ liệu cho 1 vòng quay mới
Thì mỗi lần có tín hiệu ngắt em cho count=0 tức là xuất dữ liệu cho vòng quay mới rồi mà
Bạn để ý là khi count = 0, nó ko ảnh hưởng gì đến delay cả. nếu count = 0 khi đang delay thì dữ liệu mới vẫn chưa đc xuất ra :)
P.S: đừng nghe kisseshacker nó hù :gach
 

phucuong23192

Thành Viên PIF
Tức là bạn phải làm sao cho khi có tín hiệu ngắt, MCU lập tức chuyển sang xuất dữ liệu cho 1 vòng quay mới
Thì mỗi lần có tín hiệu ngắt em cho count=0 tức là xuất dữ liệu cho vòng quay mới rồi mà
Bạn để ý là khi count = 0, nó ko ảnh hưởng gì đến delay cả. nếu count = 0 khi đang delay thì dữ liệu mới vẫn chưa đc xuất ra :)
P.S: đừng nghe kisseshacker nó hù :gach
Em Cảm ơn. Sau 1 hồi sửa chữa giờ nó ra như thế này. Các anh xem góp ý giùm em với
CODE:
#include <msp430g2553.h>
#include "Basic_config.h"
unsigned char Data[46] = {0xFF, 0x01, 0x01, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0x01, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x01, 0x01,
0xFF, 0xFF, 0xFF, 0x01, 0x01, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0x83, 0x83, 0x7D, 0x7D, 0x7D, 0x6D, 0x6D,
0x8B, 0x8B};
unsigned long cycle, temp=0;//Counter, Rotating cycle variable
unsigned int count = 0, check = 0;
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 < 46)
P2OUT = Data[count];
else
P2OUT = 0xFF;
count++;//count is reset by an interrupt program
delay_us(cycle/50,check);
check=0;
}
}

#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;
check=1;
}
CODE DELAY_US:
void delay_us (long t, int check)
{
long i;
for (i = 0; (i<t)&(check=0) ; i++ )
_delay_cycles(MCLK_F);
}
 
sau khi sửa mạch của phucuong23192 bị như thế nào nhỉ? vẫn chớp chứ ko mịn à?
trong phần post bài có thẻ code nhé, bên trái thẻ quote ấy. em copy vào đó nhìn cho dễ.
 

omega5161

Thành Viên PIF
có ai biết lỗi này là gì k?
DescriptionResourcePathLocationType
<a href="file:/C:/ti/ccsv5/tools/compiler/dmed/HTML/10099.html">#10099-D</a> program will not fit into available memory. run placement with alignment fails for section "BSS_GROUP" size 0x94 . Available memory ranges:SPIC/C++ Problem
 

Manhdd

Cố Vấn CLB
Staff member
Theo như nó nói thì chương trình lớn hơn bộ nhớ flash rồi :)
 

omega5161

Thành Viên PIF
tìm mãi mới ra cái này
This free version is limited only by the size of the code (up to 2KB).
Order the board itself can be the producer ti.com
set of programs designed only to work with microcontrollers Texas Instruments.
ức chế thật, giá như ta có tiền hoho
 

honghiep

Cố Vấn CLB
Staff member
tìm mãi mới ra cái này
This free version is limited only by the size of the code (up to 2KB).
Order the board itself can be the producer ti.com
set of programs designed only to work with microcontrollers Texas Instruments.
ức chế thật, giá như ta có tiền hoho
Code size limit của CCS với MSP430 lên tới 16KB mà
Bạn kiểm tra lại license xem sao?
 

honghiep

Cố Vấn CLB
Staff member
Bạn xem thêm trong thẻ Upgrade. Vì CCS của mình không còn cái lựa chọn Code Size Limit nữa nên không nói rõ chỗ này đc :)
 

doancongthang

Thành Viên PIF
có ai biết define Crystal msp430 dùng dao động nội 16MHZ ko, chỉ giáo với. Mình đang xài ngắt ngoài, mà phải che nó lại lâu nó mới ngắt được, cho động cơ quay tít nó ngắt không kịp
 

vanthinhvt92

Thành Viên PIF
có ai biết define Crystal msp430 dùng dao động nội 16MHZ ko, chỉ giáo với. Mình đang xài ngắt ngoài, mà phải che nó lại lâu nó mới ngắt được, cho động cơ quay tít nó ngắt không kịp
Sao lại che lâu nó mới ngắt được ??? tăng tần số lên có khi lại che lâu hơn nữa đó .??
 

Kisses Hacker

Art Supporter
Staff member
có ai biết define Crystal msp430 dùng dao động nội 16MHZ ko, chỉ giáo với. Mình đang xài ngắt ngoài, mà phải che nó lại lâu nó mới ngắt được, cho động cơ quay tít nó ngắt không kịp
Mình đoán là bạn dùng con hình chữ U, hồi xưa mình dùng em nó cũng gặp chuyện này, mặc dù để cách có 1cm nhưng phải che cỡ 0.5s mới ngắt -> quá lâu. Chắc là do chọn trở không đúng hoặc mua nhầm hàng lởm, tần số hoạt động của MSP430 bạn có chia có cắt cỡ nào cũng không chậm được vậy :D

Khuyến cáo bạn dùng 2 con này (TME có bán):
+ Phát: http://www.tme.vn/Product.aspx?id=1017#page=pro_info
+ Thu: http://www.tme.vn/Product.aspx?id=1019#page=pro_info

Mình chơi cặp này, gắn trở hợp lý thì cách 0.5m vẫn ngắt tốt, và mình đã xài với fanled của mình.
(Ngày mai báo cáo rồi mà chưa xong hả bạn :2cool_burn_joss_stick: chắc thức trọn đêm nay rồi)
 

doancongthang

Thành Viên PIF
có ai biết define Crystal msp430 dùng dao động nội 16MHZ ko, chỉ giáo với. Mình đang xài ngắt ngoài, mà phải che nó lại lâu nó mới ngắt được, cho động cơ quay tít nó ngắt không kịp
Mình đoán là bạn dùng con hình chữ U, hồi xưa mình dùng em nó cũng gặp chuyện này, mặc dù để cách có 1cm nhưng phải che cỡ 0.5s mới ngắt -> quá lâu. Chắc là do chọn trở không đúng hoặc mua nhầm hàng lởm, tần số hoạt động của MSP430 bạn có chia có cắt cỡ nào cũng không chậm được vậy :D

Khuyến cáo bạn dùng 2 con này (TME có bán):
+ Phát: http://www.tme.vn/Product.aspx?id=1017#page=pro_info
+ Thu: http://www.tme.vn/Product.aspx?id=1019#page=pro_info

Mình chơi cặp này, gắn trở hợp lý thì cách 0.5m vẫn ngắt tốt, và mình đã xài với fanled của mình.
(Ngày mai báo cáo rồi mà chưa xong hả bạn :2cool_burn_joss_stick: chắc thức trọn đêm nay rồi)
chính xác là mình tậu về 6 con chữ U, chết 3 con, còn 3 con, thời gian ngắt cứ nửa giây thì nó mới nhận. gắn trở như thế nào là hợp lí vậy, bên thu mình nối thẳng lên nguồn chân số 4 chân số 3 của nó cho vào chân ngắt p1.0. còn đêm nay mà kiếm đâu ra mấy con linh kiện mới bjo
 

Kisses Hacker

Art Supporter
Staff member
chính xác là mình tậu về 6 con chữ U, chết 3 con, còn 3 con, thời gian ngắt cứ nửa giây thì nó mới nhận. gắn trở như thế nào là hợp lí vậy, bên thu mình nối thẳng lên nguồn chân số 4 chân số 3 của nó cho vào chân ngắt p1.0. còn đêm nay mà kiếm đâu ra mấy con linh kiện mới bjo
Mình copy một bài hướng dẫn bên forum KSTN07 nhé:
Nguyên lý hoạt động thế này:
Con led thu/phát được đặt trong cái vỏ nhựa hình chữ U, 1 bên là led phát hồng ngoại, 1 bên là điện trở quang.
- Led phát: được cấp nguồn như led thường (Chân E xuống mass, chân IN1 mắc qua cái trở chừng 1k mắc lên nguồn +5v)
- Phần thu mắc theo thứ tự như sau: mass--- đầu D của điện trở quang ; Đầu IN2---- R 4.7k ---- Vcc=5v.
Ngõ ra của cám biển (đưa vào con Pic để tạo ngắt) lấy đầu IN2 và mass.
Khi không bị che: điện trở quang có giá trị << 4.7k ==> ngõ ra ~ 0v.
Khi bị che: điện trở quang có R >>4.7k ==> điện trở quang coi như hở mạch ==> ngõ ra ~ 5v.
Khi chuyển từ trạng thái bị che sang ko bị che ==> ngõ ra thay đổi từ 0v --> 5v ==> được cạnh lên kích cho VXL.

Led thu phát bạn nên đặt chung với phần mạch điện ( tức là gắn lên trên cánh quạt), còn ở phía dưới bạn đặt 1 vậy cố định sao cho khi cánh quay tới vị trí đó thì điện trở quang bị che lại
Bạn đọc rồi thử lại phát nữa xem có tiến triển gì không :1cool_byebye:
 

doancongthang

Thành Viên PIF
có ai biết define Crystal msp430 dùng dao động nội 16MHZ ko, chỉ giáo với. Mình đang xài ngắt ngoài, mà phải che nó lại lâu nó mới ngắt được, cho động cơ quay tít nó ngắt không kịp
Sao lại che lâu nó mới ngắt được ??? tăng tần số lên có khi lại che lâu hơn nữa đó .??
mình xài con thu phát chữ U, khoảng nửa giây nó mới ngắt được, còn nhanh thì nó ngủ luôn. còn cách nào khác???
 
Top