Skip to content

Commit e6a79b1

Browse files
first commit
0 parents  commit e6a79b1

31 files changed

+1308
-0
lines changed

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
cmake-build-debug
2+
cmake-build-release
3+
cmake-build-*
4+
5+
output
6+
.idea

CMakeLists.txt

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
cmake_minimum_required(VERSION 3.15)
2+
3+
#============================================================================================>
4+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/output")
5+
#============================================================================================>
6+
option(USE_ATMEL "USE ATML" on)
7+
8+
9+
if (USE_ATMEL)
10+
set(CMAKE_FIND_ROOT_PATH "C:/Program Files/Microchip/xc8/v2.36")
11+
else(USE_ATMEL)
12+
set(CMAKE_FIND_ROOT_PATH "F:/AVR/WinAVR")
13+
endif ()
14+
15+
set(AVR_MCU atmega32)
16+
set(MCU_SPEED "16000000UL")
17+
18+
#============================================================================================>
19+
if (USE_ATMEL)
20+
set(AVR_CC ${CMAKE_FIND_ROOT_PATH}/bin/xc8-cc.exe)
21+
set(AVR_CXX ${CMAKE_FIND_ROOT_PATH}/bin/xc8-cc.exe)
22+
23+
else(USE_ATMEL)
24+
set(AVR_CC ${CMAKE_FIND_ROOT_PATH}/bin/avr-gcc.exe)
25+
set(AVR_CXX ${CMAKE_FIND_ROOT_PATH}/bin/avr-g++.exe)
26+
endif ()
27+
28+
set(AVR_OBJCOPY ${CMAKE_FIND_ROOT_PATH}/bin/avr-objcopy.exe)
29+
set(AVR_OBJDUMP ${CMAKE_FIND_ROOT_PATH}/bin/avr-objdump.exe)
30+
31+
set(CMAKE_SYSTEM_NAME Generic)
32+
set(CMAKE_CXX_COMPILER ${AVR_CXX} CACHE STRING "c++ compiler" FORCE)
33+
set(CMAKE_C_COMPILER ${AVR_CC} CACHE STRING "c compiler" FORCE)
34+
set(CMAKE_OBJCOPY ${AVR_OBJCOPY} CACHE STRING "AVR OBJCOPY" FORCE)
35+
36+
set (CMAKE_CXX_FLAGS "-std=c++11 -mmcu=${AVR_MCU} -O1 -DF_CPU=${MCU_SPEED} ${CMAKE_CXX_FLAGS}")
37+
38+
#============================================================================================>
39+
PROJECT(DIO-CPP CXX)
40+
#============================================================================================>
41+
if(NOT CMAKE_BUILD_TYPE)
42+
set(CMAKE_BUILD_TYPE Release)
43+
endif(NOT CMAKE_BUILD_TYPE)
44+
#============================================================================================>
45+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
46+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
47+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
48+
set(CMAKE_SYSTEM_INCLUDE_PATH "${CMAKE_FIND_ROOT_PATH}/avr/avr/include")
49+
set(CMAKE_SYSTEM_LIBRARY_PATH "${CMAKE_FIND_ROOT_PATH}/avr/avr/lib")
50+
#============================================================================================>
51+
52+
#============================================================================================>
53+
#add_definitions("-DF_CPU=${MCU_SPEED}")
54+
#add_definitions("-fpack-struct")
55+
#add_definitions("-fshort-enums")
56+
#add_definitions("-Wall")
57+
#add_definitions("-Werror")
58+
#add_definitions("-pedantic")
59+
#add_definitions("-pedantic-errors")
60+
#add_definitions("-funsigned-char")
61+
#add_definitions("-funsigned-bitfields")
62+
#add_definitions("-ffunction-sections")
63+
#add_definitions("-c")
64+
#============================================================================================>
65+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/mcal)
66+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/lib)
67+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/hal)
68+
#============================================================================================>
69+
add_subdirectory(src)
70+
#============================================================================================>
71+
set(APP_SOURCES ${APP_SOURCES})
72+
#============================================================================================>
73+
set(elf_file ${PROJECT_NAME}.elf)
74+
set(hex_file ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.hex)
75+
#============================================================================================>
76+
#add_avr_executable(${PROJECT_NAME} ${APP_SOURCES})
77+
add_executable(${elf_file} ${APP_SOURCES})
78+
#============================================================================================>
79+
add_custom_target(
80+
OUTPUT ALL
81+
DEPENDS ${elf_file}
82+
COMMAND ${AVR_OBJCOPY} -j .text -j .data -O ihex ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${elf_file} ${hex_file}
83+
)
84+
#============================================================================================>
85+
86+

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"# avr-c-driver-exercises"

