[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 |