Wednesday, May 20, 2015

LỊCH SỬ MẠCH BÁN DẪN IC

Sơ lược về IC

Vi mạch tích hợp, hay vi mạch, hay mạch tích hợp (integrated circuit, gọi tắt IC, còn gọi làchip theo thuật ngữ tiếng Anh) là các mạch điện chứa các linh kiện bán dẫn (như transistor) và linh kiện điện tử thụ động (như điện trở) được kết nối với nhau, kích thước cỡ micrômét (hoặc nhỏ hơn) chế tạo bởi công nghệ silicon cho lĩnh vực điện tử học.

Ai là người phát minh ra IC

Đó là thứ mà 2 nhà kỹ sư vật lý người Mỹ sáng chế ra, Jack Kilby và Robert Noyce.
Jack Kilby

Robert Noyce
12/09/1958 Jack Killby đã chế tạo thành công ra IC dao động với 5 linh kiện đơn giản trên một vật liệu giống nhau gọi là “chip”. Phát minh này không chỉ mang lại cho Killbly bằng sáng chế của Texas Instrucment mà còn mang lại cho ông một phần của giải thưởng Nobel vật lý năm 2000. Thực sự thì Robert Noyce cũng sẽ có thể nhận được giải Nobel cho sáng chế này nếu ông ấy không mất vào năm 1990. Thực sự trong thời gian sau đó, bản quyền về việc sáng chế ra IC luôn bị hai nhà sáng chế giành giật. Lý do, Jack Killby đã gửi đơn đăng ký quyền sáng chế trước nhưng Robert lại được duyệt trước. Điều đó dẫn đến mâu thuẫn giữa hai người, và các cuộc kiện tụng cứ diễn ra... cho đến khi tình hình thị trường và các nhà khoa học thời đó cho rằng, IC rất khó sản xuất và cho ra sản phẩm thực.
Để IC có thể ra đời, chúng ta phải kể đến việc làm nên tấm bán dẫn p-n của Russel Ohl vào năm 1940. Sau đó vào năm 1950, Bardeen, Bratain và Shockley, những người đã chế tạo ra junction transistor - một trong những linh kiện không thể thiếu của mọi loại IC, nhờ đặc tính đặc biệt của nó.

IC ra đời trong hoàn cảnh nào?

Trong khoảng thời gian trước khi IC ra đời, các nhà phát minh hay sáng chế đều sử dụng các linh kiện rời rồi hàn lại trên một hoặc rất nhiều mạch điện để chế tạo một máy. Trong thời gian ấy, các linh kiện điện tử bán dẫn khá là đắc, chưa ứng dụng thực tế được, đặc biệt là transistor. Vì vậy, người ta vẫn dùng bóng chân không (về cơ bản nó cũng có chức năng tương đương một chiếc transistor) "khổng lồ", một thiết bị rất là rẻ vào thời ấy. Nên, những chiếc máy tính ở thập niên 50, 60 rất to, cồng kềnh và cực kì tốn điện. Nhưng, việc sử dụng bóng chân không có một ưu điểm là rất dễ dàng thay thế (vì bóng đèn có chuôi đèn, và chỉ cần gỡ bóng hư thay bằng bóng mới), nên cho đến khi IC đã ra đời thì bóng chân không vẫn được dùng thêm một thời gian, sau đó mới bị thay thế bởi những loại máy tính hiện đại hơn, và mức độ tin cậy cao hơn.
Trong hoàn cảnh đó, IC đã ra đời để đem đếm một cuộc cách mạng thực sự trong lĩnh vực công nghệ thông tin!

IC đã tạo ra những ảnh hưởng gì và vì sao nó lại có thể làm như vậy được?

Hãy cũng nhắc lại khái niệm về IC... Nó là một mạch điện tích hợp, nghĩa là rất nhiều linh kiện cùng nằm trên một đơn vị diện tích (hiện nay người ta đã làm được những chú IC có rất linh kiện trên một đơn vị nano mét). Chính vì điều đó, mà nó đã thu gọn diện tích của mọi loại máy từ thập niên 70 đến nay (bạn hãy xem qua về lịch sử các loại máy ENIAC và UNIVAC để biết thêm về kích cỡ của những "người khổng lồ thật sự"). Và với giá thành rẻ của nó (nhờ có công nghệ Plamar của Robert Noyce), mọi chiếc máy sử dụng IC đều thích hợp với mọi đối tượng người dân, chứ không còn chỉ bó hẹp trong các văn phòng chính phủ hay các công ty liên doanh nữa!

