Lập trình ATmega328 với bộ tải khởi động Arduino thông qua bộ chuyển đổi nối tiếp USB FTDI


7

Tôi muốn lời khuyên của bạn liên quan đến việc sử dụng Arduino IDE và sẵn sàng lập trình ATmega328 được cài đặt sẵn bộ tải khởi động Arduino. Tôi đang sử dụng bảng đột phá nối tiếp USB sang TTL dựa trên chip FTDI.

Tôi đã mua một "Trình tải xuống chương trình cơ bản FTDI USB sang TTL FT232 cho Arduino ACC" từ ebay

FTDI USB sang TTL F1232

Tôi đã làm theo chính xác thiết lập này:

  1. Kết nối chân DTR với chân 1 trên ATmega thông qua tụ 0,1uF.

  2. Kết nối chân RX với chân 3 trên ATmega (TX)

  3. Kết nối chân TX với chân 2 trên ATmega (RX)

  4. Kết nối chân 5V với đường ray 5V của bo mạch để cung cấp nguồn cho bo mạch từ giao diện USB.

  5. Kết nối chân GND với đường ray GND của bảng

Thiết lập( từ hướng dẫn được tuân theo )

Khi tôi thử tải lên một bản phác thảo, tôi nhận được cậu bé hư này:

avrdude: stk500_getsync(): not in sync: resp=0x00

Đây là những gì tôi đã cố gắng cho đến nay:

Kết nối các chân tiêu đề của "lá chắn" Arduino với chip trên bảng mạch. Để làm như vậy tôi đang sử dụng ATmega16U2 trên tàu để gửi chương trình. Kết quả: Hoàn mỹ! chương trình khởi động và mọi người đều hạnh phúc.

Quay lại bảng đột phá FTDI. Chuyển đổi RX và TX (không bao giờ biết?) Vẫn không có gì nên chuyển về cấu hình TX - RX ban đầu.

Chân DTR ra khỏi bảng FTDI đang thiết lập lại thành công ATmega328 vì nó đi qua chuỗi nhấp nháy kỳ diệu của nó khi tôi cố gắng tải lên một cái gì đó.

Bây giờ, tôi đã thử nghiệm xem ATmega328 có thể gửi thông tin nối tiếp qua bảng đột phá tới máy tính hay không. Nó có thể.

Tôi đã nhận thấy một vài điều thú vị:

Cả hai dòng TX và RX luôn ở mức 5 V. Tôi biết điều này bởi vì nếu tôi kết nối một đèn LED song song với các dòng, chúng sẽ sáng lên. Nhưng, các đèn LED nhỏ bé trên bảng đột phá có nhãn TX và RX không phải lúc nào cũng bật ... tại sao vậy? Điều đó có thể giải thích vấn đề của tôi?

Nếu bạn muốn biết thêm thông tin, hãy cho tôi biết, tôi sẽ lấy nó cho bạn.

---------------------------------------------BIÊN TẬP---- --------------------------------------

Xin chào lần nữa,

OK Tôi đã thêm một tụ điện điện phân 100uF cùng với một tụ điện 0,1uF giữa 5v và GND. Đây không phải là 47uF và 0.1uF được đề xuất nhưng tôi đoán nó sẽ giúp lọc ra ít hơn. (trong khi tại nó. Nó sẽ thay đổi những gì?)

Tôi đã thay thế điện trở kéo lên 1k của mình bằng điện trở 10k

Tôi vẫn không thể tải lên một bản phác thảo và nhận được cùng một lỗi. Dòng DTR gọi thiết lập lại và tôi vẫn nhận được đầu ra nối tiếp. (Tôi có một bản phác thảo về nó gửi các số nguyên tăng dần qua nối tiếp mỗi giây)

Cũng thật thú vị, (mặc dù tôi vẫn không thể gửi một bản phác thảo trước khi điều này xảy ra) bất kỳ đèn LED nào tôi cắm ở chân 13 (còn gọi là 19) hiện mờ hơn nhiều ... có lẽ đèn LED trắng sáng mà tôi đã sử dụng trước đó đã bị kéo theo nhiều dòng một người bán lại 270 ohm ... -_-)

Đối với nhu cầu phổ biến ở đây là hình ảnh bảng của tôi và bảng đột phá USB sang FTDI tôi đang sử dụng.

Bảng đột phá

Bánh mì của tôi - hình ảnh 1

Bánh mì của tôi - hình 2


TX và RX thường được kéo (hoặc điều khiển) cao. Tôi không nghĩ vấn đề của bạn là ở đó ...
bitsmack

