Arduino를 프로그래머로 사용할 때 ATtiny85에서 클럭 속도 퓨즈를 설정하는 방법은 무엇입니까?


17

튜토리얼을 따르고 , Arduino로 ATtiny85를 프로그래밍하고 (피에조 스피커를 통해) 일부 톤을 연주하는 데 사용합니다. 올바른 피치로 톤을 얻는 데 어려움을 겪고 있습니다 (ATtiny85에서 tone () 함수가 지원되지 않기 때문에 수동으로 파형을 생성하고 있습니다).

문제는 Arduino와 ATtiny의 클럭 속도가 다를 수 있다고 생각합니다. ATtiny에서 클럭 속도가 변경 될 수 있음을 이해합니다. arduino 환경을 사용하여이를 달성하려면 어떻게해야합니까?


그건 그렇고 이것은 정말 멋지다, 공유 주셔서 감사합니다!
vicatcu

오프 모자! attiny85를 이런 식으로 프로그래밍하지 못했습니다. avrdude가 플래시를 쓰려고 할 때 항상 "동기화되지 않은 프로그래머"오류가 발생합니다. 버스 해적과 arduino를 바꾸는 것은 작동하지만 ...
JonathanD

@ 존 : "동기화되지 않은 프로그래머"의 근본 원인은 확실하지 않지만 AVR Studio를 사용하면 프로그래밍 빈도를 조정할 수 있습니다. avrdude에도 비슷한 옵션이있을 수 있습니다. 다시 한번 소용돌이를 주면 가치가 있습니다.
Nick T

답변:


2

Arduino 소프트웨어 (라이브러리 및 모두)는 16MHz에서 작동한다고 가정합니다. 그 가정을 실제로 시계에 적용하면 문제가 해결됩니다. 내부 발진기에서 Tiny85를 실행한다고 가정하면 1MHz에서 실행된다고 생각하므로 모든 지연 설명 (및 기타 시간 개념)에 16을 곱하십시오.

내부 발진기가 제공하는 것보다 더 나은 정확도가 필요한 경우 외부 크리스털 또는 공진기 사용에 대해 생각해야하지만 작동하려면 AVR의 퓨즈 설정을 변경해야합니다. 그러면 AVRISP와 같은 프로그래머가 필요합니다. mkII는 AVR Studio (내 권장 사항)로 그렇게합니다.

ArduinoISP 스케치에 대해 많이 알지 못하지만 ISP 프로토콜을 강타하여 프로그램을 대상 칩 (Mega328이 아닌)에 업로드하기 위해 퓨즈를 조작 할 수 있는지 확실하지 않은 것처럼 보입니다. ArduinoISP는 http://arduino.cc/en/Tutorial/ArduinoISP 에 있습니다. ArduinoISP 스케치를 실행하기 위해 현재 UNO를 사용할 수는 없습니다. 스케치를 사용하여 Arduino를 AVR Studio GUI 도구를 사용하기위한 실용적인 인터페이스로 만들 수있는 것처럼 보이지 않습니다.

편집 : 그것은 물건이 따라 잡힌 것처럼 보이고 UNO는 ArduinoISP에 현재 가능합니다-모든 의견 주셔서 감사합니다


UNO에 대한 책임에 감사드립니다. 저는 실제로 168 칩을 328 칩으로 교체 한 Duemilanove를 사용하고 있으며 ArduinoISP를 통해 정상적인 ATtiny 스케치를 올바로 업로드 할 수 있습니다. 나는 당신의 / 16 팁을 시도 할 것입니다!
fearoffours

@fearoffours 당신이 시도 할 수있는 또 다른 것은 퓨즈를 특정 값으로 설정하는 ArduinoISP를 기반으로 스케치를 작성하는 것입니다. ArduinoISP가 Flash를 작성할 수 있다면, AVR 데이터 시트에 설명 된 ISP 프로토콜을 퓨즈로 설정하기 위해 비트 뱅을 할 수 없었을 이유가 없습니다.
vicatcu