Vậy tại sao, IC lại có thể làm được những điều đó?
  1. Thứ nhất, vì công nghệ sản xuất ra IC ngày càng phát triển, kích thước của nó ngày càng nhỏ, giá thành ngày càng rẻ, chức năng ngày càng nhiều, độ bền cao, tuổi thọ cao... chính vì những ưu điểm vượt bậc, cộng với chiến lược kinh doanh ngay từ khi bắt đầu thương mại hóa của Killby và Noyce đã làm IC ngày càng phổ biến.
  2. Thứ hai, vì mạch điện ngày càng đơn giản, những người chế tạo / sáng chế máy không nhất thiết phải là các nhà khoa học, mà ngay cả học sinh, sinh viên và những nhà nghiên cứu tay ngang hoàn toàn có thể tự làm một sản phẩm độc đáo. Chính nhờ xây dựng được một cộng đồng rộng lớn như vậy, việc phát triển của IC ngày càng tăng nhằm đáp ứng nhu cầu đó.
  3. Thứ ba, vì con người ngày càng muốn mỏi thứ nhỏ hơn, đơn giản hơn và các chủ doanh nghiệp muốn kinh doanh tốt hơn, nên họ đã đầu tư rất nhiều tiền vào công nghệ sản xuất IC và dây chuyền tự động,...
Chính vì những lí do đó, mà công nghệ sản xuất IC và các sản phẩm sử dụng IC ngày càng tinh vi, hiện đại, nhỏ gọn và rẻ hơn. Hệ quả xảy ra là các ngành chế tạo máy, công nghệ thông tin, khoa học vi tính, y học,... (cơ bản là mọi ngành) có sự đột phá mạnh mẻ. Chỉ trong vòng hơn 50 năm, mà con người đã làm vô vàn những điều mà ở thời kì trước đó, họ xem rằng đó là những việc viển công, chẳng hạn như việc bay vào vũ trụ, đặt chân lên mặt trăng, chữa bệnh ung thư, mỗ không để lại sẹo,...

Kết luận

Cũng chính vì những ứng dụng thực tế không bàn cãi và những gì mà nó đem lại trong cuộc sống này mà chúng ta đã bầu chọn cho IC là phát minh quan trọng nhất trong thế kỷ XX. Bạn có biết, khi sáng tạo ra IC, những nhà phát minh nghĩ gì trong đầu mình không? Họ chỉ đơn giản nghĩ rằng, tôi cần tìm ra một sản phẩm có thể thâu tóm được linh kiện để đặt trong một môi trường nhất định và giảm giá thành những máy móc điện tử. Họ không hề nghĩ những phát minh của họ sẽ làm được những điều không tưởng mà mình vừa kể. Vì vậy, bạn đừng đặt quá nhiều niềm tin, thời gian để làm một thứ thay đổi cả thế giới, mà hãy dành thời gian tìm ra những khó khăn trong cuộc sống hiện đại, và tím cách tối ưu / sáng chế ra cái gì đó có thể khắc phục được nó.

LÀM THẾ NÀO ĐỂ MỘT NHÓM LẬP TRÌNH VIÊN LÀM VIỆC HIỆU QUẢ

Tại sao bài này QUAN TRỌNG với bạn?

Vì sao iPhone luôn là cái điện thoại "nảy sinh" trong đầu bạn khi bạn muốn mua một chiếc điện thoại. Nhưng sau đó, vì các lý do khách quan lẫn chủ quan, bạn phải sở hữu một chiếc điện thoại khác. Ở đây, chúng ta không bàn nhau vì sao iPhone luôn là chiếc điện thoại đầu tiên mà ta nghĩ đến (vì nó không đúng với tất cả mọi người), nó chỉ là một ví dụ để bạn thấy sự hiệu quả của iPhone trong việc chiếm lĩnh thị trường điện thoại và cả những sản phẩm của Apple vậy.
Nhắc lại đến việc sáng tạo ra một sản phẩm mới, chắc hẳn bạn luôn muốn nó ra đời và có hiệu quả trong thực tiễn. Tuy nhiên, không phải sản phẩm nào mới ra đời cũng được mọi người chào đón một cách nồng nhiệt như iPhone. Gác lại đến vấn đề hiệu quả của sản phẩm, đó là chuyện khó. Trước tiên, ta phải giải quyết chuyện dễ, đó là kết hợp sức mạnh của nhiều người để tạo nên một đội ngũ mạnh mẽ trong việc lập trình. Bây giờ câu hỏi đặt ra cho bạn là? Bạn muốn trở thành một phần của một nhóm có cùng lý tưởng và tiến đến thành công, HAY tự bạn sẽ tìm đến thành công bởi một mình bạn? Nếu chọn phương án đầu tiên, bài viết này sẽ rất QUAN TRỌNG với bạn. Vì trong lịch sử, hiện thực, phim ảnh, truyện tranh,... một người dù có sức mạnh lớn như thế nào đi chăng nữa thì cũng sẽ không thể biến (hay áp đặt) mong muốn, suy nghĩ của họ lên người khác mãi mãi được. Nếu có thời gian, bạn nên xem phim X-Men: Days of Future Past (2014) vì nó sẽ cho bạn biết được tầm quan trọng của việc làm việc nhóm hơn những gì có thể nói ra bằng lời hoặc viết ra được. Hãy thử cảm nhận...
Vậy làm thế nào để bạn có thể cùng với nhóm của bạn làm việc cùng nhau một cách có hiệu quả? Khám phá nó trong bài viết, bạn nhé!

Những vấn đề bạn có thể gặp phải khi hoạt động một mình

Trước tiên, nếu là một người phản biện cho bài viết này, mình sẽ thắc mắc, vì sao mình lại biết những vấn đề này và vì sao nó lại cấp bách và giải quyết đầu tiên?