Bất kỳ lý do cụ thể bạn đã đi với lập trình nối tiếp thay vì ISP?
Ignacio Vazquez-Abrams

1
Để mở rộng nhận xét của bitsmack: Các dòng TX và RX sẽ mặc định ở mức cao và xung thấp cho dữ liệu. Có thể được nhìn thấy trên một phạm vi, nhưng không phải trên một mét. Bạn có thể thấy nó nếu bạn kết nối một điện trở LED + từ 5V đến TX hoặc RX (cực dương đến 5V). Các bảng đột phá TX và đèn RX không được nối trực tiếp với dây TX / RX thực tế.
gwideman

1
Ignacio: Tôi tin rằng khả năng ISP của bo mạch này chỉ là một điểm dừng - tôi nghĩ rằng sử dụng bitbang. Đây không phải là I / O SPI thích hợp. Ngoài ra, lập trình thông qua bộ nạp khởi động cũng tránh vô tình lập trình những thứ mà ISP có thể lập trình thường là ngoài ý muốn.
gwideman

Dù sao, thêm một điện trở cho những
đèn

Câu trả lời:


8

Vài gợi ý:

Nhìn vào bức tranh bạn dường như đang theo dõi ở đây:

nhập mô tả hình ảnh ở đây

Gần như chắc chắn có một lỗi sẽ khiến Reset không hoạt động như mong đợi.

Tôi nghĩ rằng mạch Reset được cho là bắt chước mạch trong một Arduino thực tế, có DTR được kết nối thông qua một tụ điện 100nF (0,1uF) tới / RESET (pin 1). Sơ đồ Arduino thực tế (ví dụ: Deumilanove) hiển thị điện trở pullup 10k từ chân 1 đến + 5V. Điều này sẽ buộc / RESET trở nên được xác nhận lại trong một thời gian ngắn sau khi được DTR khẳng định sẽ xuống thấp.

Tuy nhiên, trên bảng mạch trong ảnh, điện trở 10k được kết nối với đầu sai của nắp, gắn vào DTR. Điều này sẽ không có hiệu lực và có nghĩa là phục hồi / RESET sẽ chỉ do pullup được xây dựng, có giá trị cao hơn như 30 đến 60k, và do đó sẽ mất gấp 3 đến 6 lần để thiết lập lại, và sẽ dễ bị tiếng ồn hơn.

Di chuyển pullup điện trở 10k sang chân 1 có thể giải quyết vấn đề hoàn toàn.

Một điều nữa cần kiểm tra là liệu có thực sự lấy được 5V ra khỏi chân 5V trên bộ chuyển đổi FTDI hay không. Nhiều bảng trong số đó đi kèm với các tiêu đề nhảy hoặc các miếng nhảy không bán được để cho phép bạn nối chân "Hết nguồn" với bộ điều chỉnh 5V hoặc 3,3V trên chip FTDI.

Và thêm các điện trở (giả sử 330 đến 1k) nối tiếp với mỗi đèn LED của bạn để tránh gây ra quá tải. Ảnh xuất hiện để hiển thị một đèn LED có dây trực tiếp trên 5V-Gnd và một đèn khác từ Vcc đến D13. Cái đầu tiên bởi tất cả các quyền sẽ bị đốt cháy ngay lập tức hoặc gây ra một số sự tàn phá khác. Tuy nhiên, có thể đây là những đèn LED với điện trở nối tiếp.

Cũng sẽ tốt hơn nếu thêm các tụ 0,1uF và 47uF song song trên Gnd và VCC gần 328, để cung cấp cho nó một nguồn cung cấp sạch.


Các đèn LED trong phiên bản có độ phân giải cao hơn của bức ảnh đó dường như có các điện trở được hàn vào chúng dưới ống co nhiệt màu đỏ.
RedGrittyBrick

À, đúng rồi, bức ảnh đầu tiên với tấm bảng hoàn thành một phần cho thấy rõ hơn điều đó. Cảm ơn đã chỉ ra rằng. Mặc dù rất dễ gây hiểu lầm cho "cầu thủ trẻ"!
gwideman

