Làm cách nào để đặt cầu chì tốc độ đồng hồ trên ATtiny85 khi sử dụng Arduino làm lập trình viên?


17

Tôi đang theo hướng dẫn này , lập trình ATtiny85 với Arduino, sử dụng nó để phát một số âm (thông qua loa piezo). Tôi đang vật lộn để có được các âm ở đúng độ cao (Tôi đang tạo các dạng sóng theo cách thủ công, vì chức năng âm () không được hỗ trợ trên ATtiny85).

Tôi tin rằng vấn đề có thể là do tốc độ xung nhịp khác nhau trên Arduino và ATtiny. Tôi hiểu tốc độ xung nhịp có thể được thay đổi trên ATtiny, làm thế nào để tôi thực hiện điều này bằng môi trường arduino?


bằng cách này là thực sự mát mẻ, cảm ơn vì đã chia sẻ!
Abbeyatcu

Ngả mũ! Tôi chưa bao giờ quản lý để lập trình attiny85 của mình theo cách này .. Tôi luôn có lỗi "lập trình viên không đồng bộ" khi cố gắng ghi flash. Trao đổi arduino với một tên cướp biển xe buýt hoạt động mặc dù ...
JonathanD

@Jon: Tôi không chắc chắn nguyên nhân sâu xa đằng sau việc "lập trình viên không đồng bộ", nhưng với AVR Studio, bạn có thể điều chỉnh tần số lập trình. Có thể có một tùy chọn tương tự trong avrdude, có thể đáng xem nếu bạn lại cho nó một lần nữa
Nick T

Câu trả lời:


2

Tôi tin rằng phần mềm Arduino (thư viện và tất cả) giả định rằng bạn đang hoạt động ở mức 16 MHz. Nếu bạn áp dụng giả định đó cho đồng hồ bạn đang thực sự chạy ... mọi thứ sẽ ổn. Giả sử bạn đang chạy Tiny85 trên bộ tạo dao động bên trong, tôi nghĩ rằng nó chạy ở tốc độ 1 MHz, vì vậy chỉ cần nhân tất cả các câu lệnh trì hoãn của bạn (và các khái niệm khác về thời gian) với 16.

Nếu bạn cần độ chính xác tốt hơn bộ tạo dao động bên trong, bạn nên nghĩ đến việc sử dụng tinh thể ngoài hoặc bộ cộng hưởng, nhưng bạn sẽ cần thay đổi cài đặt cầu chì của AVR để hoạt động và tôi nghĩ bạn sẽ cần một lập trình viên như AVRISP mkII để làm điều đó với AVR Studio (khuyến nghị của tôi).

Tôi không biết nhiều về bản phác thảo ArduinoISP nhưng với tôi có vẻ như nó đập vào giao thức ISP để tải chương trình lên chip mục tiêu (không phải trên Mega328), không chắc nó được trang bị để điều khiển cầu chì. ArduinoISP được ghi lại ở đây http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Lưu ý rằng hiện tại bạn không thể sử dụng UNO để chạy bản phác thảo ArduinoISP. Tôi không có vẻ như bạn có thể sử dụng bản phác thảo để biến Arduino thành một giao diện khả thi để sử dụng các công cụ GUI của Studio Studio.

EDIT : Có vẻ như mọi thứ đã bắt kịp và UNO hiện khả thi với ArduinoISP - cảm ơn vì tất cả các ý kiến


Cảm ơn những người đứng đầu về UNO, tôi thực sự đang sử dụng Duemilanove với chip 168 được hoán đổi cho một chiếc 328 và có thể lấy các bản phác thảo ATtiny bình thường để tải lên chính xác thông qua ArduinoISP. Tôi sẽ thử / 16 mẹo của bạn!
sợ hãi

@fearoffours Bạn biết một điều khác bạn có thể thử là viết một bản phác thảo dựa trên ArduinoISP, đặt các cầu chì thành một giá trị nhất định. Nếu ArduinoISP có thể viết Flash, không có lý do gì tôi có thể nghĩ rằng bạn không thể phá vỡ giao thức ISP được mô tả trong bảng dữ liệu AVR để đặt Cầu chì.
Abbeyatcu

1
@fearoffours, tôi cũng chỉ nhận ra (và cập nhật bưu điện) để nói nhân với 16 thay vì chia cho 16 (của bạn chạy chậm hơn một đồng hồ nó sẽ mất nhiều ve để có được cùng thời gian)
vicatcu

