Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:examples:digi:io [2009/04/09 06:31] raivo.sellen:examples:digi:io [2010/02/04 12:28] (current) – removed mikk.leini
Line 1: Line 1:
-====== Digito i/o with Studyboard ====== 
-{{:et:naited:digi:io.jpg?300|}} 
- 
-Studyboard ‚Basic’ includes three outputs (LED) and three inputs (microswitch) 
-LEDs are connected to PORTC[3..5] and switches PORTC[0..2].  
- 
-This simple examples demonstrates how to switch on LED when pushing appropriate switch. 
- 
-==== Connection schema: ==== 
- 
-{{:et:harjutused:digi:1a_skeem.jpg?500|}} 
- 
-==== Example C code: ==== 
- 
-<code c> 
-/* Labor 1 example 
- 
-Description: Example works with Studyboard Basic v3 
-Press S1 - LED1 goes ON; S2 - LED2 goes ON; S3 - LED3 goes ON 
-LED = 0 (ON)  LED = 1 (OFF) 
-S= 0 (ON) S= 1 (OFF) 
-PORT direction: 1-output 0-input  
- 
-Author: Raivo Sell 2008 
-*/ 
- 
-#include <avr/io.h> 
- 
-#define F_CPU 14745600UL 
-//Definitions for easier bit manipulations 
-#define SET(x) |= (1<<x)  //bit high in port x 
-#define CLR(x) &=~(1<<x)  //bit low in port x 
- 
-int main(void) { //main program 
- 
-    DDRC  = 0x38;  // DDRC  0bXX111000 
-    PORTC = 0x3F;  // PORTC 0bXX111111 
- 
- //endless loop 
- while(1) { 
- // if button is pressed (pin is low) 
- if (bit_is_clear(PINC, 0)) //Switch S1 
- PORTC CLR(3); //LED 1 ON 
- else if (bit_is_clear(PINC, 1))//Switch S2 
- PORTC CLR(4); //LED 2 ON 
- else if (bit_is_clear(PINC, 2))//Switch S3 
- PORTC CLR(5); //LED 3 ON 
- else // If nothing is pressed 
- PORTC=0xFF; //All LEDs OFF (LED=1) 
- } 
-} 
-</code> 
- 
-==== Example (short version) ==== 
- 
- 
-<code c> 
-/* Lab 1 example 
-Author: Maido Hiiemaa 
-Date: 2009 
-*/ 
- 
-#include <avr/io.h> 
- 
-int main(void) { 
-     DDRC  = 0x38;  //  (00111000) 
-     while(1) { 
-        PORTC &= ~((PINC << 3) | 0xC7 ); // zeros 
- PORTC |= ((PINC << 3) & ~0xC7 ); // ones 
-        } 
-} 
-</code> 
- 
- 
-==== Elliminating bouncing ==== 
- 
-Source: [[http://www.micahcarrick.com/05-15-2006/avr-tutorial-switch-debounce.html|Micah Carrick tutorial]] 
- 
-<code c> 
-#include <avr/io.h> 
-#include <util/delay.h> 
- 
-#define BUTTON_PORT PORTC       /* PORTx - nupu register */ 
-#define BUTTON_PIN PINC         /* PINx - nupu sisendi register */ 
-#define BUTTON_BIT PC0          /* nupu sisend/väljund bit */ 
-  
-int button_is_pressed() 
-{ 
-        /* button is on when BIT is low (0) */ 
-        if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) 
-        { 
-                _delay_ms(25); /* de-bouncing delay time */ 
-                if (bit_is_clear(BUTTON_PIN, BUTTON_BIT)) return 1; 
-        } 
-  
-        return 0; 
-} 
-  
-int main (void){ 
-  
-        /* switch on internel pull-ups */ 
-        BUTTON_PORT |= _BV(BUTTON_BIT); 
-        if (button_is_pressed()){ 
-                        //  do somthing 
-                        // wait if needed 
-        } 
-} 
-</code> 
  
en/examples/digi/io.1239258690.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