Compare commits
6
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53db135840 | ||
|
|
6315234d40 | ||
|
|
3e56a4b910 | ||
|
|
afb28ad70b | ||
|
|
8fcf65ba66 | ||
|
|
7819975461 |
@@ -0,0 +1,37 @@
|
|||||||
|
#include "device_adc.h"
|
||||||
|
|
||||||
|
uint16_t value = 0;
|
||||||
|
char high_adc = 0, low_adc = 0;
|
||||||
|
|
||||||
|
ISR(ADC_vect)
|
||||||
|
{
|
||||||
|
low_adc = ADCL;
|
||||||
|
high_adc = ADCH;
|
||||||
|
value = (high_adc << 8) | low_adc;
|
||||||
|
}
|
||||||
|
|
||||||
|
void adc_init(void)
|
||||||
|
{
|
||||||
|
// Опорное напряжение на входе AREF
|
||||||
|
ADMUX &= ~REFS0_MASK;
|
||||||
|
// Выравнивание результата вправо
|
||||||
|
ADMUX &= ~ADLAR_MASK;
|
||||||
|
// Коммутация выбранного входа с АЦП (ADC0)
|
||||||
|
ADMUX &= ~(MUX3_MASK | MUX2_MASK | MUX1_MASK | MUX0_MASK);
|
||||||
|
// Разерешение работы АЦП
|
||||||
|
ADCSRA |= ADEN_MASK;
|
||||||
|
// Запуск работы АЦП
|
||||||
|
ADCSRA |= ADSC_MASK;
|
||||||
|
// Предделитель частоты (128)
|
||||||
|
ADCSRA |= ADPS2_MASK | ADPS1_MASK | ADPS0_MASK;
|
||||||
|
// Разрешение прерывания от АЦП
|
||||||
|
ADCSRA |= ADIE_MASK;
|
||||||
|
// Непрерывный режим работы АЦП
|
||||||
|
ADCSRA |= ADATE_MASK;
|
||||||
|
sei();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint16_t get_adc_value(void)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#ifndef DEVICE_ADC_H
|
||||||
|
#define DEVICE_ADC_H
|
||||||
|
|
||||||
|
#include <avr/interrupt.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <avr/io.h>
|
||||||
|
#define F_CPU 16000000
|
||||||
|
|
||||||
|
#define REFS1_BIT (7)
|
||||||
|
#define REFS1_MASK (1<<REFS1_BIT)
|
||||||
|
#define REFS0_BIT (6)
|
||||||
|
#define REFS0_MASK (1<<REFS0_BIT)
|
||||||
|
#define ADLAR_BIT (5)
|
||||||
|
#define ADLAR_MASK (1<<ADLAR_BIT)
|
||||||
|
#define MUX3_BIT (3)
|
||||||
|
#define MUX3_MASK (1<<MUX3_BIT)
|
||||||
|
#define MUX2_BIT (2)
|
||||||
|
#define MUX2_MASK (1<<MUX2_BIT)
|
||||||
|
#define MUX1_BIT (1)
|
||||||
|
#define MUX1_MASK (1<<MUX1_BIT)
|
||||||
|
#define MUX0_BIT (0)
|
||||||
|
#define MUX0_MASK (1<<MUX0_BIT)
|
||||||
|
#define ADEN_BIT (7)
|
||||||
|
#define ADEN_MASK (1<<ADEN_BIT)
|
||||||
|
#define ADPS2_BIT (2)
|
||||||
|
#define ADPS2_MASK (1<<ADPS2_BIT)
|
||||||
|
#define ADPS1_BIT (1)
|
||||||
|
#define ADPS1_MASK (1<<ADPS1_BIT)
|
||||||
|
#define ADPS0_BIT (0)
|
||||||
|
#define ADPS0_MASK (1<<ADPS0_BIT)
|
||||||
|
#define ADSC_BIT (6)
|
||||||
|
#define ADSC_MASK (1<<ADSC_BIT)
|
||||||
|
#define ADIF_BIT (4)
|
||||||
|
#define ADIF_MASK (1<<ADIF_BIT)
|
||||||
|
#define ADIE_BIT (3)
|
||||||
|
#define ADIE_MASK (1<<ADIE_BIT)
|
||||||
|
#define ADATE_BIT (5)
|
||||||
|
#define ADATE_MASK (1<<ADATE_BIT)
|
||||||
|
|
||||||
|
void adc_init(void);
|
||||||
|
uint16_t get_adc_value(void);
|
||||||
|
|
||||||
|
#endif /*DEVICE_C_H*/
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#include "device_address.h"
|
|
||||||
|
|
||||||
uint8_t EEPROM_ReadByte(uint32_t adr)
|
|
||||||
{
|
|
||||||
while (EECR & (1<<EEPE));
|
|
||||||
EEAR = adr;
|
|
||||||
EECR |= (1<<EERE);
|
|
||||||
return EEDR;
|
|
||||||
}
|
|
||||||
|
|
||||||
void EEPROM_WriteByte(uint32_t adr, uint8_t value)
|
|
||||||
{
|
|
||||||
while (EECR & (1<<EEPE));
|
|
||||||
EEAR = adr;
|
|
||||||
EEDR = value;
|
|
||||||
EECR |= (1<<EEMPE);
|
|
||||||
EECR |= (1<<EEPE);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t get_device_address(void)
|
|
||||||
{
|
|
||||||
if(is_valid_device_address())
|
|
||||||
{
|
|
||||||
return EEPROM_ReadByte(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return get_default_address();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_device_address(uint8_t address)
|
|
||||||
{
|
|
||||||
EEPROM_WriteByte(0, address);
|
|
||||||
EEPROM_WriteByte(1, ~address);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t get_default_address(void)
|
|
||||||
{
|
|
||||||
return DEFAULT_MODBUS_ADDRESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int is_valid_device_address(void)
|
|
||||||
{
|
|
||||||
return ((EEPROM_ReadByte(0) ^ EEPROM_ReadByte(1)) == 0xFF);
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
#ifndef DEVICE_ADDRESS_H
|
|
||||||
#define DEVICE_ADDRESS_H
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <avr/io.h>
|
|
||||||
#define DEFAULT_MODBUS_ADDRESS (32)
|
|
||||||
|
|
||||||
uint8_t get_device_address(void);
|
|
||||||
void write_device_address(uint8_t address);
|
|
||||||
uint8_t get_default_address(void);
|
|
||||||
int is_valid_device_address(void);
|
|
||||||
|
|
||||||
#endif /*DEVICE_ADDRESS_H*/
|
|
||||||
Reference in New Issue
Block a user