Я пытаюсь потихоньку самостоятельно научиться работать с микроконтроллерами семейства ATTiny без Arduino, взаимодействуя через AVR-GCC. По пути спотыкаюсь о различные камни, которые в процессе изучения документации удается расколоть и пройти дальше, но вот с ADC зашел в тупик. Почему-то не получается корректно настроить контроллер на работу с сенсорами. Проверьте, пожалуйста, код, укажите на ошибки. Комментарии пытаюсь писать на английском, поэтому не пеняйте за грамматику. Заранее спасибо.
Код: Выделить всё
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#define setHIGH(pin) PORTB |= (1 << pin)
#define setLOW(pin) PORTB &= ~(1 << pin)
#define isHIGH(pin) PINB & (1 << pin)
#define isLOW(pin) !(PINB & (1 << pin))
//aliases for pins
#define ledPin PB0
void initADC(){
ADMUX =
(0 << REFS1) | //set REFS1 to 0 to use VCC as VREF (attiny24/45/85)
(0 << REFS0) | //set REFS0 to 0 to use VCC as VREF (attiny13/24/45/85)
(1 << ADLAR) | //shift in a 1 and follow 8bit procedure
(1 << MUX0); //set MUX0 to 1 to use PB2 as analog input pin (ADC1)
ADCSRA =
(1 << ADEN) | //enable ADC
(0 << ADSC); //set ADSC to 0 to sure no conversion are happening
}
void initIO(){
DDRB =
(1 << PB0); //set OUTPUT
}
unsigned int analogRead(){
unsigned int result = 0;
ADCSRA |= (1 << ADSC); //start ADC conversation
while(ADCSRA & (1 << ADSC)); //wait for conversation complete
result = ADCW; //get the result of conversation
return result; //return the result
}
int main(void){
initADC(); //setup ADC
initIO(); //setup Input/Output system
while(1){
if(analogRead() < 1023){
setHIGH(ledPin);
}else{
setLOW(ledPin);
}
}
return 0;
}
Код: Выделить всё
void setup(){
pinMode(0, OUTPUT);
pinMode(2, INPUT);
}
void loop(){
if(analogRead(2) < 1023){
digitalWrite(0, HIGH);
}else{
digitalWrite(0, LOW);
}
}





