This is an old revision of the document!


Digitaalsed sisend-väljundid

Laborikomplekti ühendamine

  1. Ühendage ribakaabli abil Atmega128 plaat Digitaal i/o plaadiga

Atmega128 pistik: PA-PC ja digitaalplaadi pistik PA-PC

  1. Ühendage JTAG programmaator Atmega128 plaagi JTAG pistikuga
  2. Ühendage Atmega128 plaagi toide (+9 V)

Digitaalsed sisend-väljundid

Demoplaadil ‚Basic’ on kolm valgusdioodi (LED) ja kolm mikrolülitit. Valgusdioodid on ühendatud porti PORTC[3..5] ja lülitid PORTC[0..2]. Harjutuse eesmärgiks on luua C kood, kus vastava lüliti vajutamisel süttib vastav LED.

Ühendusskeem

Programmi kood

/* Labor 1 näide
Harjutus töötab laborikaardiga Basic v3
 
Vajutades nupule S1 süttib LED 1
vajutades nupule S2 süttib LED 2
vajutades nupule S3 süttib LED 3
Raivo Sell 2008
 
LED = 0 (põleb)  		LED = 1 (kustunud)
S	= 0 (lülitui sees) 	S	= 1 (lüliti väljas)
 
PORDI suuna konfigureerimine: 1-väljund	0-sisend */
 
#include <avr\io.h>
 
//defineeritakse kõrge bit pordis x
#define SET(x) |= (1<<x)  
 
//defineeritakse madal bit pordis x
#define CLR(x) &=~(1<<x)  
 
int main(void) {
 
    DDRC  = 0x38;  // DDRC  0bXX111000
    PORTC = 0x3F;  // PORTC 0bXX111111
 
	//Lõputu tsükkel
	while(1) {
		// Kui toimub nupule vajutus
		if (bit_is_clear(PINC, 0))	//Nupp S1
			PORTC CLR(3); //LED 1 sisse
		else if (bit_is_clear(PINC, 1))//Nupp S2
			PORTC CLR(4); //LED 2 sisse
		else if (bit_is_clear(PINC, 2))//Nupp S3
			PORTC CLR(5); //LED 3 sisse
		else //Kui pole midagi vajutatud
			PORTC=0xFF;		//LED lülitatakse välja (LED=1)
	}
}

Kompileeritud näide HEX


Nupu sädeluse ellimineerimine

Algallikas: Micah Carrick tutorial

#define BUTTON_PORT PORTC       /* PORTx - nupu register */
#define BUTTON_PIN PINC         /* PINx - nupu sisendi register */
#define BUTTON_BIT PC0          /* nupu sisend/väljund bit */
 
#include <avr/io.h>;
#include <util/delay.h>;
 
int nupuvajutus()
{
        /* nupp on all kui BIT on madal (0) */
        if (bit_is_clear(BUTTON_PIN, BUTTON_BIT))
        {
                _delay_ms(25); /* nupu sädeluse ooteaeg "de-bouncing" */
                if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return 1;
        }
 
        return 0;
}
 
int main (void){
 
        /* lülitab sisse sisemised 'pull-up' takistid */
        BUTTON_PORT |= _BV(BUTTON_BIT)
        if (button_is_pressed()){
                        //  tee midagi
                        // oota kui vaja
        }
}
et/examples/digi/io.1262876332.txt.gz · Last modified: 2020/07/20 09:00 (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0