Operácie

ATtiny: Rozdiel medzi revíziami

Z SensorWiki

Riadok 155: Riadok 155:
  
 
RJMP LOOP ; Skok na zaciatok
 
RJMP LOOP ; Skok na zaciatok
 +
 +
</source></tab>
 +
</tabs>
 +
 +
 +
Tlacitko ovlada LED diodu
 +
 +
<tabs>
 +
<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>
 
</source></tab>
 
</tabs>
 
</tabs>

Verzia zo dňa a času 17:15, 16. 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

SparkFun

Technoblogy


Dalsie:


Problemy

Fuses

Na koniec:


Program na jednoduché blikanie LEDkou

##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!!!!
	    
		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


Tlacitko ovlada LED diodu

#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;
}