Lập trình nhúng nên học 8051 trước hay Arduino?

Mình không nói 8051 tuyệt chủng nhé. Nên việc nó còn được sản xuất không nói lên nó đang phát triển.
Mình cũng đã dung từ đa phần vì biết rằng kiểu gì cũng có người sẽ đem silabs ra dẫn chứng.
Những tính năng bạn liệt kê cho 8051 thì chip bây giờ đều có. Nhưng khả năng chống nhiễu ( cái rất quan trọng thì đa phần 8051 đều xịt.
Nay Atmel đã về chung nhà với Microchip, bạn cứ thử so sánh 2 sản phẩm cùng nhà xem nhé.

3 Likes

Nếu câu hỏi là như Title là Học Lập Trình Nhúng thì câu trả lời là 8051.
Không phải tự dưng mà mình nói như vậy. Hồi mới vào công ty 1 trainer với 20 năm làm Embedded và Training bên Đức qua ông nói chốt ngay 1 câu. The best board to learn Embedded is 8051 kind of Board.
Lý do :

  • Tập lệnh đơn giản : Nên phải viết nhiều , dùng tay chân nhiều -> Dẫn đến hiểu nhiều.
  • Hardware nghèo nàn : Dẫn đến việc cần học cách kết nối ngoại vi nhiều
  • Công nghệ đơn giản : Không bị nhiễu thông tin --> giỏi cơ bản. Tập trung vào 1 cái.
  • Bắt đầu đơn giản : Vạn sự khởi đầu nan nhưng nếu khởi đầu đơn giản thì càng tốt.
    Chốt : 8051.
7 Likes

Học thì học từ con 8051 , tận dụng những cái mà 8051 có thì lập trình con này thấy tập lệnh ít , thanh ghi ít , phù hợp người mới học . Giống như học lập trình bất cứ cái gì vậy , mới làm quen thì phải từ helloword ,I/O … còn mấy cái nâng cao chưa cần thiết , phải hình thành đc tư duy lập trình đối với 1 con chip như thế nào đã . 8051 phù hợp với việc này . Sau khi vọc xong 8051 thì qua mấy con như Avr hay Pic… đỡ hơn rất nhiều , lúc này có thể lập trình thêm các ngoại vi tích hợp trên nó , dù gì khi học 8051 thì khái niệm giao tiếp ngoại vi mìn thấy cũng có chứ ko phải ko . Làm xong mấy con này , có nền rồi muốn chơi qua adruino cũng chẳng sao ,mình thì ko thích adruino lắm , sau làm project thực tế thì mua Avr hay pic , arm chứ ít ai mua 8051

1 Like

Đừng học 8051 hay con gì trước Arduino.
Vì khi học xong mấy cái đó bạn ếu bao giờ muốn dùng Arduino nữa :))

Chào mọi người. Các bạn đều nói theo quan điểm của dân nghề vậy các bạn có quan tâm đến đa số dân trái nghề mà họ yêu thích môn lập trình không. Chúng tôi còn chưa định nghĩa được thế nào là xung, thế nào là xuất tín hiệu cơ bản nên để học các cái cao cấp quá thì chịu. Qua tìm hiểu các thông tin trên mạng và trực quan từ các kít arduino nó giúp cho những người trái nghề nhưng đam mê như chúng tôi hình dung được thế nào là điều khiển, thế nào là hiển thị… Tôi nghĩ arduino sẽ là cái căn bản để chúng tôi đi tiếp chặng tiếp theo cao hơn đấy các bạn.

1 Like

Mình bên điện tử quen với xung xiếc và tự học để lập trình các kiểu thì không có lý gì các bên khác không làm được. Ảnh hưởng đến học lập trình chủ yếu là độ lười muốn nằm ngửa ăn sẵn. Arduino phục vụ cho nhu cầu nằm ngửa ăn sẵn đó.:))

4 Likes

