MetkuMods

Kuinka pääset alkuun mikrokontrollereiden kanssa - Osa 2.

Kommunikointi tietokoneen kanssa, moottorien ohjaus, servot jne.
 
Kirjoittaja: Aki Korhonen
Julkaistu: 06.05.2009
In English In English
Suomeksi Suomeksi

Esimerkki 2.2 - Himmenevä ledi

Opittava asia: PWM:n (Pulse-width modulation, pulssinleveysmodulaatio) peruskäyttö

  • Wikipedia - Pulssinleveysmodulaatio
  • Wikipedia - Pulse-width modulation
  • Seuraavaksi ohjataan ledin kirkkautta PWM:n avulla. Periaatteessa lediä vilkutellaan erittäin nopeasti ja kirkkauden vaihtelu saadaan aikaiseksi säätämällä pulssien päällä ja poissa -tilojen suhdetta (duty cycle). Esimerkiksi jos pulssisuhteeksi asetetaan 50%, niin ledi on päällä puolet ajasta ja pois päältä toisen puolen, joten näyttää, että sitä käytetään puolella kirkkaudella.

    Osalista:
    • ATiny45
    • 100 nF kondensaattori
    • Punainen ledi
    • 270 ohmin vastus, ledin etuvastus (käytä LedCalcia etuvastuksien laskemiseen muunlaisille ledeille)
     

    How to get started with microcontrollers - Part 2
    Esimerkki 2.2

     

    How to get started with microcontrollers - Part 2
    Esimerkki 2.2

    
    /**
    * MetkuMods - http://metku.net/
    * Kuinka pääset alkuun mikrokontrollereiden kanssa - Osa 2
    * Esimerkki 2.2 - Himmenevä ledi
    *
    * Tekijä: Aki Korhonen
    * Pvm: 2009-04-29
    */
    
    // Mikäli kellotaajutta ei ole projektiasetuksissa laitettuna, niin laitetaan tässä
    #ifndef F_CPU
    	#define F_CPU 1000000UL // 1 MHz
    #endif
    
    #include <avr/io.h>
    #include <inttypes.h>
    
    #include <util/delay.h>
    
    // Ledi pinnissä PB0, OCR0A
    #define LED 0
    
    // Min ja max arvot PWM:lle
    // Näillä voit säätää kuinka kirkkaaksi ja himmeäksi ledi menee
    // Minimi MIN:lle on 0 ja maksimi MAX:lle on 255
    #define PWM_MIN 0
    #define PWM_MAX 128
    
    int main(void)
    {
    	DDRB = 0xFF;
    	PORTB = 0x00;
    	
    	// Arvo PWM-rekisterille
    	// Muuttujan "value" arvo on verrannollinen ledin kirkkauteen
    	// 0 = pois päältä | 255 = täysi kirkkaus
    	uint8_t value = 0;
    	uint8_t step = 1;
    
    	// -------------------------
    	// Aseta PWM
    
    	// 8-bittinen PWM, vaihevakavoitu (Phase correct)
    	// 8 bitillä saadaan 256 kirkkaustasoa
    	TCCR0A |= (1<<WGM00);
    	
    	// Tyhjennä OC0A/OC0B, kun vertailuarvo saavutetaan
    	// Aseta OC0A/OC0B alhaalla, nollassa (ei-käänteinen tila)
    
    	// Clear OC0A/OC0B on Compare Match
    	// Set OC0A/OC0B at BOTTOM (non-inverting mode)
    	TCCR0A |= (1<<COM0A1);
    
    	// Aseta esijakajaksi (prescaler) 8
    	// 1 MHz / 8*256 = ~490 Hz PWM-taajuus
    	TCCR0B |= (1<<CS01);
    
    	// -------------------------
    	
    	// Ohjelma himmentää ja kirkastaa lediä halutulla nopeudella
    	while(1)
    	{
    		// Kirjoita arvo rekisteriin OCR0A (Output Compare Register A)
    		OCR0A = value;
    
    		// Lisää arvoa askeleen verran
    		value += step;
    		
    		// Mikäli asetettu maksimiarvo saavutetaan, niin vaihdetaan suuntaa
    		if(value >= PWM_MAX)
    			step *= -1;
    		else if(value <= PWM_MIN)
    			step = 1;
    		
    		// Odota 40 ms
    		_delay_ms(40);
    	}
    
    	return 0;
    }
    
    



    Sivut:  1 2 3 4 5 6 


     
      Content in english!
      Sisältö suomeksi!

     Google




    Add to Technorati Favorites
    add
    add
    add
    add
    add

     .:Back to top Bandwidth by Mpoli

    Copyright © Metku.net, All Rights Reserved.
    All content and graphics in MetkuMods are sole property of Jani Pönkkö and may not be reproduced or copied in any manner without written permission from him.
    All brand names, trademarks and copyrights are the property of their respective owners.Privacy Policy