Tôi biết rằng hơn một năm sau, nhưng tôi đã sử dụng thành công và UNO là lập trình viên AVR. (Tuy nhiên, tôi đã thay đổi phác thảo ArduinoISP để delay(20)insted của delay(40)trong định nghĩa của nó void heartbeat().)
JellicleCat

Tôi biết thậm chí sau này nhưng tôi đã sử dụng thành công Uno của mình như một lập trình viên AVR mà không thay đổi bất cứ điều gì trong bản phác thảo.
ingh.am

4

Tôi đang sử dụng Arduino UNO + ArduinoISP thành công.

Thêm -Ucờ vào avrdudelệnh của bạn để đặt bất kỳ hoặc tất cả ba cầu chì ATtiny.

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

Việc lựa chọn đồng hồ được thực hiện theo bit [3: 0] trên cầu chì thứ ba ('Fuse Low Byte'). Đặt chúng như sau để sử dụng một tinh thể bên ngoài (8 MHz hoặc nhanh hơn):

-U lfuse:w:0x6f:m

Định nghĩa của nó (tôi suy ra) phải là một cái gì đó như: [Fuse Low Byte]: [write]: [hex value]: [đặt thủ công]

Giá trị mặc định cho bốn bit cao của byte này được 0110, vì vậy rời khỏi 6trong 0x6fnhư nó có, và chỉ thay đổi chữ số thứ hai, f(giá trị mặc định của nó là 2).

Lưu ý: Nếu các quy trình của bạn mất nhiều thời gian hơn hoặc ngắn hơn bạn mong đợi, hãy kiểm tra bộ đếm trước đồng hồ và định nghĩa của bạn về CPU F _ .


Tôi muốn cảnh báo rằng tôi vừa gạch AtTiny85 của mình bằng cách sử dụng -U lfuse:w:0x6f:mtùy chọn avrdude ở trên . Tôi sẽ cần phải thiết lập lại nó bằng cách sử dụng một thiết lập điện áp cao. Vì vậy, một lời cảnh báo cho những người (như bản thân tôi), những người đang cố gắng thiết lập lại cầu chì mà không biết họ đang làm gì.
MV

@MV Bạn có thực sự gạch nó hoặc đơn giản là không sử dụng XO bên ngoài khi cố gắng đặt lại cầu chì?
chết tiệt

Không có đồng hồ bên ngoài để sử dụng. Gạch có nghĩa là gì trong một ý nghĩa chặt chẽ hơn?
JellicleCat

@JellicleCat, Nếu bạn đặt cầu chì sử dụng XO bên ngoài, bạn sẽ cần sử dụng XO bên ngoài được gắn vào mcu từ đó trở đi để lập trình / đặt / đặt lại cầu chì. Không làm như vậy, sẽ cho bạn cảm giác mcu bị gạch (~ không hoạt động nữa) vì nó cần máy lẻ. XO hoạt động, ngay cả để lập trình thông qua ISP.
chết tiệt

Ổn thỏa. Nếu tôi hiểu được vấn đề, tôi đặt cầu chì để mong đợi XO, và sau đó để khôi phục chip, tôi đã sử dụng Arduino để cung cấp sóng đứng, phục vụ cho XO.
JellicleCat

3

Hãy thử sử dụng hướng dẫn liên quan của cùng một nhóm (Công nghệ cao thấp của MIT) có tên Lập trình ATtiny w / Arduino 1.0 .

Tóm tắt nhanh: Từ menu Công cụ-> Bảng trong Arduino IDE, chọn ATtiny85 và tần số bạn muốn chạy ở (đồng hồ bên trong 1 hoặc 8 Mhz hoặc tinh thể ngoài 20Mhz), sau đó sử dụng Công cụ -> Ghi bộ tải khởi động " . Tôi tin rằng việc chọn bảng tốc độ mong muốn sẽ điều chỉnh cách thức độ trễ () và các chức năng Arduino liên quan đến thời gian khác hoạt động để đồng bộ hóa với tốc độ xung nhịp.

Bản thân tôi đã thành công với cách tiếp cận này bằng cách sử dụng một số chip ATtiny84. Chương trình nhấp nháy đơn giản được cố định, cũng như thời gian nhạy hơn cần thiết để điều khiển các xung được gửi thủ công đến servo bằng cách sử dụng delayMicroseconds ().


1