1
@fearoffours도 그냥 실현 (및 업데이트 게시물) (당신은 같은 시간을 얻기 위해 좀 더 걸릴 것 느린 클럭 틱 실행) (16)에 의해 곱셈 대신 분할의 16에 의해 말
vicatcu

1 년이 지난 지금도 알고 있지만 AVR 프로그래머로 UNO를 성공적으로 사용하고 있습니다. (그러나, 나는에 ArduinoISP 스케치 변경 한 delay(20)의 insted delay(40)의 그것의 정의를 void heartbeat().)
JellicleCat

나는 그것이 나중에 있음을 알고 있지만 스케치에서 아무것도 변경하지 않고 Uno를 AVR 프로그래머로 성공적으로 사용했습니다.
ingh.am

4

Arduino UNO + ArduinoISP를 성공적으로 사용하고 있습니다.

세 개의 ATtiny 퓨즈 중 하나 또는 모두를 설정 -U하려면 avrdude명령에 플래그를 추가하십시오 .

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

클럭 선택은 세 번째 퓨즈의 비트 [3 : 0] ( '퓨즈 로우 바이트')로 수행됩니다. 외부 수정 (8MHz 이상)을 사용하려면 다음과 같이 설정하십시오.

-U lfuse:w:0x6f:m

그 정의 (추론)는 다음과 같아야합니다. [Fuse Low Byte] : [write] : [hex value] : [수동으로 설정]

이 바이트의 상위 4 비트의 디폴트 값이되어 0110있으므로두고 60x6f그대로, 오직 제 자리을 변경 f(디폴트 값이다 2).

주의 : 프로세스가 예상보다 오래 걸리거나 더 짧은 경우 클럭 프리스케일러와 F _ CPU 정의를 확인하십시오 .


위의 -U lfuse:w:0x6f:mavrdude 옵션 을 사용하여 AtTiny85를 벽돌로 만들었습니다 . 고전압 설정을 사용하여 재설정해야합니다. 따라서 자신이하는 일을 모른 채 퓨즈를 재설정하려고하는 사람들 (나 같은 사람)에게주의해야 할 말.
MV

@MV 퓨즈를 재설정하려고 할 때 실제로 차단했거나 외부 XO를 사용하지 않았습니까?
DAMD

사용할 외부 시계가 없습니다. 더 엄격한 의미에서 벽돌은 무엇을 의미합니까?
JellicleCat

@JellicleCat, 외부 XO를 사용하도록 퓨즈를 설정 한 경우에는 퓨즈를 프로그래밍 / 설정 / 재설정하기 위해 mcu에 연결된 외부 XO를 사용해야합니다. 그렇게하지 않으면, 내선이 필요하기 때문에 mcu가 벽돌처럼 된 느낌을줍니다 (~ 더 이상 작동하지 않음). ISP를 통해 프로그래밍 할 경우에도 XO가 작동합니다.
DAMD

좋구나. 문제를 이해하면 퓨즈가 XO를 기대하도록 설정 한 다음 칩을 복원하기 위해 Arduino를 사용하여 XO를 위해 정재파를 공급했습니다.
JellicleCat

3

같은 그룹 (MIT의 High-Low Tech) 에서 Artinino 1.0으로 프로그래밍하는 ATtiny 라는 제목의 관련 튜토리얼을 사용해보십시오 .

간단한 요약 : Arduino IDE의 Tools (도구)-> Board (보드) 메뉴에서 ATtiny85와 실행할 주파수 (1 또는 8Mhz 내부 클럭 또는 20Mhz 외부 크리스탈)를 선택한 다음 Tools (도구)-> Burn Bootloader "를 사용하십시오. 원하는 속도 보드를 선택하면 지연 () 및 기타 시간 관련 Arduino 기능이 클럭 속도와 동기화되도록 작동하는 방식이 수정된다고 생각합니다.

ATtiny84 칩을 사용하여이 방법으로 성공했습니다. 간단한 깜박임 프로그램은 고정되어 있으며 delayMicroseconds ()를 사용하여 서보로 전송되는 펄스를 수동으로 제어하는 ​​데 필요한보다 민감한 타이밍입니다.


1

