www.kn34pc.com
https://www.kn34pc.com/forums/

ATtiny85
https://www.kn34pc.com/forums/viewtopic.php?f=77&t=1070
Страница 1 от 2

Автор:  LZ2WSG [ 10 Фев 2021, 12:50 ]
Заглавие:  ATtiny85

ATtiny85 като Arduino.

– 8K bytes of In-System Programmable Program Memory Flash
– 512 bytes In-System Programmable EEPROM
– 512 bytes Internal SRAM

начало:
Programming ATtiny85 with Arduino Uno
https://create.arduino.cc/projecthub/ar ... uno-afb829

Programming an ATtiny w/ Arduino 1.6 (or 1.0)
http://highlowtech.org/?p=1695

The following Arduino commands should be supported:
pinMode()
digitalWrite()
digitalRead()
analogRead()
analogWrite()
shiftOut()
pulseIn()
millis()
micros()
delay()
delayMicroseconds()
SoftwareSerial()

ATtiny85 pins:
Прикачени файлове:
gpt63.png
gpt63.png [ 36.66 KiB | Прегледано 76907 пъти ]

https://engineerzero.blog/2013/05/07/at ... e-sketches
Прикачени файлове:
attiny-pinouts5.jpg
attiny-pinouts5.jpg [ 70.66 KiB | Прегледано 76996 пъти ]

Код за потвърждение:
// ATMEL ATTINY45/85 / ARDUINO
//
//                  +-\/-+
// Ain0 (D5) PB5  1|    |8  Vcc
// Ain3 (D3) PB3  2|    |7  PB2 (D2) Ain1
// Ain2 (D4) PB4  3|    |6  PB1 (D1) pwm1
//           GND  4|    |5  PB0 (D0) pwm0
//                  +----+

--------------------------------------------------
Прикачени файлове:
nstr.jpg
nstr.jpg [ 128.04 KiB | Прегледано 76994 пъти ]

При мен: Arduino Nano като Arduino ISP. ATtiny85 с 8 MHz вътрешен клок. Светодиод на извод 3, през 1k към GND.
Код за потвърждение:
void setup() {
  pinMode(4, OUTPUT);
}

void loop() {
  digitalWrite(4, HIGH);
  delay(1000);

  digitalWrite(4, LOW);
  delay(1000);
}

Прикачени файлове:
ATtiny85_blink.gif
ATtiny85_blink.gif [ 32.74 KiB | Прегледано 75513 пъти ]

:smt041 blink работи. LED прави: миг-миг-миг- ... :mail.
---
Много яко липсват изводи на микроконтролерчето. Или за прости проекти ще е, или трябва "здрава" заигравка с експандери, шифратори, дешифратори, преместващи регистри ...

Ако I2C тръгне без затруднения, горното ще е лесно.

Автор:  LZ2WSG [ 10 Фев 2021, 13:05 ]
Заглавие:  Re: ATtiny85

