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.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)
 

How to get started with microcontrollers - Part 2
Esimerki 2.5

 

How to get started with microcontrollers - Part 2
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:


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


Monikerroskaiverruksen animointi


Vilkkuvalot part 2


Modaajan lyhyt sähköoppi


ColorFade


HDD Eyez




Sivut:   1 2 3 4 5 6 



 
  Content in english!
  Sisältö suomeksi!


 Google





 .: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