Hi mọi người.
Mình không phải dân nhúng. Tuy nhiên theo ý kiến chủ quan của mình thì trước khi định làm gì thì cũng cần xác định mục tiêu cần hướng tới là gì.
1 Nếu chỉ học nhúng như một thú vui làm mấy thiết bị tự động oto đèn dóm các kiểu thì bắt đầu với arduino là một lựa chọn hợp lý không phải quan tâm nhiều các vấn đề phức tạp kiểu như bạn không cần quan tâm khi nào mặt trời khi nào tắt.
2 Nếu là người học nhúng như một phần của cuộc sống thì không quan tâm vì sớm muộn gì cũng học qua nó.

3 Likes

Bạn nhận định rất đúng.
Nếu làm chơi, định hướng làm amateur thì gì cũng được.
Nếu xác định cơm cháo, nghề cứng, thì xem xét cho kỹ.

1 Like

Em là sinh viên CNTT. Nhưng đang học về nhúng, cụ thể là dòng STM32F4-DISC.
Thật sự là rất khó khăn, vì ngay cả chân nối đất, khác nhau giữa vi xử lý và vi điều khiển… em đều chưa biết. Và gần như là đề cập đến lần đầu.
Anh chị nào có kinh nghiệm từ CNTT -> Embedded thì chia sẻ cho em cách học và hướng đi với ạ.
Tks.

Bạn mới ở bước khởi đầu. Khi qua bước này mọi thứ sẽ dễ dàng. Học STM32 là đúng hướng rồi

Theo mình từ CNTT sang embedded nên chọn embedded linux, vì kiến thức điện tử yếu nếu lao vào embedded cho vdk sẽ phải học thêm rất nhiều thứ về điện tử nữa

Nghe bác Duong_Act nói về Arduino mà buồn cười, như kiểu ếch ngồi đáy giếng ấy, vì:
1/ Arduino là avr nên học avr ngon hơn Arduino và học Arduino chỉ dừng lại ở Arduino còn học AVR thì đia xa hơn, xin phản bác lại như sau:

  • Arduino không phải là avr, thời gian đầu thì đúng là vậy. Nhưng bây giờ thì khác hẳn. Vì sao? ngoài avr ra arduino còn có dòng SAM 32 bit của atmel, esp8266, esp32, stm32, máy tính nhúng…Nghĩa là sao?
  • Nghĩa là với một dòng code arduino, bạn có thể chay trên đa nền tảng, từ 8 bit avr cho đến 32 bit SAM atmel, stm32, esp8266, thậm chí cả máy tính nhúng Arduino YUN, intel galileo. Có thể nói Arduino là java trong thế giới nhúng. Điều này chắc chắn AVR không thể làm được.
  • Code một lần chạy mọi nơi khoái hơn hay là học avr cho đã, muốn chuyển sang 32 bit lại phải học lại từ đầu, rồi chuyển sang 32 bit của thằng khác cũng lại từ đầu tiếp, rồi cao hơn là chạy trên máy tính nhúng cũng lại từ đầu?
  • Học avr chỉ dừng lại ở avr nhưng học arduino thì không có điểm dừng.Đó là câu tui phản bác lại
  • Những gì avr làm được thì arduino làm được, nhưng những gì arduino làm được thì avr bó tay. Như đã nói ở trên code chạy trên máy tính nhúng với bộ nhớ hàng Gbyte, avr có con nào được nổi 1 mbyte chưa?
  • Lúc này bác Duong sẽ nói: Ớ máy tinh1nhung1 với 32 bit thì liên quan gì? Xin thưa nó là arduino đó bác ạ. Bác cứ nghĩ arduino là avr thì đó là do bác nông cạn nên nghĩ vậy, ếch ngồi đáy giếng, ráng chịu. Cũng do dòng arduino avr gái rẽ nhiều người dùng nên dễ ngộ nhận.
1 Like