Цитат:
The ATtiny85 (and it's cousins) does not have I2C (or SPI) "built in".
Instead it has a Universal Serial Interface (USI) that can be used to facilitate I2C and SPI.

Добре започваме с I2C :crazy.
Хубавото е, че някой вече го е направил. Да видим как да го използваме.

Автор:  LZ2WSG [ 10 Фев 2021, 14:29 ]
Заглавие:  Re: ATtiny85

Библиотека TinyWire
https://playground.arduino.cc/Code/USIi2c

ATtiny85 изводи:
SDA - 5
SCL - 7

Свързах програмиращото Arduino Nano (с ArduinoISP) през резистори 100 Ohm към MISO, MOSI, RESET, SCK на ATtiny85. Така състоянията на изходите-товари почти не си влияят и не превключвам нищо при програмиране и запускането на програмата към изпълнителите схеми - работата е както нормална Arduino-платка :wink.
---
За тест свързах PCF8574, blink на P0 (4 извод) - резистор 1k, LED към +5V.
LED си мига :dance2.
Прикачени файлове:
ATtiny85_pcf8574.gif
ATtiny85_pcf8574.gif [ 50.08 KiB | Прегледано 76898 пъти ]

Прикачени файлове:
pcf_01.zip [13.12 KiB]
3835 пъти

---
Наред за тест е Si5351 с TinyWire :crazy.

Автор:  LZ2WSG [ 10 Фев 2021, 20:54 ]
Заглавие:  Re: ATtiny85

С общата библиотека за TWI Master/Slave (TinyWire) не можах да пусна засега по лесния начин управлението към Si5351 (по QRP-labs),
но с TWI Master (TinyWireM) е ОК - ATtiny85 зарежда една честота в Si5351: 722 bytes of flash written :smt041
Прикачени файлове:
ATtiny85_si5351a.gif
ATtiny85_si5351a.gif [ 52.95 KiB | Прегледано 76922 пъти ]

Прикачени файлове:
si5351a_qrp-labs_01.zip [9.38 KiB]
3674 пъти

Автор:  LZ2WSG [ 10 Фев 2021, 22:16 ]
Заглавие:  Re: ATtiny85

Извадих Wire.h от пакета на Digispark. I2C си работи като Ардуиновското :mail.
https://github.com/digistump/DigistumpArduino

По-долу: Si5351 на една честота с управление по QRP-labs.
Прикачени файлове:
si5351a_qrp-labs_02.zip [9.77 KiB]
3725 пъти

:comp

Вероятно ще ми са полезни експерименти за SoftI2C: бързината на зареждане в случая не ми е важна, a универсалността за свързване към изводите.
---
При сбит, оптимизиран код кодът за цяло VFO би трябвало да се събере.
Следваща задача: свързане на енкодер. А единият извод за хардуерно прекъсване вече е зает от SDA ... все интересни неща.

- първа идея: енкодер към два нормални извода
- втора идея: SoftI2C към други, свободни изводи
- трета ...

:smt117

Автор:  LZ2WSG [ 11 Фев 2021, 19:30 ]
Заглавие:  Re: ATtiny85

Заработиха:
1. I2C based on "I2C_without_ACK", работещо на всеки достъпен извод. Без внесено забавяне (до достигане на стандартните за I2C 100 kHz/400 kHz). Поне ИС Si5351 зарежда нормално.

Получих (засега) и най-малкия размер памет при зареждане на една честота в Si5351:
Код за потвърждение:
Скицата използва 480 байта (5%) от пространството за програми. Максимумът е 8192 байта.
Глобалните променливи ползват 9 байта (1%) от динамичната памет, оставяйки 503 байта за локални променливи. Максимумът е 512 байта.

2. Ben Buxton Rotary encoder handler for Аrduino v1.1, свързан в loop (Polling).
---
Наред за тест е дисплей по I2C: напр. LCD 1602 през I2C-модул на PCF8574.

Автор:  LZ2WSG [ 12 Фев 2021, 11:20 ]
Заглавие:  Re: ATtiny85

LCD 1602, управляван от библиотека LiquidCrystal_I2C и Wire.h от пакета на Digispark:
Прикачени файлове:
ATtiny85_i2c_lcd.gif
ATtiny85_i2c_lcd.gif [ 62.75 KiB | Прегледано 76922 пъти ]

Прикачени файлове:
i2c_lcd_hello_world.zip [13.27 KiB]
3681 пъти

---
Свързани са: ATtiny85, Si5351A, encoder, LCD1602 с I2C-модул на PCF8574 и VFO-то е принципно готово за развитие :smt041.

По-долу: 80m/20m с превключване с дълго натискане на ключа на енкодера.
(Няма свободен хардуерен извод за изход за превклюване на напр. реле за BPF на 80m/20m!)
Прикачени файлове:
ATtiny85_vfo.gif
ATtiny85_vfo.gif [ 91.72 KiB | Прегледано 76922 пъти ]

Редовете в loop са малко, с флагове задействам компонентите по събитие. Не виждам засега забавяне в реакцията заради encoder в loop (polling) :comp.
Без оптимизация повече от половината Flash е свободна.

Автор:  LZ2WSG [ 12 Фев 2021, 21:24 ]
Заглавие:  Re: ATtiny85

И изводите свършиха ...

Входът от ключа на енкодера напр. може да се клонира многократно като бутони през делители към АЦП,
но с изход за релета при повече обхвати, освен с еспандер по I2C ...

Други идеи?

Чипът е хем с ограничени възможности (напр. малък брой вх/изх изводи), хем е и интересен ... развива мисленето :wink.

Автор:  LZ2WSG [ 12 Фев 2021, 21:24 ]
Заглавие:  Re: ATtiny85

В схеми срещам pin RESET да се използва за вход.

Напр. тук:
Single Band si5351 Digital VFO
https://www.zl2pd.com/tiny85_si5351_VFO.html

Презаписват се фюзовете. Ако е необходима корекция и препрограмиране след време, е необходим HV-програматор ... Иначе чипът не е видим за програматора.

Обаче реално след всяка малка стъпка в кода го тествам. Да местя непрекъснато чипа от програматор на работещо (или тестово) устройство си е мъка, дори на цокъл. И без вариант за грешка с фюзовете (нямам HV-програматор). Засега изоставям идеята. За крайно устройство - да, става: даваш кода и схемата на някой, той го повтаря и конструкцията заработва.

Друга възможност: извод RESЕТ да е ADC, към напрежение 5V...2,5V (клавиатура с бутони и делители, друго?), а напрежението като стане по-ниско (до 0V), ще си изпълнява RESET-функцията. Изпълнимо, ще се пробва, ако не за непрекъснато използване, то поне като възможност.

Автор:  LZ2WSG [ 14 Фев 2021, 11:36 ]
Заглавие:  Re: ATtiny85

Реших да тествам скоростта на ATtiny в зависимост от честотата на вътрешния clock.
1 MHz, 8 MHz, 16 MHz

Промяната на вътрешния clock е свързана с промяна на fuses, които се записват през запис на bootloader.
Т.е. на всяка промяна на честотата в менюто трябва да се извърши "Записване на зареждаща програма".
Прикачени файлове:
at_bootloader.jpg
at_bootloader.jpg [ 167.1 KiB | Прегледано 76917 пъти ]

-------------------
Кратка програма за броене на цикли в loop за 5 000 000 us (или 5 s):
Прикачени файлове:
time_m.zip [13.21 KiB]
3608 пъти

Понеже не съм намерил подходящия начин (засега) за използване на Serial в ATinny85, резултатите извеждам в LCD1602 чрез LiquidCrystal_I2C.
-------------------
Прикачени файлове:
at_1_mhz.jpg
at_1_mhz.jpg [ 181.51 KiB | Прегледано 76917 пъти ]

ATtiny85, Internal Clock = 1 MHz, за 5 сек - 42116 цикъла
-------------------
Прикачени файлове:
at_8_mhz.jpg
at_8_mhz.jpg [ 181.77 KiB | Прегледано 76917 пъти ]

ATtiny85, Internal Clock = 8 MHz, за 5 сек - 409938 цикъла
-------------------
Прикачени файлове:
at_16_mhz.jpg
at_16_mhz.jpg [ 181.76 KiB | Прегледано 76917 пъти ]

ATtiny85, Internal Clock = 16 MHz, за 5 сек - 883665 цикъла
-------------------
Оставям си Internal Clock за използване и тестове на 16 MHz :mail :wink

Автор:  LZ2WSG [ 14 Фев 2021, 14:44 ]
Заглавие:  Re: ATtiny85

И изводите на ATiny85 свършиха :biggrin. А как ми се иска да има поне един свободен, за да може и S-метър да се задейства ... :yes
---
тестове с RESET pin:
Reset се задейства, когато напрежението на извод RESET е по-малко от 2,2V.
Следва, че през АЦП-то състоянието на извода може да се използва от напр. 5V до напр. 2,5V.

постановка по-долу:
Прикачени файлове:
ATtiny85_reset_adc_test.gif
ATtiny85_reset_adc_test.gif [ 64.57 KiB | Прегледано 76914 пъти ]

Прикачени файлове:
adc_check.zip [13.31 KiB]
3722 пъти

Към програмиращото Arduino добавих диодче - да не си вляят напреженията, а при програмиране: RESET да си работи.
---
Освободи се 1 (pin 6), но няма АЦП. Трябва да се преконфигурират изводи към енкодера примерно на друг пин, или soft_I2C?. Към първото отива работата ...
---
Още варианти: Напрежението за S-метъра да е от 2,5V нагоре (до 5V) - детекторa му да е свързан към средна точка на делител (GND-R-R-+5V).
Тогава и клавиатура с бутони с делители може да се свърже, или изход за реле за два обхвата ...

Автор:  LZ2WSG [ 14 Фев 2021, 21:04 ]
Заглавие:  Re: ATtiny85

Кандидат-вариант за използване:

Обаче Arduino към ATtiny85, използван като програматор, "товари" тези изводи със старите си състояния ...

Прикачени файлове:
ATtiny85_pins_1.gif
ATtiny85_pins_1.gif [ 40 KiB | Прегледано 76903 пъти ]

Автор:  LZ2WSG [ 17 Фев 2021, 00:31 ]
Заглавие:  Re: ATtiny85

Х-ъ-х-х-х-х, "голяма борба падна" с OLED 0,91" 128x32 докато "тръгне" към ATtiny85 (с библиотека SSD1306Ascii).
Много версии има за I2C драйвер. Успях да приспособя използвания досега. Но дисплеят засега е с "точки" ... :smt048.

Инфо от линка по-долу: това са случайни данни в RAM.
Потвърждавам: на всяко включване точките са на различно място ... :smt079

OLED Display Driven by ATtiny10
https://www.hackster.io/bitbanging/oled ... y10-986571
Цитат:
When the display is first turned ON, the content of the RAM is completely random. So it will show pixels randomly turned on.

Clear от библиотеката не помага. С доп. външна процедурка за чистене - също, засега ... :smt069.
Код за потвърждение:
#include "src/Wire.h"
  Wire.begin();
  Wire.beginTransmission(0x3C);
  Wire.write(0x40);
  for (uint8_t i = 0; i < 128; i++)
  {
    Wire.write(0x00);
    Wire.write(0x00);
    Wire.write(0x00);
    Wire.write(0x00);
  }
  Wire.endTransmission();

Приемам идеи ...

Прикачени файлове:
oled_128x32_attiny85.jpg
oled_128x32_attiny85.jpg [ 303.79 KiB | Прегледано 76883 пъти ]

Автор:  LZ2WSG [ 20 Фев 2021, 17:05 ]
Заглавие:  Re: ATtiny85

В RAM на ATtiny85 няма място за буфер за един кадър. Подозренята ми бяха към процедурата clear по-долу:

В
Код за потвърждение:
void SSD1306Ascii::clear(uint8_t c0, uint8_t c1, uint8_t r0, uint8_t r1)

замених
Код за потвърждение:
ssd1306WriteRamBuf(0);

на
Код за потвърждение:
ssd1306WriteRam(0);

... и точиците след старт са премахнати :super. VFO вече може да си има OLED дисплейче 128x32.

При бързо изменяне на честотата има известно забавяне, сравнено с работата с Arduino. В SSD1306Ascii към Arduino, I2C е във fast_mode.
При емулация USI -> TWI за ATtiny85 се съмнявам дори, че покрива и 100 kHz. А и има разлика в обработката на енкодера по прекъсване и в loop. Но забавянията и с OLED не са сериозни за използване като VFO :wink.
Дотук съм доволен от резултата.

Прикачени файлове:
oled_128x32_attiny85_mod.jpg
oled_128x32_attiny85_mod.jpg [ 211.83 KiB | Прегледано 76856 пъти ]

Автор:  LZ2WSG [ 20 Фев 2021, 18:02 ]
Заглавие:  Re: ATtiny85

Good USI I2C master / slave ATTiny85 library (optionally master arbitration)
Код за потвърждение:
//I2C Bus Specification v2.1 FAST mode timing limits
#ifdef I2C_FAST_MODE
        #define I2C_TLOW        1.3
        #define I2C_THIGH       0.6

//I2C Bus Specification v2.1 STANDARD mode timing limits
#else
        #define I2C_TLOW        4.7
        #define I2C_THIGH       4.0
#endif

При мен - в USI_TWI_Master_Wire.h:
Код за потвърждение:
// For use with _delay_us()
#define T2_TWI    5       // >4,7us
#define T4_TWI    4       // >4,0us

на
Код за потвърждение:
[code]// For use with _delay_us()
#define T2_TWI    1       // >4,7us
#define T4_TWI    1       // >4,0us[/code]

и ефектът е добър :wink.
----------------------------------------
Сравняване с Arduino:

определен код за зареждане на една честота в Si5351:
I2C 100 000 kHz -> 3300 uS
I2C 400 000 kHz -> 1508 uS

Същя код с ATtiny85:
с 5 us, 4 us: 5256 us
с 1 us, 1 us: 2396 us

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/