src/CMakeLists.txt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
add_subdirectory(mcal)
2+
add_subdirectory(lib)
3+
add_subdirectory(hal)
4+
5+
set(APP_SOURCES
6+
${APP_SOURCES}
7+
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
8+
PARENT_SCOPE
9+
)

src/hal/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
add_subdirectory(buzzer)
2+
add_subdirectory(led)
3+
add_subdirectory(lcd)
4+
add_subdirectory(keypad)
5+
6+
set(APP_SOURCES ${APP_SOURCES} PARENT_SCOPE)

src/hal/buzzer/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
set(APP_SOURCES
3+
${APP_SOURCES}
4+
5+
${CMAKE_CURRENT_SOURCE_DIR}/buzzer.cpp
6+
${CMAKE_CURRENT_SOURCE_DIR}/buzzer.h
7+
8+
PARENT_SCOPE)

src/hal/buzzer/buzzer.cpp

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
By : Ahmed Elsayed Abdulrahman Ali
3+
4+
github : https://github.com/MrAhmedSayedAli
5+
*/
6+
7+
#define __DELAY_BACKWARD_COMPATIBLE__
8+
#include "util/delay.h"
9+
#include "buzzer.h"
10+
11+
12+
namespace HAL {
13+
Buzzer::Buzzer(DIO::Channel ChannelID,STD_LevelType level) {
14+
ChannelId = ChannelID;
15+
dio.writeDirection(ChannelId,DIO::Direction::OUTPUT);
16+
dio.writeChannel(ChannelId,level);
17+
}
18+
19+
//----------------------------------------------->
20+
void Buzzer::on() {
21+
dio.writeChannel(ChannelId, STD_LevelType::HIGH);
22+
}
23+
24+
//----------------------------------------------->
25+
void Buzzer::off() {
26+
dio.writeChannel(ChannelId, STD_LevelType::LOW);
27+
}
28+
29+
//----------------------------------------------->
30+
void Buzzer::tone(float frequency, float duration) {
31+
32+
long int i, cycles;
33+
double half_period;
34+
float wavelength;
35+
36+
wavelength = (1 / frequency) * 1000;
37+
cycles = duration / wavelength;
38+
half_period = wavelength / 2;
39+
//
40+
// unsigned long startTime = millis();
41+
// unsigned long halfPeriod= F_CPU /frequency/2;
42+
43+
for (i = 0; i < cycles; i++) {
44+
on();
45+
_delay_ms(half_period);
46+
off();
47+
_delay_ms(half_period);
48+
}
49+
}
50+
} // HAL