2/ Học arduino nó không hỗ trợ thì sao? rồi nào là dọn ăn sẵn nhiều quá. Xin phản bác lại luận điểm này của bác Dương luôn:

  • Không có chuyện nó không hỗ trợ nhé, nó luôn và sẽ hỗ trợ, mọi ý tưởng cần thiết của bạn đều sẽ luôn được hỗ trợ. Đội ngũ arduino gồm hàng trăm kỹ sư, giáo sư chuyên nghiệp luôn đi trước chúng ta một cái đầu, nên đừng lo là chúng ta sẽ khôn họ, không có đâu… Nhắc lại luôn luôn được hỗ trợ, không có chuyện lỡ như gì cả.
  • Khoan đã, avr cũng có đội ngũ hỗ trợ vậy. Đúng nhưng không bằng arduino, như đã nói avr có thì arduino có, nhưng arduino có thì avr never.
  • Thêm nữa, có những thư viện arduino hỗ trợ, mà chắc chắn bạn có dành cả đời cũng không thể viết được cái thư viện đó. Ví dụ bác Duong đi, một cao thủ đây, nhưng tôi đảm bảo có những thư viện arduino mà có 10 bác Duong cũng không viết được nhá. Vậy nếu nói như bác Duong khuyên học avr, khi tôi cần một thư viện với tính năng như vậy mà tui biết chăc chắn tui không bao giờ viết được vậy thì bó tay à?
  • Và khi đã viết xong thư viện đó cho avr rồi, mất hàng năm trời rồi. Bỗng dưng đối tác bỗng nổi hứng yêu cầu chạy qua 32 bit thì cái thư viện đó bỏ à? Lại viết lại từ đầu à?
  • Nói vậy là sao? Nghĩa là khi ta chọn học arduino nghĩa là ta đã có một công cụ cực mạnh mà avr chỉ là con nít.
  • Arduino là java của thế giới nhúng.
2 Likes
  • Bác Duong có suy nghĩ khi mình sử dụng cái gì đó của người ta thì mình sẽ thua họ. Không có đâu bác ơi, bác vẫn dùng hoài đấy chứ. Ví dụ với lập trình window đi, tôi đố bác với ngôn ngư C , bác viết cho tôi cái giao diện cửa sổ window xem nào. Hay là bác lại dùng thư viện mà theo bác là “dọn ăn sẵn” kéo rê chuột vẽ vài cái.
  • Lúc bác dùng thư viện kéo chuột vẽ giao diện cửa sổ, bác có cảm thấy sợ họ sẽ không hỗ trợ không? Và còn rất nhiều thư viện mà có huy động hết các trường đại học ở VN cũng không viết được. Vậy lúc đó bác có dùng không? hay sợ ăn sẵn, mà bác bỏ hàng thế kỷ công viết lại từ đầu (nếu bác sống đến từng đó).
  • Còn về việc arduino luôn đi với board mạch . Xin thưa cái board đó để làm nguyên mẫu, hoặc để nạp chip thôi. Ta vẫn có thể dùng vi điều khiển rời mà. AVR dùng vđk rời được thì arduino dùng rời cũng được. Riêng mình toàn mua chip trắng về rồi dùng board arduino nạp. Sau đó hàn chip vô mạch ứng dụng chả khác gì avr. Thế là đã xóa tan suy nghĩ của bác Duong về việc board với chip nhé,.
  • Lâu lâu buồn lấy dòng code đó nạp vô con stm32 lại có hệ thống 32 bit, oai như ai, mà chẳng mất chút sức nào cả.
  • Không phải ngẫu nhiên mà arduino trở nên lớn mạnh vậy đâu. Dạo quanh các diễn đàn lớn toàn thấy cao thủ avr chuyển qua arduino hết.
  • Kết luận: nên học arduino, theo mình nó là java của thế giới nhúng. Hãy đứng trên vai của những người khổng lồ.
1 Like

Đọc xong chỉ biết cười không biết nói gì hơn :smile:
Đúng là tôi đang ngồi đáy giếng thật.

2 Likes

E sẽ khuyên học arduino không phải vì lí do phía trên mà vì nó dễ. Sau khi có những kiến thức cơ bản rồi thì đam mê sẽ quyết định học những chip kia vì nó mạnh mẽ và đơn giản hơn arduino. |hứng chịu gạch đá|

Em không phải người học nhúng nên không biết, chỉ học arduino cho vui thôi mà giờ lại muốn chuyển dần sang mấy cái kia :stuck_out_tongue:
có gì sai a nhắc nhở :smiley:

1 Like
  • Diễn đàn chỉ cho đăng 3 comment nên tui phải lập nick khác để tiếp tục với bác Duong, tui cố gắng trong 3 comment này làm rõ vấn đề với bác Duong vây::
    1/ 32 bit SAM, STM32, là Arduino từ khi nào à? Từ khi bác ở trong giếng quá lâu chứ sao nữa.
    Bác tưởng Arduino chỉ là AVR mới gọi là Arduino? “Arduino AVR” đó là dòng giá rẻ của Arduino, thông dụng nhất, phổ biến nhất. Còn bác Duong là thầy bói mù, sờ được cái đuôi con voi thì lại nghĩ đấy là cả con voi cơ đấy.
  • Cũng do “Aruino AVR” phổ biến nên rất nhiều người nghĩ Arduino là “AVR biến hình”, không đáng để tâm ,vậy thì thà học AVR sướng hơn. Sai lấm và mọi tranh cãi xuất phát từ đây.
  • Arduino còn có dòng STM32 bit, gọi là “Arduino STM32”. “Arduino SAM 32 bit” với các dòng mkr, Due, M0, Zero vv…, “Arduino ESP8266”, "máy tính nhúng “Arduino YUN”, “Arduino TIAN”, máy tính nhúng nền tảng Arduino “intelGalile”. Và còn nhiều nữa mà tui chưa có dịp thưởng thức.
  • Tất cả những thứ đó mới được gọi là Arduino. Bác nói đến Arduinoi là phải nói như vậy, không ai đi sờ cái đuôi voi “AVR” rồi kêu nó là cả con voi “arduino” như bác cả, đó gọi là ếch ngồi đáng giếng.
  • Arduino là một hệ sinh thái trải dài từ 8 bit đến 32 bit và các các máy tính nhúng 64 bit. Bác biết được điều này thì mới gọi là Arduino. Khi định nghĩa về arduino đã rõ ràng thì AVR chỉ là con nít.
  • Một dòng code Arduino có thể chạy từ 8 bit đến 32 bit và các máy tính nhúng 64 bit. Và nó chạy trên đa nền tảng, đa thiết bị, đa tập đoàn từ Atmel, ST, Intel, ESP…V V .Do đó tui mới gọi Arduino là Java của các hệ thống nhúng. Còn code của AVR thì chỉ chạy trên AVR, quá tệ nếu đem so với Arduino.
  • Thêm nữa, ESP8266 là một chip SOC 32bit, thường được dùng làm module wifi. Nếu dùng “AVR thần thánh của bác” thì bác phải tốn thêm con MCU AVR để kết nối với ESP8266. Nhưng với Arduino bác có thể biến nó thành một vi điều khiển lập trình được với chức năng wifi. Và chỉ cần 1 con ESP8266 là đủ. Nghĩa là có thể xây dựng một hệ thống wifi siêu rẻ chỉ với 1 con chip ESP8266 duy nhất (nếu dùng Arduino), lúc này gọi là “Arduino ESP 8266” . Nếu dùng AVR. phải thêm một con MCU rời để giao tiếp với ESP8266, lúc này hệ thống của bác sẽ là 1 con MCU AVR+1 con ESP8266, quá dư thừa lãng phí.
  • AVR không có tuổi so với Arduino.
1 Like

Tôi cũng định comment từng ý của cậu nhưng có những phát biểu của cậu làm tôi đắn đo.

Tôi đang băn khoăn là không biết cậu có kiểm soát được những phát biểu đó không ? Hay cậu là một điển hình về những tác động tiêu cực mà arduino đem lại đúng với những gì tôi nói.

Hình như trong nhận thức của cậu thì thế giới nhúng với MCU chỉ có Arduino, trong đó vài con chip chọn làm board mà Arduino support là tất cả.
Năm 2012 board Arduino 32 bit đầu tiên ra đời thì trước đó những con MCU lõi ARM Cortext M STM32Fxxxx và những người dùng STM32 với Keil ARM, IAR hay Gcc + CMSIS không làm được như những gì cậu đang thần thánh với Arduino STM32 hay sao ??
Ngay cả AVR hay STM32 cậu cũng không biết nó có những gì thì phải.
Thế nên mới có những phát biểu động trời như vậy ???