ArduinoISP를 사용하고있는 것 같습니다. AVR Studio 또는에 대한 명령 줄 옵션을 사용해보십시오 avrdude. ArduinoISP 작성 방식에 따라 Atmel AVRISP mkII 또는 이와 유사한 기능을 수행 할 수 있습니다.


나는 Arduino 자체가 ISP 프로그래머라고 생각하지 않았다. ISP 헤더가있어서 새로운 부트 로더를 새로운 ATMega328에 회로에 태울 수 있다고 생각했다.
vicatcu

기사를 더 자세히 읽으면 ArduinoISP 스케치를 사용 하여이 작업을 수행 할 수있는 것처럼 보입니다. 매일 새로운 것을 배우십시오! :)
vicatcu

Windows를 사용하는 경우 AVR studio는 정상입니다. Eclipse 용 AVR 플러그인이 있습니다 (이것은 Sloeber로 알려진 Arduino 플러그인과 다릅니다). 속성-> AVR 아래에 멋진 퓨즈 대화 상자가 있습니다. 그러나 OP는 단지 "핵심"주파수와 "버닝 부트 로더"를 사용하려고합니다.
mckenzm

1

ATtiny85의 기본 퓨즈 설정은 lfuse 0x62, hfuse 0xdf, efuse 0xff입니다. 이것은 "8로 나누기"가있는 내부 RC (8MHz) 오실레이터를 사용하므로 클럭은 1MHz입니다.

더 많은 퓨즈 설정에 대해서는 http://www.engbedded.com/fusecalc 를 참조 하십시오 .

프로그래머로 ArduinoISP를 사용하는 경우에도 avrdude를 직접 사용하여 ATtiny85의 퓨즈 설정을 변경할 수 있습니다.

시계를 변경하기 위해 퓨즈를 수동으로 변경하는 경우 반드시 attiny85.build.f_cpu[arduino_folder] \ hardware \ attiny45_85 \ boards.txt 파일 의 라인 을 편집 하십시오.


+1 이것은 정말 유용합니다. 특히 클럭 속도가 1MHz입니다. 덕분에
08 초

0

ArduinoISP로 퓨즈를 설정할 수 있지만 Arduino IDE가 아니라 avrdude로 퓨즈를 설정할 수 있다고 생각하면 이 링크를 확인하십시오 . 직접 테스트하지 마십시오.

이 튜토리얼에서는 Arduino UNO를 사용할 수 있다고 명시했으며 테스트했으며 작동 했으므로 ArduinoISP 페이지가 오래되어 UNO 경고를 무시해야 함을 확인할 수 있습니다. UNO가 첫 번째 배치에서 나온 것일 경우 부트 로더에 결함이있을 수 있습니다. 부트 로더를 다시 플래시해야합니다. 자세한 내용은 이 페이지 를 확인 하십시오 (일련 번호는 무시하고 모든 UNO는 해당 시리즈의 것이 아니며 문제가있었습니다).

자습서에서 다운로드 한 이식 된 코어 라이브러리는 1MHz 내부 발진기 (boards.txt 파일에서 확인)를 사용하도록 작성되었으므로 이식 된 코어 라이브러리 또는 코드에 타이밍 문제가있을 수 있습니다.

친절한 안부


0
  1. ATTiny85가 포함 된 "보드 관리자"에서 ATTiny 보드를 선택하십시오. "도구"메뉴에 있습니다. 여기에는 현재 "16MHz 내부 PLL"이 포함되어 있다고 생각합니다. ( http://drazzy.com/package_drazzy.com_index.json 에서 설치할 수 있습니다 )

  2. 필요한 경우 ATTiny85를 명시 적으로 선택하십시오.

  3. 시계를 선택하십시오. 더 알기 전까지는 내부 시계를 선택하십시오 .

  4. 메뉴 항목으로 "Burn Bootloader"를 클릭하십시오.

매우 낮은 값을 선택하면 더 이상 MCU를 프로그래밍하지 못할 수 있습니다. 이것이 의도라면, 퓨즈를 재설정 할 예비 또는 고전압 프로그래머가없는 한이 방법을 사용하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.