www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 20 Окт 2026, 05:46

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща
Автор Съобщение
 Заглавие: ATtiny85
МнениеПубликувано на: 10 Фев 2021, 12:50 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
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 | Прегледано 76909 пъти ]

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

Код за потвърждение:
// 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 | Прегледано 76996 пъти ]

При мен: 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 | Прегледано 75515 пъти ]

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

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 10 Фев 2021, 13:05 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Цитат:
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.
Хубавото е, че някой вече го е направил. Да видим как да го използваме.


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 10 Фев 2021, 14:29 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Библиотека 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 | Прегледано 76900 пъти ]

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

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 10 Фев 2021, 20:54 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
С общата библиотека за 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 | Прегледано 76924 пъти ]

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 10 Фев 2021, 22:16 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Извадих 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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 11 Фев 2021, 19:30 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Заработиха:
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.


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 12 Фев 2021, 11:20 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
LCD 1602, управляван от библиотека LiquidCrystal_I2C и Wire.h от пакета на Digispark:
Прикачени файлове:
ATtiny85_i2c_lcd.gif
ATtiny85_i2c_lcd.gif [ 62.75 KiB | Прегледано 76924 пъти ]

Прикачени файлове:
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 | Прегледано 76924 пъти ]

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 12 Фев 2021, 21:24 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
И изводите свършиха ...

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

Други идеи?

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 12 Фев 2021, 21:24 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
В схеми срещам pin RESET да се използва за вход.

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

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

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

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 14 Фев 2021, 11:36 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Реших да тествам скоростта на ATtiny в зависимост от честотата на вътрешния clock.
1 MHz, 8 MHz, 16 MHz

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

-------------------
Кратка програма за броене на цикли в 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 | Прегледано 76919 пъти ]

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

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

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 14 Фев 2021, 14:44 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
И изводите на 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 | Прегледано 76916 пъти ]

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

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


Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 14 Фев 2021, 21:04 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Кандидат-вариант за използване:

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


Прикачени файлове:
ATtiny85_pins_1.gif
ATtiny85_pins_1.gif [ 40 KiB | Прегледано 76905 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 17 Фев 2021, 00:31 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
Х-ъ-х-х-х-х, "голяма борба падна" с 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 | Прегледано 76885 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 20 Фев 2021, 17:05 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
В 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 | Прегледано 76858 пъти ]
Върнете се в началото
 Профил  
 
 Заглавие: Re: ATtiny85
МнениеПубликувано на: 20 Фев 2021, 18:02 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1709
Местоположение: Силистра
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


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com