|
|
Esimerkki 2.1 - Moottorit
Opittava asia: laitteiden kytkeminen päälle ja pois, jotka tarvitsevat isomman jännitteen ja/tai virran kuin mitä mikrokontrollerin pinnistä voi saada.
Koodi on periaatteessa sama kuin artikkelin ensimmäisen osan lediesimerkki. Muutamat nimet on vaan vaihdettu ja painonappi toimii nyt niin, että kerran painettaessa moottori jää päälle ja toisella painalluksella sammuu jne. Kytkennässä ei ole mitään kovin erikoista, normaali transistorin käyttö kytkimenä suurempien kuormien ohjailuun.
Osalista:- ATiny45
- 100 nF kondensaattori
- Painonappi
- 10k ohmin vastus
- BD675 NPN-transistori (tai vastaava, jossa on tarpeeksi kestoa moottoria varten)
- 1N4007 diodi (tai vastaava)
- Moottori tai tuuletin, jota ohjaillaan tässä esimerkissä 12 voltilla

Esimerkki 2.1

Esimerkki 2.1
/**
* MetkuMods - /
* Kuinka pääset alkuun mikrokontrollereiden kanssa - Osa 2
* Esimerkki 2.1 - Moottorit
*
* 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 <util/delay.h>
// Moottori pinnissä PB4 (pinni 3 piirissä)
#define MOTORPIN 4
// Painiket kytkettynä pinniin PB3 (pinni 2 piirissä)
#define BTNPIN 3
int main(void)
{
DDRB = 0x17; // PB3 sisään, muut ulos (0x1F-0x08=0x17 or 31-8=23)
PORTB = 0x08; // Aktivoi sisäinen ylösvetovastus pinnissä PB3 ja aseta muut alas
uint8_t buttonPressed = 0;
while(1)
{
// Tarkista mikäli PB3 on alhaalla (painike kytkee sen maahan)
// PB3 on normaalisti ylhäällä (1)
if(bit_is_clear(PINB, BTNPIN) && buttonPressed == 0)
{
buttonPressed = 1;
if(bit_is_clear(PINB, MOTORPIN))
PORTB |= _BV(MOTORPIN); // Moottori päälle
else
PORTB &= ~(_BV(MOTORPIN)); // Moottori pois päältä
_delay_ms(100);
}
else if(!bit_is_clear(PINB, BTNPIN) && buttonPressed == 1)
{
buttonPressed = 0;
}
}
return 0;
}
| | Sivut: 1 2 3 4 5 6 | |


Content in english!
Sisältö suomeksi!
