|
|
Esimerkki 2.5 - Tietokoneeseen yhdistäminen
Opittava asia: tiedonsiirto mikrokontrollerin ja tietokoneen välillä.
Osalista:- ATmega8 tai ATmega88 (tai mikä tahansa sisäänrakennetulla UART:lla, esim. ATtiny2313)
- 100 nF kondensaattori
- 1 µF elektrolyyttikondensaattori
- MAX233 (samanlainen MAX232:n kanssa, muttei tarvitse ulkoisia kondensaattoreita)
- Punainen ledi
- 270 ohmin vastus, ledin etuvastus (käytä LedCalcia etuvastuksien laskemiseen muunlaisille ledeille)

Esimerki 2.5

Esimerkki 2.5
Saatuasi laitteen kasaan ja tarkistettuasi kytkennät, yhdistä laite tietokoneesi sarjaporttiin tai USB-sarjaliitäntäadapteriin. Aukaise jokin terminaaliohjelma, valitse oikea COM-portti ja laita asetuksiksi seuraavat: baud rate 2400, 8 data bits, 1 stop bit, no parity.
Paina yhdistämisnappia ja laita virrat päälle laitteeseen ja mikäli kaikki on kunnossa, tulisi laitteen ledin vilkkua pari kertaa ja terminaaliohjelmasi ruudulla lukea "Hello". Jos ei, niin tarkista kaikki asetukset ja kytkennät.
Mikäli lähetät ohjelmalla A-kirjaimen (iso 'A', ei 'a'), niin ledin tulisi syttyä ja tekstin "ON" tulla ruutuun. Lähettämällä B-kirjaimen, ledi sammuu ja ruudulle tulee teksti "OFF".
/**
* MetkuMods - /
* Kuinka pääset alkuun mikrokontrollereiden kanssa - Osa 2
* Esimerkki 2.5 - Tietokoneeseen yhdistäminen
*
* 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
// Haluttu baudinopeus, 2400 bps toimii hyvin 1 MHz sisäisellä kellolla
#define BAUD 2400
#include <avr/io.h>
#include <avr/interrupt.h>
#include <inttypes.h>
#include <util/delay.h>
#include <util/setbaud.h>
// Ledi pinnissä PB0
#define LED1_PIN 0
// Funktioiden prototyyppejä
void Init_USART(void);
void USART_SendByte(uint8_t data);
uint8_t USART_ReceiveByte(void);
// Pääohjelma
int main(void)
{
// PB0 ulos
DDRB = _BV(LED1_PIN);
// Aseta kaikki pinnit portissa B alas
PORTB = 0x00;
// Aseta UART toimintaan
Init_USART();
// Vilkutellaan lediä pari kertaa, että kaikki ok
PORTB |= _BV(LED1_PIN); // Sytytä ledi
_delay_ms(100); // Odota 100 ms
PORTB &= ~(_BV(LED1_PIN)); // Sammuta ledi
_delay_ms(100);
PORTB |= _BV(LED1_PIN);
_delay_ms(100);
PORTB &= ~(_BV(LED1_PIN));
_delay_ms(100);
// Lähetä lyhyt viesti tietokoneelle lähetyksen testausta varten
// Terminaaliohjelman ruudulle tulisi ilmestyä teksti "Hello"
USART_SendByte('H');
USART_SendByte('e');
USART_SendByte('l');
USART_SendByte('l');
USART_SendByte('o');
USART_SendByte('\n');
// Aktivoi globaalit keskeytykset
sei();
while(1)
{
// Mitään ei tehdä täällä, kaikki työ tehdään keskeytyksissä.
// Tämä looppi tarvitaan silti pitämään kontrolleri toiminnassa.
}
return 0;
}
// Vastaanottokeskeytys, tämä suoritetaan, kun dataa tulee RX-linjaa pitkin
ISR(USART_RXC_vect)
{
uint8_t c;
// Hae tulossa oleva tavu
c = USART_ReceiveByte();
if(c == 'A')
{
// Mikäli vastaanotettu tavu vastaa ASCII-merkkiä A, sytytä ledi
PORTB |= _BV(LED1_PIN);
USART_SendByte('O');
USART_SendByte('N');
USART_SendByte('\n');
}
else if(c == 'B')
{
// Mikäli vastaanotettu tavu vastaa ASCII-merkkiä B, sammuta ledi
PORTB &= ~(_BV(LED1_PIN));
USART_SendByte('O');
USART_SendByte('F');
USART_SendByte('F');
USART_SendByte('\n');
}
}
// UART:n asetus
void Init_USART(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRA = 0x00;
UCSRB |= (1 << RXEN); // RXEN, aktivoi vastaanotto
UCSRB |= (1 << RXCIE); // RXCIE, aktivoi vastaanottokeskeytys
UCSRB |= (1 << TXEN); // TXEN, aktivoi lähetys
UCSRC = 0x86; // 8 Data bits, 1 Stop bits, No Parity
}
// SendByte lähettää halutun tavun TX-linjalle
void USART_SendByte(uint8_t data)
{
// Odotellaan mikäli tavun lähetys on kesken
loop_until_bit_is_set(UCSRA, UDRE);
// Lähetä parametrina saatu data
UDR = data;
}
// ReceiveByte lukee tavun RX-linjalta
uint8_t USART_ReceiveByte(void)
{
// Odotellaan, että tavu on kokonaan vastaanotettu
loop_until_bit_is_set(UCSRA, RXC);
// Palauta vastaanotettu data
return UDR;
}
Yhteenveto
Toivottavasti tämä artikkeli antoi sinulle lisää ideoita mikrokontrollereiden käyttöön. Nämä esimerkit ovat vasta jäävuoren huippu siitä mitä kaikkea mikrokontrollereilla voi tehdä, joten yhdistelemällä erilaisia ominaisuuksia, saat käytettyä niitä rajattomassa määrässä erilaisia sovelluksia. Artikkelin perään voit lähettää kysymyksesi ja kommenttisi, sekä halutessasi ehdottaa ideoita seuraavan osan sisältöön liittyen.
|
Jälleen kerran, muistathan rekisteröityä ja lähettää kuvia rakennelmistasi AllTheModsiin (muutkin modikuvasi ovat toki tervetulleita!) Nähdään kolmannessa osassa! |
Subscribe to Metku.net
Digg It
Save This Page
Stumble it!
Add to Facebook
|
Aiheeseen liittyviä artikkeleja Metkussa:
| | Sivut: 1 2 3 4 5 6 | |


Subscribe to Metku.net
Digg It
Save This Page
Stumble it!
Add to Facebook





Content in english!
Sisältö suomeksi!