Phát biểu của cậu chả khác gì :
Học Java là đứng trên vai người khổng lồ. C/C++ toàn là đồ vứt đi.

4 Likes
  • Bác Duong hơi bị lạc đề rồi đấy. Tư tưởng hơi bị áp đặt người khác rồi đấy.
    1/ Câu hỏi của chủ đề là “học lập trình nhúng nên học gì”. Nhấn mạnh “học lập trình nhúng”, tức là học phát triển ứng dụng nhúng. Không phải chủ đề là “học vi điều khiển gì”. Nếu chủ đề là nên học vi điều khiển gì, thì tôi không tham gia, vì nếu tôi nói STM thì sẽ có người cãi là SAM hay TIVA vvv… nói chung đủ thứ. Và rõ ràng với câu hỏi “học vi điều khiển gì” thì arduino vứt đi, vì rõ ràng arduino đâu phải vi điều khiển. Và như tui đã định nghĩa Arduino là một hệ sinh thái nhúng cực rộng, cực mạnh.
  • Nhưng với câu hỏi quá rõ ràng như trên “học lập trình nhúng” thì tui có thể nói rằng Arduino.
  • AVR là gì thì tui biết có thể nói là khá đủ để không thua ai, mà cũng không quá nhiều để dạy ai, biết xài mọi thứ ngoại vi mà AVR có, nói chung đủ dùng. STM cũng tương tự thế. Chính vì vậy nên khi biết tới Arduino thì tui mới ngộ ra được điều những điều sau:
    1/ Thoải mái phát triển code nguồn, không lo sợ phụ thuộc vào phần cứng MCU của bất kỳ thằng nào.
    2/ Với code nguồn đó, tui có thể chạy với bất cứ nền tảng nào đã được hỗ trợ “core arduino”, khá rộng đấy (STM32, SAM, Intel, ESP8266, ESP32…VV). Mà gần như là không cần phải sửa gì cả
    3/ Arduino là xu hướng của nhúng, vì sao. Khi arduino ra đời cũng là lúc truyển tải thông điệp rằng phần mềm đã làm chủ luôn đám phần cứng mà trước đây mỗi thằng mỗi kiểu. VD: digitalWrite (9,HIGH) là tui kêu chân số 9 sáng lên, thằng nào được quy định chân số 9 thì thằng đó sáng, không cần biết nó là MCU mấy bit, của hãng nào, có thanh ghi gì, làm việc ra sao, không đáp ứng được dòng code trên thì biến. Đó là tương lai của lập trình nhúng.
  • Cũng giống như Máy vi tính vậy thôi, Tui có API quản lý phần cứng này, phần cứng nào đáp ứng thì tui xài, không thì biến. Tui không sửa API mà chính phần cứng phải thay đổi để phù hợp với tui.
  • Phần mềm lên ngôi là thế đó, hành trình ngồi set mấy cái thanh ghi tẻ nhạt có lẽ sẽ nhanh chóng qua thôi.
  • Trong thế giới nhúng, từ quan niệm phần mềm phải thay đổi theo phần cứng. Nay đã trở thành phần cứng phải thay đổi theo phần mềm. Phần cứng nào không đáp ứng sẽ bị đào thải.
  • Có thể ngay lúc này vẫn chưa thấy rõ, tương lai sẽ là như vậy.
  • Cụ thể Arduino STM32 là do chính thằng ST hiểu được điều này đã chủ động viết “core arduino” cho STM tự động biến STM của nó thành một phần của hệ sinh thái arduino mà arduino không cần phải làm gì cả.
  • Và ngay cả ông trùm Intel cũng hiểu được thông điệp của Arduino nên tự liên hệ với Arduino để phát triển các “core arduino” cho phần cứng của mình.
  • Với Arduino bạn sẽ có thông điệp tuyệt vời này: Các anh làm phần cứng đừng có lộn xộn, hãy thay đổi để thích nghi tôi chứ không phải tôi thay đổi để thích nghi các anh.
  • Rõ ràng là các MCU đơn lẻ không cần arduino vẫn là các hệ thống nhúng cực mạnh, không thể phủ nhận.
  • Kết luận vậy: Những bạn nào học lập trình nhúng có thể tham khảo:
  • Bạn thích viết code một lần chạy nhiều nơi hay là cứ phải thay đổi hoài?
  • Bạn thích phần mềm thay đổi theo phần cứng hay ngược lại?
  • Bạn có thể viết ra code phần mềm nhưng không thể làm phần cứng MCU, vậy, bạn muốn quá trình là người làm phần cứng MCU đào thải bạn hay bạn chính là người đào thải phần cứng đó?
  • Bạn thích ngồi mày mò mấy cái thanh ghị hay chỉ đơn giản digitalWrie?
  • bạn thích tiếp cận với kho thư viện khổng lồ lên đến hàng ngàn, thậm chí hàng chục ngàn của arduino hay tự viết thư viện giống bác Duong?
  • Bạn đã chán với việc viết hệ thống nhúng bằng các mã code, bạn muốn thay đổi, lập trình nhúng bằng đồ họa kéo thả không? Theo tôi biết thì hiện giờ chỉ có duy nhất arduino có chức năng hỗ trợ đièu đó.
  • Bạn có thích tiếp cận các mã nguồn mở các dự án khủng như Mày in 3D, CNC, robot, IOT vv…?
  • Nếu trả lời là có tất cả thì ok, cứ Arduino mà táng, một lựa chọn tuyệt vời
