[ADD] files to include
This commit is contained in:
132
Microcontrollers/Eindopdracht/lcd_control.c
Normal file
132
Microcontrollers/Eindopdracht/lcd_control.c
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
* lcd_controlc.c
|
||||||
|
*
|
||||||
|
* Created: 24-2-2021 11:55:12
|
||||||
|
* Author: Sem
|
||||||
|
*/
|
||||||
|
#define F_CPU 10e6
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "lcd_control.h"
|
||||||
|
|
||||||
|
void _delay_ms(double __ms);
|
||||||
|
|
||||||
|
void lcd_clear() {
|
||||||
|
lcd_write_command (0x01); //Leeg display
|
||||||
|
_delay_ms(2);
|
||||||
|
lcd_write_command (0x80); //Cursor terug naar start
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_strobe_lcd_e(void) {
|
||||||
|
|
||||||
|
sbi_porta(LCD_E); // E high
|
||||||
|
_delay_ms(1);
|
||||||
|
cbi_porta(LCD_E); // E low
|
||||||
|
_delay_ms(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void sbi_portc(int index){
|
||||||
|
PORTC |= (1<<index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cbi_portc(int index){
|
||||||
|
PORTC &= ~(1<<index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sbi_porta(int index){
|
||||||
|
PORTA |= (1<<index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cbi_porta(int index){
|
||||||
|
PORTA &= ~(1<<index);
|
||||||
|
}
|
||||||
|
|
||||||
|
void init_4bits_mode(void) {
|
||||||
|
|
||||||
|
// PORTC output mode and all low (also E and RS pin)
|
||||||
|
|
||||||
|
// Init I/O
|
||||||
|
DDRC = 0xFF; // PORTD(7) output, PORTD(6:0) input
|
||||||
|
PORTC = 0xFF;
|
||||||
|
|
||||||
|
DDRA = 0xFF;
|
||||||
|
PORTC = 0x00;
|
||||||
|
PORTA = 0x00;
|
||||||
|
|
||||||
|
PORTC = 0x20; // function for 4-bit 1 row
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
PORTC = 0x20; // function high nibble 4-bit 2 row
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
PORTC = 0x80; // function low nibble 4-bit 2 row
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
PORTC = 0x00; // function high nibble turn on visible blinking-block cursor
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
PORTC = 0xF0; // function low nibble turn on visible blinking-block cursor
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
PORTC = 0x00; // Entry mode set high nibble
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
PORTC = 0x60; // Entry mode set low nibble
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
// return home
|
||||||
|
lcd_write_command(0x02);
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_write_character(unsigned char byte){
|
||||||
|
|
||||||
|
|
||||||
|
//upper nibble
|
||||||
|
PORTC = byte;
|
||||||
|
sbi_porta(LCD_RS);
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
//lower nibble
|
||||||
|
PORTC = (byte<<4);
|
||||||
|
sbi_porta(LCD_RS);
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_write_command(unsigned char byte){
|
||||||
|
|
||||||
|
//upper nibble
|
||||||
|
PORTC = byte;
|
||||||
|
cbi_porta(LCD_RS);
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
//lower nibble
|
||||||
|
PORTC = (byte<<4);
|
||||||
|
cbi_porta(LCD_RS);
|
||||||
|
lcd_strobe_lcd_e();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_write_string(const char *str) {
|
||||||
|
|
||||||
|
for(;*str; str++){
|
||||||
|
lcd_write_character(*str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_move_right(void){
|
||||||
|
|
||||||
|
lcd_write_command(0x1E);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_write_int(int number)
|
||||||
|
{
|
||||||
|
int length = snprintf(NULL, 0, "%d", number);
|
||||||
|
char str[length + 1];
|
||||||
|
snprintf(str, length + 1, "%d", number);
|
||||||
|
lcd_write_string(str);
|
||||||
|
}
|
||||||
30
Microcontrollers/Eindopdracht/lcd_control.h
Normal file
30
Microcontrollers/Eindopdracht/lcd_control.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* lcd_control.h
|
||||||
|
*
|
||||||
|
* Created: 24-2-2021 11:56:16
|
||||||
|
* Author: Sem
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef LCD_CONTROL_H_
|
||||||
|
#define LCD_CONTROL_H_
|
||||||
|
|
||||||
|
#define LCD_E 6
|
||||||
|
#define LCD_RS 4
|
||||||
|
|
||||||
|
void _delay_ms(double __ms);
|
||||||
|
void lcd_strobe_lcd_e(void);
|
||||||
|
void sbi_portc(int index);
|
||||||
|
void cbi_portc(int index);
|
||||||
|
void sbi_porta(int index);
|
||||||
|
void cbi_porta(int index);
|
||||||
|
void init_4bits_mode(void);
|
||||||
|
void lcd_write_string(const char *str);
|
||||||
|
void lcd_write_character(unsigned char byte);
|
||||||
|
void lcd_write_command(unsigned char byte);
|
||||||
|
void lcd_clear();
|
||||||
|
void lcd_write_int(int number);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* LCD_CONTROL_H_ */
|
||||||
91
Microcontrollers/Eindopdracht/ultrasonic_sensor.c
Normal file
91
Microcontrollers/Eindopdracht/ultrasonic_sensor.c
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* ultrasonic_sensor.c
|
||||||
|
*
|
||||||
|
* Created: 24-3-2021 13:04:52
|
||||||
|
* Author: Sem
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define F_CPU 10e6
|
||||||
|
|
||||||
|
#include <avr/io.h>
|
||||||
|
#include <util/delay.h>
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
|
||||||
|
#include "lcd_control.h"
|
||||||
|
|
||||||
|
static uint16_t timer_dist = 0;
|
||||||
|
|
||||||
|
enum interrupt_status {INTERRUPT_FALLING, INTERRUPT_RISING};
|
||||||
|
|
||||||
|
static enum interrupt_status int_stat = INTERRUPT_RISING;
|
||||||
|
|
||||||
|
void wait_us(unsigned int us)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < us; i++)
|
||||||
|
{
|
||||||
|
_delay_us(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wait_ms(unsigned int ms)
|
||||||
|
{
|
||||||
|
|
||||||
|
for(int i = 0; i < ms; i++)
|
||||||
|
{
|
||||||
|
_delay_ms(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ultrasonic_init()
|
||||||
|
{
|
||||||
|
DDRG = 0xFF; // port g all output. pin 0 is trig, the rest is for debug
|
||||||
|
DDRD = 0x00; // port D pin 0 on input. 0 is echo and also interrupt
|
||||||
|
|
||||||
|
EICRA = 0x03; // interrupt PORTD on pin 0, rising edge
|
||||||
|
|
||||||
|
EIMSK |= 0x01; // enable interrupt on pin 0 (INT0)
|
||||||
|
|
||||||
|
TCCR1A = 0b00000000; // initialize timer1, prescaler=256
|
||||||
|
TCCR1B = 0b00001100; // CTC compare A, RUN
|
||||||
|
|
||||||
|
sei(); // turn on interrupt system
|
||||||
|
}
|
||||||
|
|
||||||
|
void ultrasonic_send_pulse()
|
||||||
|
{
|
||||||
|
PORTG = 0x00; // 10 us low pulse
|
||||||
|
wait_us(10);
|
||||||
|
PORTG = 0x01;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ultrasonic_handle_interrupt()
|
||||||
|
{
|
||||||
|
// if the interrupt was generated on a rising edge (start sending echo)
|
||||||
|
if (int_stat == INTERRUPT_RISING)
|
||||||
|
{
|
||||||
|
// set interrupt pin 0 on PORTD to falling edge
|
||||||
|
EICRA = 0x02;
|
||||||
|
|
||||||
|
// reset the time in timer1
|
||||||
|
TCNT1 = 0x00;
|
||||||
|
|
||||||
|
// set interrupt status
|
||||||
|
int_stat = INTERRUPT_FALLING;
|
||||||
|
} else
|
||||||
|
// else if it was generated on a falling edge (end sending echo)
|
||||||
|
{
|
||||||
|
// set interrupt pin 0 on PORTD to rising edge
|
||||||
|
EICRA = 0x03;
|
||||||
|
|
||||||
|
// read timer1 into time_dist
|
||||||
|
timer_dist = TCNT1;
|
||||||
|
|
||||||
|
// set interrupt status
|
||||||
|
int_stat = INTERRUPT_RISING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t ultrasonic_get_timer_dist()
|
||||||
|
{
|
||||||
|
return timer_dist;
|
||||||
|
}
|
||||||
|
|
||||||
12
Microcontrollers/Eindopdracht/ultrasonic_sensor.h
Normal file
12
Microcontrollers/Eindopdracht/ultrasonic_sensor.h
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
/*
|
||||||
|
* ultrasonic_sensor.h
|
||||||
|
*
|
||||||
|
* Created: 24-3-2021 13:14:50
|
||||||
|
* Author: Sem
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
void ultrasonic_init();
|
||||||
|
void ultrasonic_send_pulse();
|
||||||
|
uint16_t ultrasonic_get_timer_dist();
|
||||||
|
void ultrasonic_handle_interrupt();
|
||||||
Reference in New Issue
Block a user