src/hal/buzzer/buzzer.h

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/*
2+
By : Ahmed Elsayed Abdulrahman Ali
3+
4+
github : https://github.com/MrAhmedSayedAli
5+
*/
6+
7+
#ifndef DIO_CPP_BUZZER_H
8+
#define DIO_CPP_BUZZER_H
9+
10+
11+
#include "dio/dio.h"
12+
13+
#define NOTE_B0 31
14+
#define NOTE_C1 33
15+
#define NOTE_CS1 35
16+
#define NOTE_D1 37
17+
#define NOTE_DS1 39
18+
#define NOTE_E1 41
19+
#define NOTE_F1 44
20+
#define NOTE_FS1 46
21+
#define NOTE_G1 49
22+
#define NOTE_GS1 52
23+
#define NOTE_A1 55
24+
#define NOTE_AS1 58
25+
#define NOTE_B1 62
26+
#define NOTE_C2 65
27+
#define NOTE_CS2 69
28+
#define NOTE_D2 73
29+
#define NOTE_DS2 78
30+
#define NOTE_E2 82
31+
#define NOTE_F2 87
32+
#define NOTE_FS2 93
33+
#define NOTE_G2 98
34+
#define NOTE_GS2 104
35+
#define NOTE_A2 110
36+
#define NOTE_AS2 117
37+
#define NOTE_B2 123
38+
#define NOTE_C3 131
39+
#define NOTE_CS3 139
40+
#define NOTE_D3 147
41+
#define NOTE_DS3 156
42+
#define NOTE_E3 165
43+
#define NOTE_F3 175
44+
#define NOTE_FS3 185
45+
#define NOTE_G3 196
46+
#define NOTE_GS3 208
47+
#define NOTE_A3 220
48+
#define NOTE_AS3 233
49+
#define NOTE_B3 247
50+
#define NOTE_C4 262
51+
#define NOTE_CS4 277
52+
#define NOTE_D4 294
53+
#define NOTE_DS4 311
54+
#define NOTE_E4 330
55+
#define NOTE_F4 349
56+
#define NOTE_FS4 370
57+
#define NOTE_G4 392
58+
#define NOTE_GS4 415
59+
#define NOTE_A4 440
60+
#define NOTE_AS4 466
61+
#define NOTE_B4 494
62+
#define NOTE_C5 523
63+
#define NOTE_CS5 554
64+
#define NOTE_D5 587
65+
#define NOTE_DS5 622
66+
#define NOTE_E5 659
67+
#define NOTE_F5 698
68+
#define NOTE_FS5 740
69+
#define NOTE_G5 784
70+
#define NOTE_GS5 831
71+
#define NOTE_A5 880
72+
#define NOTE_AS5 932
73+
#define NOTE_B5 988
74+
#define NOTE_C6 1047
75+
#define NOTE_CS6 1109
76+
#define NOTE_D6 1175
77+
#define NOTE_DS6 1245
78+
#define NOTE_E6 1319
79+
#define NOTE_F6 1397
80+
#define NOTE_FS6 1480
81+
#define NOTE_G6 1568
82+
#define NOTE_GS6 1661
83+
#define NOTE_A6 1760
84+
#define NOTE_AS6 1865
85+
#define NOTE_B6 1976
86+
#define NOTE_C7 2093
87+
#define NOTE_CS7 2217
88+
#define NOTE_D7 2349
89+
#define NOTE_DS7 2489
90+
#define NOTE_E7 2637
91+
#define NOTE_F7 2794
92+
#define NOTE_FS7 2960
93+
#define NOTE_G7 3136
94+
#define NOTE_GS7 3322
95+
#define NOTE_A7 3520
96+
#define NOTE_AS7 3729
97+
#define NOTE_B7 3951
98+
#define NOTE_C8 4186
99+
#define NOTE_CS8 4435
100+
#define NOTE_D8 4699
101+
#define NOTE_DS8 4978
102+
#define REST 0
103+
104+
namespace HAL {
105+
106+
class Buzzer {
107+
public:
108+
explicit Buzzer(DIO::Channel ChannelID,STD_LevelType level = STD_LevelType::LOW);
109+
void tone(float frequency, float duration);
110+
void on();
111+
void off();
112+
private:
113+
DIO::Dio dio;
114+
DIO::Channel ChannelId;
115+
};
116+
117+
} // HAL
118+
119+
#endif //DIO_CPP_BUZZER_H

src/hal/keypad/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
set(APP_SOURCES
3+
${APP_SOURCES}
4+
5+
${CMAKE_CURRENT_SOURCE_DIR}/keypad.cpp
6+
${CMAKE_CURRENT_SOURCE_DIR}/keypad.h
7+
8+
PARENT_SCOPE)

0 commit comments

Comments
 (0)