Mình bắt đầu tiếp xúc với ngôn ngữ lập trình từ lớp 7 (2009, thực sự bắt đầu vào năm 2008), nó xuất phát không bởi vì mình thật sự muốn nó lúc đó, bởi vì con người ta thường sẽ sợ những cái mới. Nhưng khi được trải nghiệm nó một cách từ từ bởi động lực từ chính bản thân mình, mọi thứ dần dần trở nên cực kỳ thú vị heart. Và suốt quá trình đó, mình đã gặt hái được một số giải thưởng của riêng minh. Tuy nhiên, nếu nhìn nhận lại cả quá trình mình trải nghiệm, thì nó có khá nhiều vấn đề... mà khi đang trải nghiệm, bạn không thể nào nhận ra hoặc nhận ra nhưng xem đó là những vấn đề dễ dàng và tự nhiên thời gian sẽ "giải quyết chúng" hộ bạn.
Trước đây, mình có suy nghĩ, mình là "trọng tâm của thế giới của riêng mình" và trong một thời gian hơn 4 năm, nó cũng có một số hiệu quả nhất định. Nó giúp mình dễ dàng trong việc đưa ra quyết định; giúp mình dễ dàng xây dựng những thứ mình muốn trong quá trình lập trình; giúp mình dễ tìm được sự thỏa mãn chiến thắng; và khi có ý kiến trái chiều hoặc phản biện, việc đầu tiên, không cần suy nghĩ, mình sẽ phản biện lại ý kiến đó mà chưa cần xem xét những lời phản biện hoặc góp ý ấy;... Nếu bạn là một người đã "chinh chiến" nhiều năm trong "cuộc săn giải thưởng", VÀ thấy được con người của bạn trong ví dụ của mình thì ắc hẳn, chúng ta sẽ xem việc mình "thành công" là bởi chính bản thân mình, không nhìn nhận ra được vì sao mình lại có thể thành công hoặc nhìn ra một phần nhưng lại nhanh chóng quên bén mất khi đi chiến đấu! Và hơn nữa, việc suy nghĩ theo hướng đó, còn gây ra những vấn đề nan giản hơn nữa.

Vậy, những vấn đề mình gặp phải là gì?


Thiết nghĩ, có 3 vấn đề lớn mà bạn đã gặp phải!
Thứ nhất, khi gặp những vấn đề khó với bản thân, chúng ta sẽ rất hứng thú giải quyết. Nhưng khi gặp những về đơn giản hơn, cộng với số lượng nhiều thì sẽ gây ra tâm lý chán nản (vì làm hoài làm lại thì chán lắm).
Thứ hai, luôn có suy nghĩ, sản phẩm mình làm ra sẽ được mọi người đón nhận và cảm thấy thỏa mãn vì điều đó. Và không còn có ý nghĩ sẽ tiếp tục phát triển "đứa con tinh thần" để nó tốt hơn nữa (vì bản thân ta nghĩ nó đã tốt nhất mất rồi devil).
Thứ ba, bạn luôn nghĩ rằng, mình sẽ được ưu tiên nhất, và khi có thắc mắc thì sẽ được "người biết" trả lời. Vì suy nghĩ, mình "ham học hỏi" mà!
Yeah, hầu hếu chúng ta đều có suy nghĩ mình là "trọng tâm của thế giới". Suy nghĩ của một đứa trẻ, cũng như đứa trẻ ấy, cần được chăm sóc và nuôi dưỡng một cách cẩn thận. Chúng ta có suy nghĩ "mình là trọng tâm", cùng bởi vì,  được chăm sóc quá tốt! Nói không ngoa, chỉ cần nhìn thấy những người mẹ, người bà,... đi theo săn sóc những đứa trẻ đang tuổi ăn tuổi lớn (ý mình từ 3 - 5 tuổi) từng tí một, phải làm mọi cách tốt nhất để nó ăn,... thì bạn có thấy được cái "trọng tâm" chưa? Đồng ý với bạn là nó cần ăn để có thể trạng tốt, được trí thông minh trời phú, và tất cả mọi bậc cha mẹ đều nghĩ rằng, điều đó là tốt nhất cho con mình. Chúng ta không xét tính chất tốt xấucủa nó, mà chỉ cần nghĩ rộng hơn ra một tí là thấy, chính từ những hành động nhỏ nhặt ấy đã nuôi dưỡng suy nghĩ mình là trọng tâm của thế giới. Có ý kiến phản biện rằng, khi nó lớn hơn, ta sẽ bắt nó tập ăn tự lập, tập sống tự lập,... Ngược lại vấn đề, bạn cảm thấy thế nào khi một đứa trẻ đang được "sướng" mà mình lại "tước" đi cái quyền đó, từ đó, những đứa trẻ sinh ra sự bất đồng và càng ngày nó càng phát triển phức tạp hơn. Vậy, hãy chấp nhận rằng bạn có những vấn đề đó nếu bạn được ba mẹ chăm sóc như vậy.

Vậy làm thế nào để giải quyết những vấn đề này?

