Postępuję zgodnie z tym samouczkiem , programując ATtiny85 za pomocą Arduino, używając go do odtwarzania niektórych dźwięków (przez głośnik piezoelektryczny). Mam problem z ustawieniem tonów we właściwej wysokości (ręcznie tworzę kształty fal, ponieważ funkcja tone () nie jest obsługiwana w ATtiny85).
Uważam, że problem może wynikać z różnych częstotliwości taktowania w Arduino i ATtiny. Rozumiem, że szybkość zegara można zmienić w ATtiny, jak mogę to zrobić za pomocą środowiska Arduino?
arduino
attiny
fuse-bits
clock-speed
strach
źródło
źródło
Odpowiedzi:
Wierzę, że oprogramowanie Arduino (biblioteki i wszystkie) zakłada, że pracujesz z częstotliwością 16 MHz. Jeśli zastosujesz to założenie do zegara, na którym faktycznie biegniesz ... wszystko powinno się udać. Zakładając, że używasz Tiny85 na jego wewnętrznym oscylatorze, myślę, że działa on z częstotliwością 1 MHz, więc pomnóż wszystkie swoje instrukcje opóźnień (i inne pojęcia czasu) przez 16.
Jeśli potrzebujesz większej dokładności niż zapewnia wewnętrzny oscylator, powinieneś pomyśleć o użyciu zewnętrznego kryształu lub rezonatora, ale musisz zmienić ustawienia bezpiecznika AVR, aby działało, i myślę, że potrzebujesz programisty takiego jak AVRISP mkII zrobić to z AVR Studio (moja rekomendacja).
Nie wiem dużo o szkicu ArduinoISP, ale dla mnie wygląda na to, że trochę zahuczał protokół ISP, aby załadować program do docelowego układu (nie na pokładzie Mega328), nie jestem pewien, czy jest on przystosowany do manipulowania bezpiecznikami. ArduinoISP jest udokumentowany tutaj http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. Zauważ, że nie możesz obecnie używać UNO do uruchomienia szkicu ArduinoISP. Nie wygląda mi to na to, że można użyć szkicu, aby Arduino był realnym interfejsem do korzystania z narzędzi GUI AVR Studio.
EDYCJA : Wygląda na to, że coś nadrobiło zaległości, a UNO jest teraz realne dla ArduinoISP - dzięki za wszystkie komentarze
źródło
delay(20)
wprowadzić godelay(40)
w definicjivoid heartbeat()
.)Korzystam z Arduino UNO + ArduinoISP.
Dodaj
-U
flagi do swojegoavrdude
polecenia, aby ustawić jeden lub wszystkie trzy bezpieczniki ATtiny.Wyboru zegara dokonuje się w bitach [3: 0] trzeciego bezpiecznika („Fuse Low Byte”). Ustaw je w następujący sposób, aby użyć zewnętrznego kryształu (8 MHz lub szybszego):
Jego definicja (wnioskuję) musi być taka: [Fuse Low Byte]: [write]: [wartość hex]: [ustawiany ręcznie]
Domyślna wartość dla czterech wysokich bitów tego bajtu są
0110
, więc pozostawić6
w0x6f
jak to jest, i tylko zmienić drugą cyfrę,f
(jego wartość domyślna to2
).Uwaga: jeśli procesy trwają dłużej lub krócej niż się spodziewasz, sprawdź preskaler zegara i swoją definicję F _ CPU.
źródło
-U lfuse:w:0x6f:m
opcji avrdude. Będę musiał go zresetować za pomocą zestawu wysokiego napięcia. Więc słowo ostrzeżenia dla ludzi (takich jak ja), którzy próbują zresetować bezpieczniki, nie wiedząc, co robią.Spróbuj użyć pokrewnego samouczka tej samej grupy (High-Low Tech MIT) zatytułowanego Programowanie ATtiny w / Arduino 1.0 .
Szybkie podsumowanie: Z menu Narzędzia-> Płytka w Arduino IDE wybierz ATtiny85 i częstotliwość, na której chcesz pracować (zegar wewnętrzny 1 lub 8 MHz lub zewnętrzny kryształ 20 MHz), a następnie użyj Narzędzia -> Nagraj Bootloader ” Wierzę, że wybranie pożądanej płyty prędkości modyfikuje sposób działania opóźnienia () i innych funkcji Arduino związanych z czasem, aby zsynchronizować się z prędkością zegara.
Osiągnąłem sukces dzięki temu podejściu, używając kilku układów ATtiny84. Prosty program migania został naprawiony, a także bardziej czułe taktowanie wymagane do ręcznego sterowania impulsami wysyłanymi do serwomechanizmu za pomocą delayMicroseconds ().
źródło
Wygląda na to, że używasz ArduinoISP, spróbuj użyć AVR Studio lub opcji wiersza poleceń dla
avrdude
. W zależności od tego, jak został napisany ArduinoISP, może on działać podobnie jak Atmel AVRISP mkII lub podobny.źródło
Domyślne ustawienia bezpiecznika dla ATtiny85 to: lfuse 0x62, hfuse 0xdf, efuse 0xff. Wykorzystuje to wewnętrzny oscylator RC (8 MHz) z „dzieleniem przez 8”, więc zegar wynosi 1 MHz.
Więcej informacji na temat ustawień bezpieczników można znaleźć na stronie http://www.engbedded.com/fusecalc .
Nadal możesz używać avrdude bezpośrednio do zmiany ustawień bezpieczników ATtiny85, nawet gdy używasz ArduinoISP jako programatora.
Jeśli zmienisz ręcznie bezpiecznik w celu zmiany zegara, edytuj
attiny85.build.f_cpu
wiersz swojego pliku [arduino_folder] \ hardware \ attiny45_85 \ boards.txt.źródło
Myślę, że możesz ustawić bezpieczniki za pomocą ArduinoISP, ale nie Arduino IDE, ale avrdude, sprawdź ten link . Nigdy tego nie testowałem.
Samouczek wyraźnie mówi, że możesz używać Arduino UNO, a ja go przetestowałem i działałem, więc mogę to potwierdzić, więc strona ArduinoISP jest nieaktualna i ostrzeżenie UNO powinno zostać zignorowane. Jeśli Twój UNO był jednym z pierwszej partii, prawdopodobnie masz wadliwy program ładujący, musisz ponownie załadować program ładujący. Sprawdź tę stronę, aby uzyskać więcej informacji (zignoruj numery seryjne, wszystkie moje UNO nie były z tej serii i miały problemy).
Biblioteki rdzeni przenośnych pobrane z samouczka są napisane w celu użycia wewnętrznego oscylatora 1 MHz (potwierdzonego z pliku deski.txt), więc może problem z synchronizacją może być w bibliotekach rdzeni przenośnych lub w kodzie.
Z poważaniem
źródło
Wybierz tablicę ATTiny z „menedżera tablic” zawierającego ATTiny85. Znajduje się to w menu „Narzędzia”. Myślę, że obejmuje to teraz „wewnętrzny PLL 16 MHz”. (Możesz zainstalować jeden z http://drazzy.com/package_drazzy.com_index.json )
Wybierz jawnie ATTiny85, jeśli jest to wymagane.
Wybierz zegar. Dopóki nie dowiesz się więcej, wybierz wewnętrzny zegar.
Kliknij „Burn Bootloader” jako element menu.
Uwaga, możesz nie być w stanie zaprogramować MCU, jeśli wybierzesz bardzo niskie wartości. Jeśli taka jest twoja intencja, rób to do końca, chyba że masz części zamienne lub programator wysokiego napięcia, aby zresetować bezpieczniki.
źródło