1 Like

Tôi sẽ không bàn luận nhiều về tương lai của Arduino mà bạn nêu ra. Vì cái đó không phải bạn là người đầu tiên nói với tôi. Tôi đã nghe nhiều lần cách đây tầm 7-8 năm về trước. Có lẽ tôi sẽ chờ thêm xem trong 5 năm tới điều đó có thành sự thật như bạn nói không ? Nếu nó xảy ra thì tôi thay đổi quan điểm cũng chưa muộn.

Cái đoạn code mà chạy chung cho 8/16/32 bit không cần sửa. Nó đều là những đoạn code không liên quan đến cấu trúc / thanh ghi đặc biệt trên MCU. Cái này đâu mỗi Arduino mới có ? C không có hay sao ???
Những đoạn code đụng đến cấu trúc / thanh ghi mà chạy được không cần sửa có mà phép màu. Mà người ta can thiệp vào thanh ghi làm gì ? Để tăng hiệu năng, để khai thác sức mạnh của MCU chứ để làm gì. Để một con MCU yếu sinh lý cũng có thể làm được việc tương đối chứ không phải dùng con MCU khủng mới làm nổi. Cậu lập trình không quan tâm đến perfomance à ??

Cậu thích dataWrite(PIN9,HIGH) ?
Tôi cũng đã dùng output_pin(PIN_A0,1) nhưng đã bỏ gần chục năm vì nó quá lởm. Hiện tại tôi đang dùng với C :
GPIO_IAI_ENABLE=ON;
Có khó hiểu hay khó viết quá không ?
Mà ngay CMSIS của ST cho STM32 cũng có GPIOWriteBit(PORT,PIN,LEVEL) thì phải (lâu không dùng). Đâu phải mỗi Arduino mới làm nổi điều đó ??

Lập trình được mà không làm nổi phần cứng ? Chả phải sự quá yếu kém bởi phần cứng cho MCU không quá khó ? Thế lấy phần cứng ở đâu ? Mua Arduino à ? Không phải sự lệ thuộc không lối thoát thì là gì nữa ? Đừng nói là đào thải phần cứng. Đấy là không có khả năng làm chủ nó mà thôi.

Còn lập trình kéo thả. Tôi có biết một ngôn ngữ tên FBD. Hoặc phần mềm cho biển quảng cáo LedImm do người Việt Nam viết. Có lẽ nó cũng giống ý tưởng kéo thả của cậu. Nhưng tôi hoài nghi nó với vi điều khiển. Tại sao họ làm vậy với vi điều khiển vốn tài nguyên ít ỏi mà không chọn kéo thả với FPGA chả phải ngon hơn và bậc hay sao?

Cậu có thể phân thích giúp máy in 3D , Robot, CNC … thì Ảduino làm gì trong đó và nó phức tạp đến mức nào để được bạn đánh giá là khủng ??

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?