Bây giờ, bạn đã biết vì sao bạn có những vấn đề ấy, vậy để giải quyết nó, chẳng còn cách nào khác, bạn phải thay đổi một cách dần dần suy nghĩ "mình là trọng tâm của thế giới". Vậy thay đổi nó thành cái gì, và vì sao lại phải thay đổi theo hướng ấy?
Khi phủ định suy nghĩ của mệnh đề "mình là trong tâm của thế giới", ta sẽ có mệnh đề "mình là một phần của thế giới", vậy ta sẽ thay đổi suy nghĩ của bản thân theo hướng này. Nó sẽ giúp thay đổi cách ta nhìn nhận cuộc sống: giúp ta cảm thấy vui vẻ khi làm việc (vì ta biết ta là một phần của cộng đồng, và khi hoàn thành công việc, cộng đồng ta đang sinh sống sẽ hạnh phúc); giúp ta loại trừ "bộ lọc" ý kiến, biết lắng nghe, biết phản hồi và biết chung sống với người khác (vì chẳng còn có một giọng nói trong đầu bắt ta không được làm việc này, phải làm việc kia nữa, bản thân ta không còn áp đặt chính mình,...); ... và quan trọng nhất, đó là ta sẽ không còn xem những giải thưởng là nhất, xem những chiến tích là nhất, mà sự thành công lúc bấy giờ, cũng sẽ được định nghĩa khác trong suy nghĩ của bạn. Nó không còn đơn thuần là sự đạt được một điều gì đó, mà còn là sự chia sẻ, để những phần khác của cộng đồng được tiếp cận với nó!
Việc thay đổi suy nghĩ là khó, nên bạn hãy cứ để mọi việc tự nhiên và dần dần thay đổi. Tuy nhiên, đôi khi vẫn cần có một tí quyết đoán để bạn đưa ra quyết định, vì trước khi lo cho cả nhóm, hãy hoàn thiện công việc của mình trước.

Vậy làm việc nhóm sẽ có những lợi ích gì và vấn đề gì?


Khi làm việc cùng với nhóm những đứa bạn có cùng đam mê lập trình với bạn thì sẽ thích thú và thoải mái, hầu như ít khi nào còn cảm giác căng thẳng. Tuy nhiên, việc họp mặt làm cùng nhau không phải lúc nào cũng tốt nhất, vì mỗi người đều có một thời gian biểu khác nhau và lựa là khoảng thời gian thích hợp để cùng nhau làm việc thì hơi khó đối với những nhóm lớn hơn 2 người.
Lợi ích của việc làm việc nhóm rất nhiều, nhưng làm thế nào để làm việc nhóm có hiệu quả trong việc lập trình thì hơi khó. Vì đặc thù của nhóm lập trình là phát triển hệ thống trên máy vi tính, nên việc cùng nhau làm trên một máy vi tính thì chẳng hiệu quả rồi. Vậy vấn đề lớn nhất đó là làm thế nào để mỗi người tự code theo những nhiệm vụ được giao và sau đó sẽ có một người nào đó tổng hợp lại?
Đó là điều thúc đẩy sự ra đời của hệ thống Subversion, tiếp đến là hệ thống Version Control System (VCS) và hiện tại nổi bật và dễ dàng nhất là Git.

Version Control System là gì?


"Version Control System" có nghĩa là hệ thống quản trị phiên bản devil. Vậy tại sao ta cần dùng nó? Huh, bạn có bao giờ thắc mắc vì sao các phần mềm luôn có phiên bản? Và mỗi khi cập nhập, họ cập nhập rất nhanh không? Bạn đã từng làm nên các sản phẩm nhưng mỗi khi muốn tạo một phiên bản mới thì bạn sẽ sửa thẳng trên phiên bản cũ luôn đồng thời tạo ra một bản copy đặt tên là "phiên bản cũ", đúng không nào? Nhưng mỗi lần muốn lấy lại code cũ, bạn phải copy code mới chèn vào code cũ và mỗi lần như vậy phải đỗi thư mục, đổi file rất mất thời gian phải không ? Và với Version Control System, bạn sẽ làm được điều đó một cách khoa học và cực kỳ tiết kiệm thời gian!

Kết luận


Chúng ta đã biết được vì sao một lập trình viên cần nhóm của riêng mình. Và với những hệ thống phần mềm lưu trữ phiên bản, bạn và những người bạn cùng đam mê sẽ dễ dàng thực hiện được nó. Đó, cũng là lý do vì sao những cuộc thi về phần mềm, phần cứng hiện nay rất khuyến khích sự tham gia của nhóm dự thi, bởi vì họ mong muốn những thí sinh có được những suy nghĩ rộng lớn hơn, biết cách chia sẻ công việc và có được những người bạn cùng chung lý tưởng. Như vậy, những sản phẩm của những nhóm ấy có khả năng được phát triển nhiều hơn nữa...

Lời ngỏ

Trong bài viết sau, mình sẽ hướng dẫn sử dụng Git, bởi vì đây là một công cụ rất đơn giản và hiệu quả để các bạn quản lý nhóm dự án của mình. Học cách phân chia công việc và làm được những dự án lớn hơn nữa. Một người khó có thể biết hết mọi thứ trên đời, nhưng khi kết hợp lại thì không có gì là không thể!

