Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 27 additions & 3 deletions directADC/directADC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,21 @@ void ADC_setReference(ADC_modes ref) {
sei();
}

void ADC_setResolution(uint8_t res)
{
cli();
switch(res)
{
case 10:
ADMUX &= ~(1<<ADLAR); // right adjustment
break;
case 8:
ADMUX |= (1<<ADLAR); //left adjustment
break;
}
sei();
}

/* Включить режим автозапуска АЦП и выбрать его источник. Внимание! Запуск преобразования начинается по ФРОНТУ (RISING) события */
void ADC_autoTriggerEnable(ADC_modes trig) {
cli();
Expand Down Expand Up @@ -185,8 +200,12 @@ void ADC_startConvert() { // ручной запуск преобразован
sei();
}

unsigned int ADC_read() { // склеить и вернуть значение ацп
return ADCL | (ADCH << 8);
unsigned int ADC_read() { // вернуть значение АЦП
return ADC;
}

uint8_t ADC_read8(void) { // вернуть 8-битное значение АЦП
return ADCH;
}

boolean ADC_available() { // проверить готовность АЦП
Expand All @@ -200,7 +219,12 @@ boolean ADC_available() { // проверить готовность АЦП

unsigned int ADC_readWhenAvailable() { // дождаться окончания текущего преобразования,склеить и вернуть результат
while (ADCSRA & (1 << ADSC));
return ADCL | (ADCH << 8);
return ADC;
}

uint8_t ADC_read8WhenAvailable(void) {
while (ADCSRA & (1 << ADSC));
return ADCH;
}

ISR(ADC_vect){ // прерывание ацп
Expand Down
3 changes: 3 additions & 0 deletions directADC/directADC.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,17 @@ void ADC_enable(void); // Включить АЦП
void ADC_disable(void); // Выключить АЦП (default)
void ADC_setPrescaler(byte prescl); // Выбрать делитель частоты АЦП (2, 4, 8, 16, 32, 64, 128) // (default: 2)
void ADC_setReference(ADC_modes ref); // Выбрать источник опорного напряжения АЦП (ADC_1V1, ADC_AREF, ADC_VCC) // (default: ADC_AREF)
void ADC_setResolution(uint8_t res); // Выбрать разрядность АЦП (8, 10) // (default: 10)
void ADC_autoTriggerEnable(ADC_modes trig); // Включить автозапуск АЦП и выбрать событие (FREE_RUN, ANALOG_COMP, ADC_INT0, TIMER0_COMPA, TIMER0_OVF, TIMER1_COMPB, TIMER1_OVF)
void ADC_autoTriggerDisable(void); // Выключить автозапуск АЦП // (default)
void ADC_attachInterrupt(void (*isr)());// Включить прерывание готовности АЦП и выбрать функцию, которая будет при этом выполняться
void ADC_detachInterrupt(void); // Выключить прерывание готовности АЦП // (default)
void ADC_startConvert(void); // Ручной запуск преобразования
unsigned int ADC_read(void); // Прочитать значение регистров АЦП (Вызов до окончания преобразования вернет неверный результат)
uint8_t ADC_read8(void); // То же самое что ADC_read(), но возвращает 8-битный результат
boolean ADC_available(void); // Проверить готовность преобразования АЦП
unsigned int ADC_readWhenAvailable(void); // Дождаться окончания текущего преобразования и вернуть результат
uint8_t ADC_read8WhenAvailable(void); // То же самое что ADC_readWhenAvailable(), но возвращает 8-битный результат
void ACOMP_attachInterrupt(void (*isr)(), ADC_modes source); // Включить прерывание компаратора и выбрать при каком событии оно будет вызвано (FALLING_TRIGGER, RISING_TRIGGER, CHANGE_TRIGGER)
void ACOMP_detachInterrupt(void); // Выключить прерывание компаратора // (default)
void ACOMP_enable(void); // Включить компаратор // (default: Включен)
Expand Down
16 changes: 16 additions & 0 deletions directADC/examples/simple_adc_8bit/simple_adc_8bit.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <directADC.h>
void setup() {
Serial.begin(9600);
ADC_enable();
ADC_setPrescaler(64);
ADC_setReference(ADC_VCC);
setAnalogMux(ADC_A0);
ADC_setResolution(8);
}

void loop() {
ADC_startConvert();
while(!ADC_available());
Serial.println(ADC_read8());
delay(10);
}
3 changes: 3 additions & 0 deletions directADC/keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,16 @@ ADC_disable KEYWORD2
ADC_autoTriggerEnable KEYWORD2
ADC_setPrescaler KEYWORD2
ADC_setReference KEYWORD2
ADC_setResolution KEYWORD2
ADC_autoTriggerDisable KEYWORD2
ADC_attachInterrupt KEYWORD2
ADC_detachInterrupt KEYWORD2
ADC_startConvert KEYWORD2
ADC_read KEYWORD2
ADC_read8 KEYWORD2
ADC_available KEYWORD2
ADC_readWhenAvailable KEYWORD2
ADC_read8WhenAvailible KEYWORD2
ACOMP_attachInterrupt KEYWORD2
ACOMP_detachInterrupt KEYWORD2
ACOMP_enable KEYWORD2
Expand Down
2 changes: 1 addition & 1 deletion directADC/library.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name=directADC
version=1.0
version=1.1
author=AlexGyver <[email protected]>
maintainer=AlexGyver <[email protected]>
sentence=Library for advanced ADC control.
Expand Down