Saturday, April 25, 2020

ATMega32 controlling DC Motor direction via buttons

This is another digital input output of ATMega32. In this example I use a single Port of PORTC accepting the digital input from button, and output the control to DC motor.

I use L293 for controlling the direction, and also driving the motor at higher voltage and higher current at +12 V.

Three input buttons are Forward, Stop and Backward. Motor is controlled by PC0 and PC1 pin on the same port.






Source Code:


/*
 * controllingMotorStartStop.c
 *
 * Created: 4/25/2020 8:00:39 PM
 * Author : aki-technical
 */ 
#include <avr/io.h>
#define F_CPU 16000000UL
#include "util/delay.h"
//Test the  PINC7 
#define forward (PINC&0b10000000)
//Test the PINC6
#define stop    (PINC&0b01000000)
//Test the PINC5
#define backward (PINC&0b00100000)
//OUTPUT DATA FOR MOTOR
#define run_forward 0b11100001
#define run_backward 0b11100010
#define stop_running 0b11100000

int main(void)
{
    DDRC=0b00011111; //PINC7.5 INPUT
    PORTC=0b11100000; //PC7.5 SET TO HIGH
    /* Replace with your application code */
    while (1) 
    {
        if (forward==0)
        {
            PORTC=stop_running;
            _delay_ms(250);
            PORTC=run_forward;
        }
        else if (stop==0)
        {
            PORTC=stop_running;
            _delay_ms(250);
            PORTC=stop_running;
        }
        else if (backward==0)
        {
            PORTC=stop_running;
            _delay_ms(250);
            PORTC=run_backward;
        }
    }
}

Back to main tutorial page ATMega32 tutorials in C with Atmel Studio 7.

4 comments:

  1. if i want to change the speed of the motor, what should i do?

    ReplyDelete
    Replies
    1. Use PWM https://aki-technical.blogspot.com/2020/06/using-adc-of-atmega32-to-adjust-pwm.html

      Delete
  2. This is just the information I am finding everywhere. Thanks for your blog, I just subscribe your blog. This is a nice blog.. Wohnmobilvermietung Freiburg

    ReplyDelete

Search This Blog

Labels

25AA010A (1) 8051 (7) 93AA46B (1) ADC (30) Analog Comparator (1) Arduino (15) ARM (6) AT89C52 (7) ATMega32 (56) AVR (57) CCS PICC (28) DAC (1) DHT11 (2) Display (105) Distance Sensor (3) DS18B20 (3) dsPIC (2) dsPIC30F1010 (2) EEPROM (5) Environment Sensor (4) esp8266 (1) I2C (29) Input/Output (67) Interrupt (19) Keil (5) Keypad (10) LCD (47) Master/Slave (1) MAX7221 (1) MCP23017 (5) MCP23S17 (4) Meter (3) MikroC (2) Motor (15) MPLABX (71) Nokia 5110 LCD (3) OLED (2) One-Wire (6) Oscillator (8) PCB (6) PCD8544 (3) PCF8574 (5) PIC (107) PIC12F (2) PIC16F628A (2) PIC16F630 (1) PIC16F716 (3) PIC16F818 (10) PIC16F818/819 (2) PIC16F84A (15) PIC16F876A (1) PIC16F877A (9) PIC16F88 (1) PIC16F887 (60) PIC18 (19) PIC18F1220 (4) PIC18F2550 (3) PIC18F4550 (12) PWM (11) RTC (8) Sensor (10) SH1106 (1) Shift Register (11) Shift Registers (3) SPI (24) STM32 (6) STM32 Blue Pill (6) STM32CubeIDE (6) STM32F103C8T6 (6) SysTick (3) temperature sensor (11) Thermometer (21) Timer/Counter (31) TM1637 (2) UART (7) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (94)