Tuesday, April 7, 2015

BÀI 6: (MSP430 - BASIC) - ADC

1. Giới thiệu chung ADC

Module ADC 10bit của MSP430x2xx là module chuyển tín hiệu tưng tự thành tín hiệu số 10bit , hỗ trợ việc đọc với tốc độ tối đa 200ksps(Tức là chu kỳ 200.000 lần lấy mẫu/s) ,có chế độ truyền dữ liệu DTC ( Truyền dữ liệu đến bất cứ đâu trong bộ nhớ mà không cần sự can thiệp của CPU).Đặc điểm cơ bản:
-       ADC 10 bit tốc độ lấy mẫu 200ksps
-       Chọn điện áp tham chiếu 1,5V hoặc 2,5V VCC hay điện áp tham chiếu ngoài
-       8 kênh chuyển đổi , kênh cảm biến nhiệt độ bên trong chip
-       Chuyển đổi đơn kênh,lặp 1 kênh,trình tự,lặp đi lặp lại
-       Tự động truyền dữ liệu vào bộ nhớ (Chức năng tượng tự DMA,ưu điểm so với các dòng VĐK đời cũ)

Sơ đồ khối:

Các chân có hỗ trợ chức năng ADC sẽ được ký hiệu Ax ,ví dụ A0 – Kênh ADC0 ; A1-Kênh ADC1

2. Lõi ADC10

         ADC 10bit có nhiệm vụ chuyển đổi điện áp đầu vào , so sánh với điện áp tham chiếu và xuất ra thanh ghi ADC10MEM . Điện áp tham chiếu là VR+ và VR- .Giá trị số hóa của điện áp đầu vào tính bằng công thức sau:
         Trong đó :    
o    Vin :Điện áp đầu vào
o   VR+:Điện áp tham chiếu mức dương (Có thể chọn bằng lập trình)
o   VR-: Điện áp tham chiếu mức âm (Có thể chọn bằng lập trình)
Khi tín hiệu đầu vào cao hơn hoặc bằng VR+ thì Nadc = 1023 và khi nhỏ hơn VR- thì bằng 0 .Kết quả có thể lưu ở dạng thường hoặc mã bù 2 . Lõi ADC được điều khiển bằng 2 thanh ghi ADC10CTL0 và ADC10CTL1 .Lõi chỉ hoạt động khi bit ADC10ON =1 . Bit ENC = 0 thì mới cho phép chỉnh sửa thông số các thanh ghi ADC và khi ENC =1 thì việc chuyển đổi mới được thực hiện .

3. Chọn tốc độ chuyển đổi

          ADC10 có thể dùng được cả nguồn xung nội và ngoại từ MCLK , SMCLK , ACLK , từ chân ADC10OSC bằng ADC10SEELx trong thanh ghi ADC10CTL1 .Các bạn cần chú ý khi dùng nguồn xung ngoại từ chân ADC10OSC là tần số cấp không được quá 5Mhz tuy dòng.

4. Chọn cổng chuyển đổi

         Thực chất trong mỗi chip MSP430 chỉ có một bộ chuyển đổi ADC,các cổng cần chuyển đổi ADC sẽ được lần lượt kết nối với bộ ADC qua một bộ MUX .Các cổng được phép chuyển đổi ADC có thể được chọn từ thanh ghi ADC10AEx,các bạn cần quan tâm đến các thanh ghi này vì các cổng khi được chọn ở chế độ ADC sẽ loại bỏ các bộ buffer input và output của chức năng GPIO,từ đo cho phép tiết kiệm điện.

5. Điện áp quy chiếu

Điện áp tham chiếu của ADC có thể chọn rất đa dạng , từ nguồn cấp nội 1.5V 2.5V hay nguồn cấp ngoài VCC hoặc từ chân VREF+ và VREF - .
-       REFON = 1 , Điện áp tham chiếu nội được chọn.
o   REF2_5=1,Điện áp tham chiếu là 2.5V
o   REF2_5=0,Điện áp tham chiếu là 1.5V
-       REFOUT = 1 , Điện áp tham chiếu ngoài được sử dụng nếu chip có sẵn pin Vref+ và Vref-  tương ứng ở chân A4 và A3.
Khi sử dụng điện áp tham chiếu ngoại thì nên tắt nguồn điện áp tham chiếu nội để bảo vệ nguồn.

6. Quá trình biến đổi và lấy mẫu


Biến đổi A-D được bắt đầu khi có xung cạnh lên của tín hiệu vào SHI. SHI được lựa chọn bởi bit SHSx từ các nguồn:
-       ADC10SC
-       Timer_Ax.1
-       Timer_Ax.0
-       Timer_Ax.2
Bit ISSH dùng để đảo chiều tín hiệu SHI. Bit SHTx dùng lựa chọn chu kỳ lấy mẫu là 4, 8, 16, hoặc 64 ADC10CLK. SAMPCON được điều khiển bằng bit ADC10SHTx và MSC trong thanh ghiADC10CTL0 (xem sơ đồ trên) . Tsample là thời gian lấy mẫu. Khi SAMPCON từ mức cao xuống thấp thì quá trình biến đổi A-D bắt đầu. Khi SAMPCON = 0 thì tất cả các ngã vào Ax có tổng trở cao. Khi SAMPCON = 1 thì ngã vào Ax giống như một bộ lọc thong thấp RC trong suốt thời gian lấy mẫu.