Cảm ơn đã giúp đỡ. Tôi đã có điện trở cho đèn led trên bảng của tôi. Ya, xin lỗi vì đã không đăng bảng thực tế của tôi, không có máy ảnh trên tôi tại thời điểm tôi đăng. Tôi thậm chí không nhận thấy tụ điện không được nối dây không phù hợp trên hình ảnh! Điều đó nói rằng, ban đầu tôi đã xem sơ đồ arduino thực tế vì vậy tôi biết không đặt nắp nối tiếp với nút kết nối điện trở pullup và cap-DTR, nhưng, tôi đã sử dụng điện trở kéo lên 1k, sau đó 10k. Có thể đó là vấn đề? Ill kiểm tra nó ra. và thêm mũ cho GND và VCC. Cảm ơn một lần nữa.
Ethienne

Vui lòng gửi một bản phác thảo về những gì bạn thực sự đã làm, bởi vì nó không rõ ràng từ mô tả bằng lời nói của bạn rằng những gì bạn đã làm là hoàn toàn khả thi.
gwideman

Yup, sẽ làm ngay lúc tôi có một chút thời gian rảnh. nếu việc sửa chữa không hiệu quả
Ethienne

7

Tôi cũng đã đến đây vì ATmega328 độc lập, đã tải của tôi không muốn tải chương trình của tôi và đã đưa ra lỗi đó. Tôi đã giải quyết tình huống của mình và muốn chia sẻ nó để có thể nó sẽ giúp đỡ người khác.

Điều cuối cùng hóa ra là vấn đề là chip ATmega328 không được 'nhấp chuột' đúng cách trong bảng điều khiển. Tuy nhiên, khi tôi đặt chip ATmega ban đầu trực tiếp lên bảng, nó phát ra âm thanh 'click'. Nó thực sự có vẻ như là đúng, không lỏng lẻo, không thể đi sâu hơn, sẽ không rơi ra khi bạn lắc nó lên, v.v. Nhưng khi tôi thử tải một chương trình, tôi nhận được thông báo avrdude.

Trong khi tải lên một số chân đang nhấp nháy, ngay cả đèn LED tôi đã nối với chân 19 (chân 13 trên bảng Arduino). Tôi đã mua bánh mì ở Hà Lan, vì vậy tôi không thể nói đó có phải là tiếng Trung Quốc hay không, nhưng rõ ràng nó cũng có một số đầu nối sâu và khó kết nối với các chân của chip DIP. May mắn thay, tôi đã có một ổ cắm chip (IC socket 28 Pin DIP) mà tôi đặt giữa chip ATmega và bánh mì. Vấn đề của tôi ngay lập tức được giải quyết, và hạnh phúc trở lại.

Tôi đã sử dụng một FTDI cơ bản để lập trình nó, gần như chính xác như hình ảnh trong liên kết của Gwideman đã đưa ra ở trên. Chỉ có điện trở kéo lên của RESET được kết nối sai trong hình đó. Giống như Gwideman quy định chính xác, điện trở cần phải đi đến chân 1, và không đến phía DTR của nắp.

Trong Arduino IDE tôi đã chọn 'Arduino Uno'.

Hy vọng nó sẽ giúp được ai đó.


Chào mừng đến với EE.stackexchange! Bạn đã viết một câu trả lời giải thích tốt đẹp, tiếp tục công việc tốt!
WalyKu

1

Tôi đã có một vấn đề rất giống nhau và nó đã được gây ra bởi các kết nối tệ hại trên bảng mạch của tôi giữa nắp gốm DTR --- 0.1uF của FTDI --- RESET của AtMega328p.

Vấn đề đã được giải quyết khi tôi luồn dây điện nam vào cùng lỗ với chân của nắp, để kết nối mạnh hơn. Tôi đã có thể tải lên bản phác thảo, nhưng nó vẫn không đáng tin cậy lắm. Khi tôi trao đổi nắp 0,1uF cho nắp gốm 10uF, nó dường như đã khắc phục hoàn toàn vấn đề.