Có vẻ như bạn đang sử dụng ArduinoISP, hãy thử sử dụng AVR Studio hoặc các tùy chọn dòng lệnh cho avrdude. Tùy thuộc vào cách viết ArduinoISP, nó có thể hoạt động giống như một mkII Atmel AVRISP hoặc tương tự.


Tôi không nghĩ Arduino tự nó là một lập trình viên ISP - Tôi nghĩ rằng nó có một tiêu đề ISP trên đó để bạn có thể ghi một bộ tải khởi động mới vào một ATMega328 mới trong mạch ...
Abbeyatcu

đọc bài viết kỹ hơn, có vẻ như bạn có thể sử dụng bản phác thảo ArduinoISP để làm điều này - bạn học được điều gì đó mới mỗi ngày! :)
Abbeyatcu

Phòng thu AVR vẫn ổn nếu bạn ở trên Windows. Biết rằng có một plugin AVR cho Eclipse (cái này khác với plugin Arduino được gọi là Sloeber). Có một cuộc đối thoại cầu chì tiện lợi có sẵn trong Thuộc tính -> AVR. Nhưng vâng, OP chỉ muốn sử dụng tần số "lõi" và "Burn Bootloader".
mckenzm

1

Cài đặt cầu chì mặc định cho ATtiny85 là: lfuse 0x62, hfuse 0xdf, efuse 0xff. Điều này sử dụng bộ dao động RC (8 MHz) bên trong với "chia cho 8" nên xung nhịp là 1 MHz.

Xem http://www.engbedded.com/fusecalc để biết thêm cài đặt cầu chì.

Bạn vẫn có thể sử dụng avrdude trực tiếp để thay đổi cài đặt cầu chì của ATtiny85 ngay cả khi sử dụng ArduinoISP làm lập trình viên.

Nếu bạn kết thúc việc thay đổi cầu chì theo cách thủ công để thay đổi đồng hồ, hãy nhớ chỉnh sửa attiny85.build.f_cpudòng [arduino_folder] \ phần cứng \ attiny45_85 \ board.txt.


+1 điều này thực sự hữu ích, đặc biệt là tốc độ xung nhịp là 1 MHz, cảm ơn
sợ hãi vào

0

Tôi nghĩ rằng bạn có thể thiết lập các cầu chì với ArduinoISP, nhưng không phải với Arduino IDE mà với avrdude, hãy kiểm tra liên kết này . Không bao giờ tự kiểm tra nó.

Hướng dẫn nói rõ ràng rằng bạn có thể sử dụng Arduino UNO và tôi đã thử nghiệm và làm việc, vì vậy tôi có thể xác nhận điều đó, vì vậy trang ArduinoISP đã lỗi thời và cảnh báo UNO nên được bỏ qua. Nếu UNO của bạn là một trong đợt đầu tiên bạn có thể có bộ tải khởi động bị lỗi, bạn sẽ cần phải khởi động lại bộ tải khởi động. Kiểm tra trang này để biết thêm thông tin (bỏ qua các số sê-ri, tất cả các UNO của tôi không nằm trong chuỗi đó và có vấn đề).

Các thư viện lõi được chuyển mà bạn đã tải xuống từ hướng dẫn được viết để sử dụng bộ tạo dao động nội bộ 1 MHz (được xác nhận từ tệp Board.txt), do đó, có thể vấn đề hẹn giờ có thể nằm trong các thư viện lõi được chuyển hoặc trong mã của bạn.

Trân trọng


0
  1. Chọn một bảng ATTiny từ "người quản lý bảng" bao gồm ATTiny85. Đây là trong Menu "Công cụ". Tôi nghĩ rằng điều này bao gồm "PLL nội bộ 16 MHz" bây giờ. (Bạn có thể cài đặt một từ http://drazzy.com/package_drazzy.com_index.json )

  2. Chọn ATTiny85 rõ ràng nếu được yêu cầu.

  3. Chọn đồng hồ. Cho đến khi bạn biết nhiều hơn, chọn một đồng hồ nội bộ .

  4. Nhấp vào "Burn Bootloader" làm Mục menu.

Lưu ý, bạn có thể không còn có thể lập trình MCU nếu bạn chọn các giá trị rất thấp. Nếu đây là ý định của bạn, hãy thực hiện việc này sau cùng trừ khi bạn có phụ tùng hoặc Lập trình viên điện áp cao để đặt lại cầu chì.

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.