+ Thời gian lấy mẫu

         Khi bit SAMPCON = 0 , tất cả các chân Ax được chọn từ ADC10AEx ở trạng thái trở kháng cao.Khi SAMPCON = 1, chân Ax được chọn giống như một bộ lọc thông thấp RC (là bộ giúp loại bỏ nhiễu tần số cao) trong thời gian Tsample, khi đó chân Ax được nối với trở Ri và tụ Ci . Nói chung phải cài đặt thời gian lấy mẫu Tsample và điện trở ngoài Rs sao cho BĐT sau thỏa mãn :
Với :  Sr = 1us/V khi ADC10SR=0 và 2us/V khi ADC10SR=1
          Vref : Điện áp tham chiếu ngoài

7. Chế độ hoạt động

Nói chung có 4 chế độ hoạt động cho ADC ,về chi tiết các bạn có thể xem trong datasheet , ở đây mình chỉ hướng dẫn đặc điểm từng chế độ và các cài đặt. Thay đổi bit CONSEQx (trong thanh ghi ADC10CTL1) để chọn chế độ hoạt động. Kết quả lưu trong ADC10MEM.
-       Biến đổi từng kênh
o   CONSEQx = 00
o   Kênh cần biến đổi ADC được chọn từ bit INCHx.Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi 1 dãy kênh
o   CONSEQx = 01
o   Biến đổi 1 dãy kênh,bắt đầu ở kênh được chọn trong INCHx,kết thúc ở A0. Bit ADC10SC dùng để kích hoạt sự biến đổi.ENC phải được đảo trạng thái sau mỗi lần biến đổi.
-       Biến đổi từng kênh lặp lại
o   CONSEQx = 10
o   Kênh được chọn trong INCHx được lấy mẫu và biến đổi liên tục
-       Biến đổi dãy kênh lặp lại
o   CONSEQx = 11
o   Dãy kênh bắt đầu ở INCHx và kết thúc ở A0 được lấy mẫu và biến đổi lần lượt.
Khi MSC = 1 và CONSEQx > 0 thì cạnh lên đầu tiên của SHI sẽ kích hoạt biến đổi. Sự biến đổi vẫn tiếp tục cho đến khi dãy kênh được biến đổi xong mặc dù trong quá trình biến đổi xuất hiện những xung cạnh lên ở tín hiệu kích hoạt SHI. Chức năng của Bit ENC không thay đổi khi sử dụng Bit MSC.  

8. Bộ điều khiển chuyển tiếp dữ liệu DCT

ADC10 có một bộ điều khiển chuyển giao dữ liệu ( DTC), nó sẽ tự động chuyển kết quả của biến đổi A-D từ thanh ghi ADC10MEM sang bộ nhớ của Chip. DTC được cho phép khi thiết lập thanh ghi ADC10DTC1 có giá trị khác 0. Khi DTC được cho phép, mỗi khi ADC10 hoàn thành việc biến đổi và lưu kết quả vào thanh ghi ADC10MEM thì việc chuyển giao dữ liệu được kích hoạt. Mỗi DTC yêu cầu một CPU MCLK. Không được sử dụng các bus có dữ liệu mà DTC truyền vào để tránh xung đột,nên để CPU ngừng chạy. DTC không được khởi tạo khi ADC10 đang bận.
Nếu bit ADC10CT được thiết lập thì chế độ DCT sẽ không dừng lại sau khi hoàn thành chuyển giao,mà sẽ reset và quay lại chuyển đổi trong chu kỳ mới.Ngược lại DCT sẽ dừng sau khi hoàn tất chu kỳ chuyển đổi.

8.1. Chế độ chuyển giao 1 khối

Được kích hoạt khi Bit ADC10TB Reset. Giá trị n trong ADC10TC1 xác định số lương chuyển giao cho một khối. Địa chỉ bắt đầu của khối là thanh ghi 16 Bit ADC10SA. Địa chỉ kết thúc là ADC10SA + 2n – 2.
Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống băng 0. Khi sử dung DTC trong chế độ chuyển giao một khối thì cờ ADC10IFG được Set sau mỗi khối được chuyển giao hoàn thành.

8.2. Chế đội chuyển giao 2 khối

          Được chọn khi Bit ADC10TB được Set. Giá trị n trong ADC10TC1 xác định số chuyển giao trong một khối. Địa chỉ đầu tiên trong thanh ghi ADC10SA. Địa chỉ kết thúc của khối đầu tiên là ADC10SA + 2n – 2. Dãy địa chỉ của khối thứ 2 được xác định từ SA + 2n đến SA + 4n – 2. Địa chỉ con trỏ bên trong được khởi tạo bằng ADC10SA và bộ đếm chuyển giao được khởi tạo bằng ‘n’. DTC chuyển giao giá trị từ ADC10MEM sang địa chỉ con trỏ ADC10SA. Sau mỗi lần chuyển giao thì địa chỉ con trỏ tăng 2 và bộ đếm giảm 1. DTC tiếp tục chuyển giao từ ADC10MEM cho đến khi bộ đếm giảm xuống bằng 0. Ở thời điểm này, khối thứ nhất đầy, cờ ADC10IFG và Bit ADC10B1 thì được Set. DTC tiếp tục với khối 2. Bộ đếm chuyển giao bên trong tự động nạp lại giá trị n. DTC bắt đầu chuyển kết quả biến đổi từ ADC10MEM sang khối 2. Sau n lần chuyển giao hoàn thành thì khối 2 đầy. Cờ ADC10IFG Set, Bit ADC10B1 được clear.

