Operácie

ATtiny: Rozdiel medzi revíziami

Z SensorWiki

 
(17 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 4: Riadok 4:
  
 
* ATtiny Core library for Arduino https://github.com/SpenceKonde/ATTinyCore
 
* ATtiny Core library for Arduino https://github.com/SpenceKonde/ATTinyCore
 +
 +
* Programovanie napr. cez [[USBtiny ISP]]
  
  
Riadok 21: Riadok 23:
  
 
[https://www.arduinoslovakia.eu/page/nelinearna-citlivost-ludskeho-oka Nelineárna citlivosť ľudského oka]
 
[https://www.arduinoslovakia.eu/page/nelinearna-citlivost-ludskeho-oka Nelineárna citlivosť ľudského oka]
 +
 +
 +
''' Łukasz Podkalicki'''
 +
* '''[https://blog.podkalicki.com/100-projects-on-attiny13/ 100 projektov s ATtiny]'''
 +
* [https://blog.podkalicki.com/attiny13-led-fading-with-delay-function/ LED fading effect]
 +
* [https://blog.podkalicki.com/attiny13-controlling-led-rgb-fancy-light-effects/ RGB efekty]
 +
  
 
'''SparkFun'''
 
'''SparkFun'''
Riadok 27: Riadok 36:
 
* [https://www.sparkfun.com/products/retired/9563 RGB sviecka] - blikajuce 3 RGB
 
* [https://www.sparkfun.com/products/retired/9563 RGB sviecka] - blikajuce 3 RGB
 
* [https://www.sparkfun.com/products/retired/12069 Detektor pretecenia vody] na baterku CR3202 aj s modifikaciami programu
 
* [https://www.sparkfun.com/products/retired/12069 Detektor pretecenia vody] na baterku CR3202 aj s modifikaciami programu
 +
 +
'''Technoblogy'''
 +
* [http://www.technoblogy.com/search.html Zoznam]
 +
* [http://www.technoblogy.com/show?VOO Push-Button On/Off Switches]
 +
* [http://www.technoblogy.com/show?20MO Playing Notes on the ATtiny85]
 +
* I2C
 +
** [http://www.technoblogy.com/show?24R7 Minimal Tiny I2C Routines]
 +
** [http://www.technoblogy.com/show?2QYB Minimal I2C for the New AVR Microcontrollers]
 +
** [http://www.technoblogy.com/show?1G29 Making Your Own I2C Peripherals]
 +
* InfraRed Remote
 +
** [http://www.technoblogy.com/show?V6F IR Remote Control Receiver]
 +
** [http://www.technoblogy.com/show?ULT IR Remote Control Tool]
 +
** [http://www.technoblogy.com/show?25TN IR Remote Wand]
 +
** [http://www.technoblogy.com/show?24A9 IR Remote Control Detective (Updated)]
  
  
Riadok 32: Riadok 55:
 
* Da sa programovat v Blockly cez simulator v TinkerCADe
 
* Da sa programovat v Blockly cez simulator v TinkerCADe
 
* [https://mjvo.github.io/tutorials/circuits/attiny85/ Vseobecne]  
 
* [https://mjvo.github.io/tutorials/circuits/attiny85/ Vseobecne]  
 +
* http://homemadehardware.com/guides/programming-an-attiny85/
 
* [https://www.theengineeringprojects.com/2018/09/introduction-to-attiny85.html Vseobecne]
 
* [https://www.theengineeringprojects.com/2018/09/introduction-to-attiny85.html Vseobecne]
 
* [https://www.gadgetronicx.com/attiny85-spi-protocol-master-slave-mode-tutorial/  SPI Master aj Slave]
 
* [https://www.gadgetronicx.com/attiny85-spi-protocol-master-slave-mode-tutorial/  SPI Master aj Slave]
 
* [https://www.gadgetronicx.com/attiny85-i2c-protocol-tutorial/ I2C Master aj Slave] !!!
 
* [https://www.gadgetronicx.com/attiny85-i2c-protocol-tutorial/ I2C Master aj Slave] !!!
 
* [https://www.hackster.io/alaspuresujay/use-an-attiny85-with-arduino-ide-07740c RGB demo]
 
* [https://www.hackster.io/alaspuresujay/use-an-attiny85-with-arduino-ide-07740c RGB demo]
* Power save rezimy su dobre opisane (aj s projektom na casovac s pipakom): http://www.technoblogy.com/show?KX0
 
 
* [https://wiki.robotika.sk/robowiki/index.php?title=SapienIRCTL Sapien IR CTRL] Palov projekt s USB aj IR
 
* [https://wiki.robotika.sk/robowiki/index.php?title=SapienIRCTL Sapien IR CTRL] Palov projekt s USB aj IR
 +
* [https://www.engineersgarage.com/tutorial-8-rgb-led-interfacing-with-attiny85/ RGB Led tutorial]
 +
* '''Power save'''
 +
** rezimy su dobre opisane (aj s projektom na casovac s pipakom): http://www.technoblogy.com/show?KX0
 +
** https://circuitdigest.com/microcontroller-projects/arduino-sleep-modes-and-how-to-use-them-to-reduce-power-consumption
  
  
 
'''Problemy'''
 
'''Problemy'''
 +
* Na ake najmensie napatie to este pracuje? Bude modra LED svietit? Minimalizuj prudovu zataz.
 
* Ked budu programovacie piny obsadene LED alebo tlacitkom tak moze byt problem, trocha sa tomu venuju tuto: https://www.kanda.com/avr-isp-circuits.html
 
* Ked budu programovacie piny obsadene LED alebo tlacitkom tak moze byt problem, trocha sa tomu venuju tuto: https://www.kanda.com/avr-isp-circuits.html
 
** Alternativou moze byt UPDI Unified Program and Debug Interface (UPDI) programator, ktory pouziva len jeden pin - podobne ako DebugWire.
 
** Alternativou moze byt UPDI Unified Program and Debug Interface (UPDI) programator, ktory pouziva len jeden pin - podobne ako DebugWire.
Riadok 46: Riadok 74:
 
** Zakazat RESET (aby bol k dispozicii dalsi pin) nema zmysel, pretoze bez RESETu sa neda cip preprogramovat inak ako v HV programatore
 
** Zakazat RESET (aby bol k dispozicii dalsi pin) nema zmysel, pretoze bez RESETu sa neda cip preprogramovat inak ako v HV programatore
  
 +
'''Fuses'''
 +
* Explain https://embedderslife.wordpress.com/2012/08/20/fuse-bits-arent-that-scary/
 +
* https://sheepdogguides.com/arduino/attiny/fuses.htm
 +
* https://leo.leung.xyz/wiki/ATtiny85
 +
* http://eleccelerator.com/fusecalc/fusecalc.php?chip=attiny45&LOW=6A&LOCKBIT=FF
 +
* https://www.engbedded.com/fusecalc/
 +
 +
Na koniec:
 +
* https://github.com/MCUdude/MightyCore - moznost Arduino programovania pre ATmega16 a 32
 +
 +
 +
=== '''1. Program na jednoduché blikanie LEDkou''' ===
 +
 +
<center>
 +
[[Súbor:ATtinyProgram01blockly.png|300px]]<BR>
 +
''Program v grafickom jazyku Blockly (TinkerCAD).''
 +
</center>
 +
 +
 +
<tabs>
 +
<tab  name="AVR C"><source lang="cpp">
 +
##define F_CPU 8000000UL  // toto je lepsie vlozit do parametrov pre kompilator
 +
 +
#include <avr/io.h>
 +
#include <util/delay.h>
 +
 +
#define LED1  PB2  // pripojena dioda
 +
 +
int main(void)
 +
{
 +
    DDRB |= (1 << LED1);  // set pin as OUTPUT
 +
 +
    while(1)
 +
    {
 +
        PORTB |=  (1<<LED1);          // ... tak rozsviet LED, t.j. set PB5 na log. 1
 +
    _delay_ms(200);
 +
        PORTB &= ~(1<<LED1);        // zhasni LED, t.j. clear PB5 na log. 0
 +
  _delay_ms(2000);
 +
    }
 +
}
 +
</source></tab>
 +
<tab name="Arduino">
 +
<source lang="arduino">
 +
#define LEDpin 4  //aby nekolidovalo s programatorom, takto sa da trvale nechat pripojeny
 +
 +
void setup() {
 +
  // initialize digital pin LED_BUILTIN as an output.
 +
  pinMode(LEDpin, OUTPUT);
 +
}
 +
 +
// the loop function runs over and over again forever
 +
void loop() {
 +
  digitalWrite(LEDpin, HIGH);  // turn the LED on (HIGH is the voltage level)
 +
  delay(100);                      // wait for a second
 +
  digitalWrite(LEDpin, LOW);    // turn the LED off by making the voltage LOW
 +
  delay(1000);                      // wait for a second
 +
}
 +
</source></tab>
 +
<tab name="Assembler">
 +
<source lang="asm">
 +
/*
 +
*  LED Blink s periodou 100:1000 ms
 +
*  delay vygenerovane tu http://darcy.rsgc.on.ca/ACES/TEI4M/AVRdelay.html
 +
*  pre frekvenciu 8 MHz (ATtiny45, internal osc.)
 +
*
 +
*  LED je pripojena na pin7 (PORTB.2)
 +
*/
 +
 +
START:         SBI DDRB,2      ; DDRB.2 = 1 (t.j. Output)
 +
LOOP:
 +
SBI PORTB,2      ; PORTB.2 = 1 (t.j. High, rozsviet LED)
 +
 +
; CALL DELAY      ; UNSUPPORTED INSTRUCTION ON ATtiny!!!! - treba nahradit RCALL + RET
 +
   
 +
ldi  r18, 5    ; 100ms SVIETI
 +
ldi  r19, 15
 +
ldi  r20, 242
 +
L1: dec  r20
 +
brne L1
 +
dec  r19
 +
brne L1
 +
dec  r18
 +
brne L1
 +
nop
 +
 +
CBI PORTB,2    ; PORTB.2 = 0 (t.j. Low, zhasni LED)
 +
 +
ldi  r18, 41    ; jedna seunda nesvieti (vypocet pre 8MHz!!!)
 +
ldi  r19, 150
 +
ldi  r20, 128
 +
L2: dec  r20
 +
brne L2
 +
dec  r19
 +
brne L2
 +
dec  r18
 +
brne L2
 +
nop
 +
 +
RJMP LOOP ; Skok na zaciatok (JMP nepodporovane)
 +
 +
</source></tab>
 +
</tabs>
 +
 +
=== '''2. Tlačítko a LED''' ===
  
 +
<center>
 +
[[Súbor:ATtinyProgram02blockly.png|300px]]<BR>
 +
''Program v grafickom jazyku Blockly (TinkerCAD).''
 +
</center>
  
 +
<tabs>
 +
<tab name="Arduino">
 +
<source lang="arduino">
 +
#define SW1  1
 +
#define LED1 2
  
Na koniec:
+
void setup()
* https://github.com/MCUdude/MightyCore - moznost Arduino programovania pre ATmega16 a 32
+
{
 +
  pinMode(SW1,INPUT_PULLUP);
 +
  pinMode(LED1,OUTPUT);
 +
}
 +
 
 +
void loop()
 +
{
 +
  if (digitalRead(SW1) == 0)
 +
      digitalWrite(LED1, HIGH);
 +
  else
 +
      digitalWrite(LED1, LOW);
 +
 
 +
}
 +
</source></tab>
 +
<tab  name="AVR C"><source lang="cpp">
 +
#define F_CPU 8000000UL  // toto je lepsie vlozit do parametrov pre kompilator
 +
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
 +
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
 +
 
 +
 
 +
#include <avr/io.h>
 +
#include <util/delay.h>
 +
 
 +
#define LED1  PB2  // pripojena dioda
 +
#define SW1  PB1  // pripojene tlacitko
 +
 
 +
int main(void)
 +
{
 +
    DDRB |= (1 << LED1);  // set LED1 pin as OUTPUT
 +
DDRB &= ~(1<<SW1);    // set SW1 pin as INPUT (not necessary, default)
 +
PORTB |= (1<<SW1);    // SW1 pull-up ON
 +
 +
    while(1)
 +
    {
 +
      if ( bit_is_clear(PINB, SW1) )  // ak je stlacene tlacitko SW1
 +
    set_bit(PORTB,LED1);          // LED1 = log.1
 +
      else                            // inak
 +
    clear_bit(PORTB,LED1);        // LED1 = log.0
 +
    }
 +
 +
return 0;
 +
}
 +
</source></tab>
 +
<tab name="Assembler">
 +
<source lang="asm">
 +
/*
 +
* Program01.asm
 +
 +
*  Ovladanie LED diody tlacitkom
 +
*  Created: 16. 2. 2023 18:18:35
 +
*/
 +
 
 +
START: SBI DDRB,2      ; DDRB.2 = 1 (t.j. Output) - LED
 +
CBI DDRB,1      ; DDRB.1 = 0 (t.j. Input) - SW1
 +
SBI PORTB,1      ; PORTB.1 = 1 set SW1 Pull Up ON
 +
 
 +
LOOP:  SBI PORTB,2      ; PORTB.2 = 1 (t.j. High, rozsviet LED)
 +
ON:    SBIS PINB,1      ; IF input on pin = 1 (button NOT pressed), skip next instruction
 +
RJMP ON          ; otherwise just loop here
 +
 
 +
    CBI PORTB,2      ; PORTB.2 = 0 (t.j. Low, zhasni LED)
 +
OFF:    SBIC PINB,1      ; if input on pin = 0 (button IS pressed),  skip next instruction
 +
RJMP OFF        ; otherwise just loop here
 +
 
 +
RJMP LOOP ; Skok na LED On
 +
 
 +
 
 +
</source></tab>
 +
</tabs>

Aktuálna revízia z 19:15, 23. február 2023

Rychly zoznam projektov a stranok k programovaniu ATtiny (vid aj projekty DTV)


Strasne vela navodov je na strankach Roba Ulbrichta https://www.arduinoslovakia.eu/ Napriklad:


Nelineárna citlivosť ľudského oka


Łukasz Podkalicki


SparkFun

Technoblogy


Dalsie:


Problemy

  • Na ake najmensie napatie to este pracuje? Bude modra LED svietit? Minimalizuj prudovu zataz.
  • Ked budu programovacie piny obsadene LED alebo tlacitkom tak moze byt problem, trocha sa tomu venuju tuto: https://www.kanda.com/avr-isp-circuits.html

Fuses

Na koniec:


1. Program na jednoduché blikanie LEDkou

ATtinyProgram01blockly.png
Program v grafickom jazyku Blockly (TinkerCAD).


##define F_CPU 8000000UL  // toto je lepsie vlozit do parametrov pre kompilator

#include <avr/io.h>
#include <util/delay.h>

#define LED1  PB2  // pripojena dioda 

int main(void)
{
    DDRB |= (1 << LED1);  // set pin as OUTPUT	
	
    while(1)
    {
         PORTB |=  (1<<LED1);          // ... tak rozsviet LED, t.j. set PB5 na log. 1 
	     _delay_ms(200);
         PORTB &= ~(1<<LED1);         // zhasni LED, t.j. clear PB5 na log. 0
	  	 _delay_ms(2000);
    }
}
#define LEDpin 4  //aby nekolidovalo s programatorom, takto sa da trvale nechat pripojeny

void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LEDpin, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LEDpin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);                       // wait for a second
  digitalWrite(LEDpin, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}
/*
 *  LED Blink s periodou 100:1000 ms 
 *  delay vygenerovane tu http://darcy.rsgc.on.ca/ACES/TEI4M/AVRdelay.html
 *  pre frekvenciu 8 MHz (ATtiny45, internal osc.)
 * 
 *  LED je pripojena na pin7 (PORTB.2)
 */ 

START:	        SBI DDRB,2       ; DDRB.2 = 1 (t.j. Output)
LOOP:
		SBI PORTB,2      ; PORTB.2 = 1 (t.j. High, rozsviet LED)

;		CALL DELAY      ; UNSUPPORTED INSTRUCTION ON ATtiny!!!! - treba nahradit RCALL + RET
	    
		ldi  r18, 5     ; 100ms SVIETI
		ldi  r19, 15
		ldi  r20, 242
L1:		dec  r20
		brne L1
		dec  r19
		brne L1
		dec  r18
		brne L1
		nop

		CBI PORTB,2     ; PORTB.2 = 0 (t.j. Low, zhasni LED)

		ldi  r18, 41    ; jedna seunda nesvieti (vypocet pre 8MHz!!!)
		ldi  r19, 150
		ldi  r20, 128
L2:		dec  r20
		brne L2
		dec  r19
		brne L2
		dec  r18
		brne L2
		nop

		RJMP LOOP		; Skok na zaciatok (JMP nepodporovane)

2. Tlačítko a LED

ATtinyProgram02blockly.png
Program v grafickom jazyku Blockly (TinkerCAD).

#define SW1  1
#define LED1 2

void setup()
{
  pinMode(SW1,INPUT_PULLUP);
  pinMode(LED1,OUTPUT);
}

void loop()
{
  if (digitalRead(SW1) == 0) 
      digitalWrite(LED1, HIGH);
  else 
      digitalWrite(LED1, LOW);
  
}
#define F_CPU 8000000UL  // toto je lepsie vlozit do parametrov pre kompilator
#define set_bit(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define clear_bit(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))


#include <avr/io.h>
#include <util/delay.h>

#define LED1  PB2  // pripojena dioda 
#define SW1   PB1  // pripojene tlacitko

int main(void)
{
    DDRB |= (1 << LED1);  // set LED1 pin as OUTPUT	
	DDRB &= ~(1<<SW1);    // set SW1 pin as INPUT (not necessary, default)
	PORTB |= (1<<SW1);    // SW1 pull-up ON
	
    while(1)
    {
      if ( bit_is_clear(PINB, SW1) )   // ak je stlacene tlacitko SW1
 	    set_bit(PORTB,LED1);           // LED1 = log.1
      else                             // inak
	    clear_bit(PORTB,LED1);         // LED1 = log.0
    }
	
	return 0;
}
/*
 *	Program01.asm
 *  
 *  Ovladanie LED diody tlacitkom
 *  Created: 16. 2. 2023 18:18:35
 */ 

START:	SBI DDRB,2       ; DDRB.2 = 1 (t.j. Output) - LED
		CBI DDRB,1       ; DDRB.1 = 0 (t.j. Input) - SW1
		SBI PORTB,1      ; PORTB.1 = 1 set SW1 Pull Up ON

LOOP:   SBI PORTB,2      ; PORTB.2 = 1 (t.j. High, rozsviet LED)
ON:     SBIS PINB,1      ; IF input on pin = 1 (button NOT pressed), skip next instruction
		RJMP ON          ; otherwise just loop here

	    CBI PORTB,2      ; PORTB.2 = 0 (t.j. Low, zhasni LED)
OFF:    SBIC PINB,1      ; if input on pin = 0 (button IS pressed),  skip next instruction
		RJMP OFF         ; otherwise just loop here

		RJMP LOOP		 ; Skok na LED On