EDIT: Một vấn đề khác gây ra hành vi tương tự là sử dụng mô-đun "Bộ bảo vệ quá dòng USB" giữa máy tính xách tay của tôi và mô-đun FTDI. Vì vậy, tôi đã ngừng sử dụng nó mặc dù máy tính xách tay trước đây của tôi đã bị đốt cháy bởi một trong những điều ước của tôi: o (Cùng với một bản phác thảo tải lên bánh mì chặt chẽ hơn hoạt động như một bùa mê.

DTR, nắp và đặt lại trên bảng


0

Điều duy nhất tôi có thể nghĩ đến khi tôi gặp lỗi này, đó là bảng sai được chọn trong Arduino IDE. Bạn có thể cần phải chọn một bảng sử dụng atmega328p.


Tôi đã chọn UNO.
Ethienne

0

Tôi đến đây để tìm câu trả lời cho một vấn đề rất giống (dường như giống hệt nhau) - 382P trong Breadboard, đã có bộ nạp khởi động & mã trên đó nhưng không đáp ứng với các nỗ lực lập trình thông qua một đột phá FTDI 'rẻ tiền' - mặc dù thiết lập lại có vẻ đang hoạt động . Nhiều khả năng khác nhau cho lỗi.

Sau khi xác minh mạch của tôi giống nhau và kiểm tra lại thiết lập IDE của tôi, câu trả lời của matthijs đã kích hoạt một ý nghĩ - Tôi đã chọn "Arduino Uno" trong menu Board, vì vậy có lẽ IDE (hoặc avrdude) đã cố gắng tiếp cận ATmega16u2 Uno (bản thân nó đang mô phỏng stk500 IIRC). Từ những nỗ lực của tôi (cuối cùng đã thành công) để khởi động bộ tải khởi động trước đó thông qua một nhà tài trợ Uno tôi đã tải xuống một cấu hình Board "Atmega328 trên Breadboard" - mà tôi đã thử và nó đã hoạt động. Các cấu hình khác của Uno Board như "Arduino Nano w / ATmega328" và "Duemilanove w / ATmega238" cũng hoạt động.


0

Bây giờ bạn có thể mua các lập trình viên USPasp cho chip atmega và Arduinos với giá 5 đô la. Họ kết nối với cổng lập trình pin ICSP 6 trên Arduinos nhưng có kết nối 10 pin cho các thiết bị khác, như một máy atmega trần mà bạn có ở đây.

Phần mềm Arduino hỗ trợ các lập trình viên USPasp, do đó, rất nhiều lập trình viên phần 3. Chúng rất giống với bộ chuyển đổi USB-TTL, nhưng chúng được thiết kế rõ ràng để lập trình chip trần và mạch điện bằng phần mềm phổ biến. Xem:

http://www.ebay.co.uk/itm/131743272473

Tôi đã mua một cái để flash lại một bản sao Arduino Mega 2560 được biết là có thời gian theo dõi xấu. Các hình ảnh HEX sau này khắc phục điều đó, nhưng bạn phải sử dụng cổng lập trình CPU 6pin trên Arduino.

liên quan đến Paul BSc Elec Eng


0

Tôi đã đáp ứng câu trả lời StackExchange này để tìm giải pháp cho cùng một vấn đề. Tôi đã học được rất nhiều từ việc đọc tất cả các câu trả lời, nhưng không ai trong số họ xuất hiện để giải quyết trường hợp của tôi. Cuối cùng, tôi đã khắc phục vấn đề và nghĩ đến việc chia sẻ giải pháp.

Tôi đã mua một bộ tụ điện AVR 328P + pha lê + 22pf trên Amazon dưới dạng "bộ công cụ Arduino barebone" để dùng thử. Nhà cung cấp tuyên bố rằng AVR sẽ được cài đặt "bộ nạp khởi động arduino" không xác định.

Tôi kết hợp các mạch với nhau sau một vài ví dụ và các bit của tài liệu được tìm thấy về cách lập trình một AVR bằng cách sử dụng đột phá FTDI. Tôi đã sử dụng các bảng FTDI trước đây để lập trình thành công một số Ưu điểm Nano trước đây vì vậy tôi gần như biết những gì mong đợi.

Sau khi kết nối FTDI và kết nối với USB, từ đó, AVR cũng đang hoạt động, tôi đã thêm thiết lập đèn LED chính tắc vào D13 ở cuối và, lo và kìa, nó bắt đầu nhấp nháy quen thuộc. Hóa ra nhà cung cấp đã flash trước AVR với bản demo Blink. Con chip dường như được đặt chính xác và hoạt động như mong đợi.

Tôi đã kích hoạt Arduino IDE và tải bản demo Blink. Nếu họ có thể làm điều đó, thì tôi có thể, phải không?

Không. Cho dù tôi đã cố gắng thế nào, tôi cũng không thể tải chương trình lên AVR với bất kỳ sự kết hợp nào giữa các lựa chọn bảng / lập trình viên. Ba kiểm tra tất cả các kết nối, googled xung quanh, tìm thấy câu hỏi này, thử tất cả các giải pháp, không có gì. avrdude có thể bắt đầu, đặt lại chip một cách chính xác (tôi có thể thấy nó từ mẫu nhấp nháy), cố gắng gửi dữ liệu (đèn led FTDI tx nhấp nháy) nhưng tải lên

Tại thời điểm này, tôi bắt đầu tự hỏi liệu bộ tải khởi động đã hết hạn, vì vậy đã đi đến tùy chọn hạt nhân:

  • đã tải mẫu ArduinoISP vào Arduino IDE
  • kết nối một Arduino dự phòng được sử dụng làm lập trình viên
  • không ghi chú "#define USE_OLD_STYLE_WIRING"
  • có dây D11, D12, D13 đến D11, D12 D13 của chip AVR trần
  • D10 có dây của lập trình viên đến chân Reset của chip AVR
  • thêm điện trở kéo lên 10Kohm vào V + tại chân Reset
  • đã tải lên ArduinoISP cho "lập trình viên"
  • đã chọn "Công cụ / Lập trình viên" -> "Arduino là ISP"
  • vượt qua những ngón tay của tôi
  • nhấn "Burn Bootloader"

Việc "bắt chéo ngón tay" của tôi hẳn đã hoạt động, bởi vì avrdude rất vui và con chip không còn nhấp nháy nữa - có nghĩa là ít nhất tôi đã có thể tải lên một cái gì đó và có khả năng không có gì sai với chip và hệ thống dây điện, ngay cả khi nó có nghĩa là rằng tôi đã gạch chip.

Tôi chỉ phải thử lại, vì vậy tôi đã gỡ "lập trình viên" từ AVR, quay trở lại mẫu "Blink", tải lên sau khi chọn bảng "Arduino / Genuino Uno", và, yay!, Có ánh sáng vui vẻ!

Vì vậy, tất cả trong tất cả nó không phải là khó khăn. Tất cả những gì tôi phải làm là vượt qua những ngón tay của mình đúng lúc.

Có rất nhiều sơ đồ và bài viết về cách flash bộ nạp khởi động vào một bộ vi xử lý trần bằng cách sử dụng "Arduino là ISP", đây là một trong những điều tôi thấy hữu ích:

Chạy Atmega328 ở chế độ độc lập không có Arduino Shield


0

ive nhận thấy rằng 328 và 328p trong avr dude được công nhận là các chip khác nhau, hãy chỉnh sửa avrdude.conf cho 328p và thêm chữ ký này thay vì 0x1e 0x95 0x14


-1

Bạn cần một nắp 10uf được kết nối với pin reset và DTR. Dưới đây là một ví dụ hoạt động về cách bạn nên được kết nối:

3 mũ khác là 22pF

Bộ tải khởi động ATmega328 FTDI


1
Vui lòng xóa hoặc viết lại bài đăng hoàn toàn không chính xác này chỉ có thể khiến độc giả thất vọng. Một tụ điện lớn giữa thiết lập lại và mặt đất sẽ ngăn chặn mạch thiết lập lại tự động vào bộ nạp khởi động. Cũng không phải là những gì hình ảnh này bạn đang sử dụng cho thấy - nó hiển thị một tụ điện giữa DTR và thiết lập lại. Hơn nữa, 22pf là không đủ để bỏ qua nguồn cung.
Chris Stratton

1
Không, nó không chính xác! Vấn đề với bài đăng của bạn là bạn chỉ định "nắp 10uf được kết nối với pin đặt lại và nối đất" NÀY KHÔNG BỊ XÓA . Vị trí chính xác cho tụ điện nằm giữa DTR và thiết lập lại, nhưng đó không phải là những gì bạn đã đăng. Ngoài ra, 22pf thực sự giống như không có tụ điện bỏ qua năng lượng - nó vẫn có thể hoạt động, nhưng nó không phải là thiết kế âm thanh. Bạn cần phải loại bỏ kết hợp, không chính xác, nhận xét về câu hỏi, quá.
Chris Stratton

1
Bạn vẫn đang đưa ra một khuyến nghị sai lầm về bỏ qua cung cấp. Chúng tôi đề cập đến các sự kiện kỹ thuật ở đây - không thành vấn đề nếu bạn có ý tưởng đó từ nơi khác, nó vẫn sai.
Chris Stratton

1
Sự hiểu lầm cơ bản rõ ràng của bạn về bỏ qua tụ điện là điều bạn có thể sửa chữa với bất kỳ tài liệu tham khảo nào về chủ đề này. Không có gì để "trò chuyện" về đây.
Chris Stratton

1
Nếu bạn nhìn vào các nắp bypass C4, C5, C6, C7 trên thiết kế tham chiếu mà bạn liên kết đến chúng là 100nF chứ không phải 22pF.
Pete Kirkham
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.