8.3. Chu ký thời gian chuyển đổi DCT



9. Ngắt ADC10

        Một ngắt và một véc tơ ngắt được ghép với ADC10. Khi DTC không được sử dụng ( ADC10DTC1= 0), ADC10IFG được Set khi kết quả biến đổi A-D được tải xuống ADC10MEM. Khi DTC được sử dụng ( ADC10DTC1 > 0), ADC10IFG được Set khi sự chuyển giao một khối được hoàn thành và bộ đếm chuyển giao bằng 0. Nếu cả hai Bit ADC10IE và GIE được Set,ADC10IFG sẽ sinh ra một ngắt yêu cầu. Cờ ADC10IFG tự động Reset khi ngắt yêu cầu được duy trì hoặc có thể được Reset bằng phần mềm. 

10. Tập thanh ghi

         ADC10 của MSP430 có rất nhiều thanh ghi điều khiển,để xem chi tiết các bạn đọc thêm trong datasheet,ở đây mình không tiện liệt kê toàn bộ.

11. Lập trình

           Các chế độ hoạt động của ADC10 rất phức tạp,nên rất khó viết thư viện ADC hoàn chỉnh , dưới đây mình thực hiện thử 2 đoạn chương trình đó là đọc ADC ở chế độ đơn kênh và chế độ đơn kênh lặp lại.
      Trong ví dụ này mình sẽ thực hiện đọc điện áp ở chân A0 và điện áp VCC/2 dùng điện áp tham chiếu nội 2.5V .Các bạn có thể nối 1 biến trở có đầu xoay nối với chân A0 ,2 đầu còn lại nối VCC và GND trên Kit
Bắt đầu các bạn nên viết hàm khởi tạo cho ADC.Các cài đặt cần làm
-       Set bit ENC=0 thì mới có thể chỉnh sửa được thanh ghi ADC10CTL0 và ADC10CTL1
-       Chọn các chân Ax có chuyển đổi ADC (ADC10AE0),mục đích của việc này đế tách các chân này khỏi khối GPIO.
-       Chọn tần số lấy mẫu,bật module ADC10
-       Chọn điện áp tham chiếu.Cần chú ý bit SREFx.Phân biệt giá trị Vref+ là các điện áp tham chiếu nội ,trong khi Veref+ và Veref- là 2 chân điện áp tham chiếu ngoài(Xem Sơ đồ chân).Khi muốn dùng điện áp tham chiếu nội thì Vr+ phải được nối với Vref+(vì thế ta chọn SREF_1).Khi muốn dùng điện áp tham chiếu ngoài có thể chọn SREF_2.
-       Khi muốn dùng điện áp tham chiếu ngoài ở các chân Veref thì phải set REFOUT=1
-       Cuối cùng là bật ENC và ADC10ON để cho phép module hoạt động

Code tham khảo như sau:

#include "msp430g2553.h"
void main(void)
{
     P1DIR |= 0x01;
     ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
     ADC10CTL1 = INCH_1;
     ADC10AE0 |= 0x02;
     while(1)
     {
          ADC10CTL0 |= ENC _ADC10SC;
          while(ADC10CTL1&1);
          if(ADC10MEM < 0x88)
               P1OUT &=~ 0x01;
          else
               P1OUT |= 0x01;
     }
}

VIDEO HƯỚNG DẪN






Friday, March 27, 2015

ROBOT DẪN NGƯỜI QUA ĐƯỜNG


