Pins

Pins library provides an easy way for operating with AVR digital input-output pins. The user can create a pin related variable and do all the pin operations with that variable. This way there is no need to deal with the register names and bit indexes like it is done while programming in direct register access method. The pin's port and index must be specified only once, so the changes are easy to implement.

Data Types

  • pin
    Data type to hold pin registers addresses and bit mask. To get the most efficent program, pin typed variables should be constant, and they should be initialized at the beginning of the program code. Intializing can be done with the macro function PIN, whose first parameter is the port letter (capital A, B, C, etc) and the other one being the pin index (0 to 7). Only existing ports and pins can be used.

Constants

  • led_green, led_yellow, led_red - Homelab User interface board LEDs by colour
  • LED1, LED2, LED3 - Homelab User interface board LEDs by LED numbers
  • S1, S2, S3 - Homelab User interface board buttons

Functions

  • void pin_setup_output(pin pin)

Configures pin as an output. Parameters:

  • pin - Pin variable.
  • void pin_setup_input(pin pin)

Configures pin as an input without pull-up resistor. Parameters:

  • pin - Pin variable.
  • void pin_setup_input_with_pullup(pin pin)

Configures pin as an input with pull-up resistor. Parameters:

  • pin - Pin variable.
  • void pin_set(pin pin)

Sets output pin high. Parameters:

  • pin - Pin variable.
  • void pin_clear(pin pin)

Sets output pin low. Parameters:

  • pin - Pin variable.
  • void pin_toggle(pin pin)

Inverts output pin state. Parameters:

  • pin - Pin variable.
  • void pin_set_to(pin pin, bool value)

Sets output pin to desired state. Parameters:

  • pin - Pin variable.
  • value - Desired state boolean value.
  • bool pin_get_value(pin pin)

Gets pin value. Parameters:

  • pin - Pin variable.
  • Return boolean true when pin is high and false when pin is low.
  • bool pin_get_debounced_value(pin pin)

Reads pin value through the switch debounce filter. Filtering takes at least 8 ms and may last up to 100 ms, depending on when the bouncing ends. If the bouncing does not end, false is returned. Function uses software delay. Parameters:

  • pin - Pin variable.
  • Return pin boolean value - true when pin is high and false when pin is low or undetermined.

Example

Example of getting and setting a pin's value. Pin PC0 value is inverted and attached to pin PC3.

#include <homelab/pin.h>
 
pin output_pin = PIN(C, 3);
pin input_pin = PIN(C, 0);
 
int main(void)
{
	bool value;
 
	// Configuring pin as an output pin
	pin_setup_output(output_pin);
 
	// Configuring pin as an input pin with pull-up
	pin_setup_input_with_pullup(input_pin);
 
	// Endless loop
	while (true)
	{
		// Getting an input pin value
		value = pin_get_value(input_pin);
 
		// Setting an output pin value
		pin_set_to(output_pin, !value);
	}
}

led_on, led_off, button_read commands example

#include <homelab/pin.h>
 
// Homelab buttons and LEDs are predefined in the library
 
int main(void)
{
	// Set LED pin as output
	pin_setup_output(led_green);
 
	// Set Button S1 pin as input
	pin_setup_input(S1);
 
	// Endless loop
	while (true)
	{
		// If button is pressed, turn on LED, if not pressed, turn LED off.
		if(button_read(S1) == true)
			led_on(led_green);
		else
			led_off(led_green);
	}
}
en/software/homelab/library/pin.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
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