|
|
Esimerkkejä
Muutama perusesimerkki sisään- ja ulostulojen käytöstä, jotta voit testata kytkennän ja ohjelmistot, että ne toimivat kuten pitääkin.
Pinnit:
PB0 (pinni 5) = 1 (desimaali), 0x01 (hex), [00001 binääri]
PB1 (pinni 6) = 2 (desimaali), 0x02 (hex), [00010 binääri]
PB2 (pinni 7) = 4 (desimaali), 0x04 (hex), [00100 binääri]
PB3 (pinni 2) = 8 (desimaali), 0x08 (hex), [01000 binääri]
PB4 (pinni 3) = 16 (desimaali), 0x10 (hex), [10000 binääri]
Esimerkki 1: Yksinkertainen ledivilkutin
Tämä yksinkertainen koodi laittaa ledin päälle yhdeksi sekunniksi ja pois yhdeksi sekunniksi ja jatkaa sitä loputtomasti.
// Taajuusarvo, jonka viivefunktio tarvitsee.
// Piiri on tehdasasetettu toimimaan sisäisellä
// oskillaattorilla 1 MHz taajuudella, joten arvoksi tulee tähän 1000000UL
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
// Ledi on yhdistetty PB4 (pinni 3 piirillä)
#define LEDPIN 4
int main(void)
{
DDRB = 0x1F; // PB0-PB4 ulostuloja
PORTB = 0x00; // Kaikki ulostulot alas
// Laita LED päälle sekunniksi ja sen jälkeen pois sekunniksi ja jatka loputtomasti
while(1)
{
PORTB |= _BV(LEDPIN); // Ledi päälle
_delay_ms(1000); // Odota 1000 ms (1 s)
PORTB &= ~(_BV(LEDPIN)); // Ledi pois päältä
_delay_ms(1000); // Odota 1000 ms (1 s)
}
return 0;}

Esimerkki 1 toiminnassa
Esimerkki 2: LED ja painike
Ledi on päällä kun painiketta painetaan. Tehdään ensin pieni muutos alkuperäiseen kytkentään ja lisätään painike pinnin 2 ja maan välille:

Painike lisättynä alkuperäiseen kytkentään
// Taajuusarvo, jonka viivefunktio tarvitsee.
// Piiri on tehdasasetettu toimimaan sisäisellä
// oskillaattorilla 1 MHz taajuudella, joten arvoksi tulee tähän 1000000UL
#define F_CPU 1000000UL
#include <avr/io.h>
// Ledi on yhdistetty PB4 (pinni 3 piirillä)
#define LEDPIN 4
// Painike on yhdistetty PB3 (pinni 2 piirillä)
#define BTNPIN 3
int main(void)
{
DDRB = 0x17; // PB3 sisääntulo, muut ulostuloja (0x1F-0x08=0x17 tai 31-8=23)
PORTB = 0x08; // Aktivoi sisäänrakennettu ylösvetovastus PB3 ja aseta muut alas
while(1)
{
// Tarkista onko PB3 alhaalla (painike yhdistää sen maahan)
// PB3 on normaalisti ylhäällä, koska ylösvetovastus aiheuttaa sen
if(bit_is_clear(PINB, BTNPIN))
PORTB |= _BV(LEDPIN); // Ledi päälle
else
PORTB &= ~(_BV(LEDPIN)); // Ledi pois päältä
}
return 0;
}

Esimerkki 2 toiminnassa
| | Sivut: 1 2 3 4 5 6 | |


Content in english!
Sisältö suomeksi!