ROBOT DẪN NGƯỜI QUA ĐƯỜNGCập nhật: Thứ năm, 26/3/2015 - 8h10'(Cadn.com.vn)http://cadn.com.vn/news/137_129436_robot-dan-nguoi-qua-duong.aspx - Một nhóm sinh viên của Đại học Duy Tân (Đà Nẵng) vừa sáng tạo thành công chú robot dùng để dẫn người qua đường và máy cảnh báo phương tiện vi phạm giao thông. Robot sẽ được đặt ở các ngã tư  đường, bệnh viện, trường học nơi có đông trẻ nhỏ để dẫn các em qua đường.

                                             Thử nghiệm robot dẫn người qua đường.

       Qua tìm hiểu thực tế, Tín được biết trên thế giới chưa từng có robot dắt người qua đường, điều đó càng thôi thúc em quyết tâm làm hơn. Trong dịp Tết vừa rồi, Tín và 2 bạn cùng Khoa khác là Võ Thành Nghĩa, Hà Kim Tùng bắt tay vào các công đoạn đầu tiên để làm robot. Để làm ra chú robot thông minh, đáp ứng các yêu cầu ứng dụng thực tiễn để dẫn người qua đường đòi hỏi rất công phu, từ hình dáng thân thiện đến các chi tiết máy móc bên trong phải thật ổn định. Tín cho biết, sau khi bàn tính rất nhiều, cả nhóm mới quyết định cho robot đội mũ bảo hiểm, tay cầm gậy chỉ dẫn đường, mình mặc bộ quần áo xanh của Đoàn thanh niên.Chia sẻ về ý tưởng làm ra chú robot này, Nguyễn Công Tín, SV khoa Điện-Điện tử, ĐH Duy Tân kể, một lần vào TPHCM chơi thấy các bác xe ôm trong đó có một nghề khá "độc" là dẫn khách Tây qua đường. Do đặc thù đường sá đông đúc, nhiều loại phương tiện đi lại liên tục, du khách Tây không thể yên tâm tự băng qua đường một mình mà phải nhờ các bác xe ôm "thổ địa" dắt qua, chấp nhận bỏ ra mỗi lần 10-20 ngàn đồng. Từ hình ảnh ấy khiến Tín nảy ra ý định làm robot dắt người qua đường phục vụ miễn phí cho mọi người.        Chú robot cao 1,9m, tay phải cầm gậy dẫn đường giơ lên cao có hệ thống bóng đèn, còi hú để xin người tham gia giao thông nhường đường, còn tay trái dắt khách qua đường. Do được gắn hàng chục cảm biến, trong đó có những cảm biến siêu âm loại tiên tiến, có khả năng đọc tình huống và xử lý rất nhanh. Vì vậy, khi dẫn người qua đường, nếu thấy xe hoặc vật cản tới gần robot sẽ chủ động dừng lại chờ xe qua hoặc tăng tốc đi nhanh hơn, quay bánh lùi lại để tránh xe.
        Theo Võ Thành Nghĩa, chú robot này nhìn khá thân thiện, đặc biệt lời nói được cài đặt rất lịch sự. Robot được đặt bên đường, nơi có nhiều người thường xuyên qua đường như trước trường học, bệnh viện, chợ... Khi có người tới gần robot khoảng 1,5m, nó sẽ nói: "Tôi là robot dắt người qua đường. Mời bạn ấn nút khởi động, tôi sẽ dắt bạn qua đường". Sau đó, người qua đường chỉ việc nhấn nút, Robot sẽ dẫn họ qua bên kia đường. Khi tới đích, nó sẽ nói lời tạm biệt rồi quay về vị trí xuất phát. Tùy theo bề rộng của mỗi tuyến đường, nhưng thường thì mỗi lần sang đường, robot sẽ hoạt động trong 1,5 phút. Mỗi ngày, chú robot có thể hoạt động trên 70 lượt mới tiêu tốn hết năng lượng.






   Nhóm SV đang thử nghiệm robot và máy cảnh báo dừng xe sai vạch trước khi đưa ra đường hoạt động.      
        Trong quá trình làm robot, Nguyễn Công Tín chia sẻ khâu khó nhất là tạo sự nhanh nhẹn để robot phát hiện, xử lý ngay khi có xe đi tới. Bên cạnh đó, việc làm cho robot quay đầu trở lại cũng khiến cả nhóm loay hoay cả tuần. Cũng theo Tín, bên cạnh việc làm robot dẫn người qua đường, em còn cùng với nhóm SV khác là Phạm Hữu Cường, Mai Thị Quỳnh Hoa làm thành công máy cảnh báo dừng xe sai vạch.
        Chiếc máy này sẽ được đặt ở các cột đèn tín hiệu giao thông, khi phát hiện xe lấn vạch nó sẽ nhắc nhở, yêu cầu lùi lại. Bên cạnh đó, khi không "nhắc nhở" ai nó sẽ tuyên truyền ý thức tham gia giao thông với những câu khẩu hiệu "Có văn hóa giao thông là sống vì cộng đồng", "Thay đổi văn hóa giao thông bắt đầu từ chính bạn", "Bạn hãy là tấm gương cho con về ý thức tham gia giao thông"... Theo Quỳnh Hoa, hiện tại cả nhóm đang nghiên cứu để chiếc máy này ngoài tuyên truyền giao thông còn chụp biển số xe của các phương tiện vi phạm giao thông, như vượt đèn đỏ để làm cơ sở phục vụ cho lực lượng chức năng xử lý.
        Quỳnh Hoa cho biết thêm, thói quen lấn vạch đường, thiếu ý thức tham gia giao thông đã trở lên phổ biến, vì vậy việc tuyên truyền để mọi người tham gia giao thông có văn hóa thông qua những chiếc máy, robot này rất thiết thực. Ý tưởng của các bạn muốn góp phần nhỏ hưởng ứng chủ trương Năm văn hóa văn minh đô thị mà Đà Nẵng đang triển khai.
Vào cuối tháng 3 này, những sáng tạo này sẽ được Quận đoàn Hải Châu kiểm nghiệm thử, nếu đạt yêu cầu có thể sẽ được triển khai sớm trên các tuyến phố của Đà Nẵng.