이 튜토리얼을 따르고 , Arduino로 ATtiny85를 프로그래밍하고 (피에조 스피커를 통해) 일부 톤을 연주하는 데 사용합니다. 올바른 피치로 톤을 얻는 데 어려움을 겪고 있습니다 (ATtiny85에서 tone () 함수가 지원되지 않기 때문에 수동으로 파형을 생성하고 있습니다).
문제는 Arduino와 ATtiny의 클럭 속도가 다를 수 있다고 생각합니다. ATtiny에서 클럭 속도가 변경 될 수 있음을 이해합니다. arduino 환경을 사용하여이를 달성하려면 어떻게해야합니까?
답변
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에 현재 가능합니다-모든 의견 주셔서 감사합니다
답변
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
있으므로두고 6
에 0x6f
그대로, 오직 제 자리을 변경 f
(디폴트 값이다 2
).
주의 : 프로세스가 예상보다 오래 걸리거나 더 짧은 경우 클럭 프리스케일러와 F _ CPU 정의를 확인하십시오 .
답변
같은 그룹 (MIT의 High-Low Tech) 에서 Artinino 1.0으로 프로그래밍하는 ATtiny 라는 제목의 관련 튜토리얼을 사용해보십시오 .
간단한 요약 : Arduino IDE의 Tools (도구)-> Board (보드) 메뉴에서 ATtiny85와 실행할 주파수 (1 또는 8Mhz 내부 클럭 또는 20Mhz 외부 크리스탈)를 선택한 다음 Tools (도구)-> Burn Bootloader “를 사용하십시오. 원하는 속도 보드를 선택하면 지연 () 및 기타 시간 관련 Arduino 기능이 클럭 속도와 동기화되도록 작동하는 방식이 수정된다고 생각합니다.
ATtiny84 칩을 사용하여이 방법으로 성공했습니다. 간단한 깜박임 프로그램은 고정되어 있으며 delayMicroseconds ()를 사용하여 서보로 전송되는 펄스를 수동으로 제어하는 데 필요한보다 민감한 타이밍입니다.
답변
ArduinoISP를 사용하고있는 것 같습니다. AVR Studio 또는에 대한 명령 줄 옵션을 사용해보십시오 avrdude
. ArduinoISP 작성 방식에 따라 Atmel AVRISP mkII 또는 이와 유사한 기능을 수행 할 수 있습니다.
답변
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 파일 의 라인 을 편집 하십시오.
답변
ArduinoISP로 퓨즈를 설정할 수 있지만 Arduino IDE가 아니라 avrdude로 퓨즈를 설정할 수 있다고 생각하면 이 링크를 확인하십시오 . 직접 테스트하지 마십시오.
이 튜토리얼에서는 Arduino UNO를 사용할 수 있다고 명시했으며 테스트했으며 작동 했으므로 ArduinoISP 페이지가 오래되어 UNO 경고를 무시해야 함을 확인할 수 있습니다. UNO가 첫 번째 배치에서 나온 것일 경우 부트 로더에 결함이있을 수 있습니다. 부트 로더를 다시 플래시해야합니다. 자세한 내용은 이 페이지 를 확인 하십시오 (일련 번호는 무시하고 모든 UNO는 해당 시리즈의 것이 아니며 문제가있었습니다).
자습서에서 다운로드 한 이식 된 코어 라이브러리는 1MHz 내부 발진기 (boards.txt 파일에서 확인)를 사용하도록 작성되었으므로 이식 된 코어 라이브러리 또는 코드에 타이밍 문제가있을 수 있습니다.
친절한 안부
답변
-
ATTiny85가 포함 된 “보드 관리자”에서 ATTiny 보드를 선택하십시오. “도구”메뉴에 있습니다. 여기에는 현재 “16MHz 내부 PLL”이 포함되어 있다고 생각합니다. ( http://drazzy.com/package_drazzy.com_index.json 에서 설치할 수 있습니다 )
-
필요한 경우 ATTiny85를 명시 적으로 선택하십시오.
-
시계를 선택하십시오. 더 알기 전까지는 내부 시계를 선택하십시오 .
-
메뉴 항목으로 “Burn Bootloader”를 클릭하십시오.
매우 낮은 값을 선택하면 더 이상 MCU를 프로그래밍하지 못할 수 있습니다. 이것이 의도라면, 퓨즈를 재설정 할 예비 또는 고전압 프로그래머가없는 한이 방법을 사용하십시오.