Pišem program za krmiljenje led diod za attiny in imam problem z ADCjem. Koda je tale:
- Koda: Izberi vse
/*
* OglasnaV1.c
*
* Created: 15.3.2017 20:07:27
* Author : Blaz
*/
#include <avr/io.h>
#include <util/delay.h>
#define BOARD USER_BOARD
#define F_CPU 8000000
int read_adc(void);
void init_pwm(void);
ADC_Init()
{
ADMUX =
(1 << ADLAR) | // left shift
(0 << REFS1) | // Reference voltage is VCC
(0 << REFS0) | // Reference voltage is VCC
(0 << MUX3) | // ADC 2 for port PB4
(0 << MUX2) | // ADC 2 for port PB4
(0 << MUX1) | // ADC 2 for port PB4
(0 << MUX0); // ADC 2 for port PB4
ADCSRA =
(1 << ADEN) | // Enable ADC
(0 << ADATE) | // Auto trigger disabled
(0 << ADIE) | // ADC interrupt disabled
(1 << ADPS2) | // set prescaler to 128
(1 << ADPS1) | // set prescaler to 128
(1 << ADPS0); // set prescaler to 128
DIDR0 = (1 << ADC2D); //Digital input disable
}
void Init()
{
DDRB |= 0x04;
}
int main(void)
{
Init();
ADC_Init();
int adc = 0;
while (1)
{
// PORTB = 0x04;
// _delay_ms(750);
// PORTB = 0x00;
// _delay_ms(750);
adc = read_adc();
// _delay_ms(20);
if (adc > 128)
{
PORTB = 0xff;
}
if (adc < 128)
{
PORTB = 0x00;
}
}
}
int read_adc(void)
{
ADCSRA |= (1 << ADSC); // start ADC measurement
while(ADCSRA & (1 << ADSC)); // Wait till conversion is complete
return ADCH; // return ADC value
}
void init_pwm(void)
{
// initial OCR1A value
OCR0A = 0x80;
TCCR0A =
(1 << COM0A1) |
(0 << COM0A0) |
(0 << COM0B1) |
(1 << COM0B0) |
(0 << WGM01) |
(1 << WGM00);
TCCR0B =
(0 << WGM02) |
(0 << CS02) |
(0 << CS01) |
(1 << CS00);
TIMSK =
(1 << OCIE0A);
}
problem imam tam ko preberem vrednost adcja in če je vrednost manjša od 128 mi ledice prižge drugače so ledice ugasnjene. ne vem kaj je narobe ker meni ledice skozi svetijo.