[FPGA] FPGA+ AVR Buzzer + Motor

2021. 11. 12. 22:05코딩/FPGA

main.c

#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#include "button.h"

#define PWM_ADDR_DDR	DDRD
#define PWM_ADDR_PORT	PORTD
#define PWM_DATA_DDR	DDRF
#define PWM_DATA_PORT	PORTF

#define PWM_CLK_DDR		DDRD
#define PWM_EN_DDR		DDRD
#define PWM_CS_DDR		DDRD
#define PWM_CLK_PORT	PORTD
#define PWM_EN_PORT		PORTD
#define PWM_CS_PORT		PORTD

#define sw0_PORT		PORTD
#define sw0_DDR			DDRD
#define sw1_PORT		PORTD
#define sw1_DDR			DDRD

#define PWM_ADDR	0
#define PWM_CLK		1
#define PWM_EN		2
#define PWM_CS		3
#define sw0			4
#define sw1			5

void pwmInit()
{
	PWM_ADDR_DDR |= (1<<PWM_ADDR);
	PWM_DATA_DDR = 0xff;
	PWM_CLK_DDR |= (1<<PWM_CLK);
	PWM_EN_DDR |= (1<<PWM_EN);
	PWM_CS_DDR |= (1<<PWM_CS);
	
	sw0_DDR |= (1<<sw0);
	sw1_DDR |= (1<<sw1);
}
#define ON	1
#define OFF	0

void buzzerSound(uint8_t onOff)
{
	if (onOff == ON)
	{
		PWM_EN_PORT |= (1<<PWM_EN);
	}
	else
	{
		PWM_EN_PORT &= ~(1<<PWM_EN);
	}
}

void buzzerHzValue(uint16_t hz)
{
	PWM_CS_PORT &= ~(1<<PWM_CS);					//LOW Chip Selet
	PWM_ADDR_PORT = (PWM_ADDR_PORT & 0xfe)	| 0;	//Addr 0
	PWM_DATA_PORT = (uint8_t)hz;					//Data

	PWM_CLK_PORT &= ~(1<<PWM_CLK);					//write
	PWM_CLK_PORT |= (1<<PWM_CLK);
	PWM_CLK_PORT &= ~(1<<PWM_CLK);
	
	PWM_CS_PORT &= ~(1<<PWM_CS);					//LOW Chip Selet
	PWM_ADDR_PORT = (PWM_ADDR_PORT & 0xfe)	| 1;	//Addr 1
	PWM_DATA_PORT = (uint8_t)(hz>>8);					//Data

	PWM_CLK_PORT &= ~(1<<PWM_CLK);					//write
	PWM_CLK_PORT |= (1<<PWM_CLK);
	PWM_CLK_PORT &= ~(1<<PWM_CLK);
	
}

void buzzButton1()
{
	buzzerSound(ON);
	buzzerHzValue(2050);
	sw0_PORT &= ~(1<<sw0);
	sw1_PORT &= ~(1<<sw1);
	_delay_ms(500);
	buzzerSound(OFF);
	
}

void buzzButton2()
{
	buzzerSound(ON);
	buzzerHzValue(2480);
	sw0_PORT |= (1<<sw0);
	sw1_PORT &= ~(1<<sw1);
	_delay_ms(500);
	buzzerSound(OFF);
	
}

void buzzButton3()
{
	buzzerSound(ON);
	buzzerHzValue(2880);
	sw0_PORT &= ~(1<<sw0);
	sw1_PORT |= (1<<sw1);
	_delay_ms(500);
	buzzerSound(OFF);
	
}

void buzzButton4()
{
	buzzerSound(ON);
	buzzerHzValue(3100);
	sw0_PORT |= (1<<sw0);
	sw1_PORT |= (1<<sw1);
	_delay_ms(500);
	buzzerSound(OFF);
}


int main(void)
{
	pwmInit();
	
	
	
	while (1)
	{
		if (getButton1State())
		{
			buzzButton1();
		}
		if (getButton2State())
		{
			buzzButton2();
		}
		if (getButton3State())
		{
			buzzButton3();
		}
		if (getButton4State())
		{
			buzzButton4();
		}
	}
}

 

 

'코딩 > FPGA' 카테고리의 다른 글

[FPGA] 세탁기 프로젝트  (0) 2021.11.30
[FPGA]FPGA 보드에 CPU 코어 만들기 MicroBlaze 사용  (0) 2021.11.17
[FPGA] FPGA + AVR StopWatch  (0) 2021.11.12
FPGA IP PACKAGE 하는 방법  (0) 2021.11.12
[FPGA] Stopwatch + Clock + LED bar  (0) 2021.11.10