Пардон, разобрался!
Видимо, надо было считывать сначала ADCL, затем ADCH (причем именно в такой последовательности).
Вот код (извиняюсь, что там много "лишнего", просто мало ли что на что косвенно или прямо влияет):
Никак не добьюсь зависимости частоты мигания от напряжения на ножке 11 (PORTA.7). При этом АЦП, вроде запускается и ADSC сбрасывается как пологается...
100 раз уже перепроверил мультиплексор, режим работы и пр. Попробовал и фри-ран и однократный режим. Все одно: частота не меняется. И похоже из ADCL считывается всегда 0.
Может я что-то пропустил?
Раздел: AVR
Видимо, надо было считывать сначала ADCL, затем ADCH (причем именно в такой последовательности).
Вот код (извиняюсь, что там много "лишнего", просто мало ли что на что косвенно или прямо влияет):
#include <tiny26.h>
#include <delay.h>
#define setb_EORLOCK {PORTA.1=0;DDRA.1=1;}
#define clrb_EORLOCK {DDRA.1=0;PORTA.1=1;}
#define setb_START {PORTA.2=1;}
#define clrb_START {PORTA.2=0;}
#define setb_STOP {PORTA.3=0;DDRA.3=1;}
#define clrb_STOP {DDRA.3=0;PORTA.3=1;}
#define EOF ( (PINA&1<<3))
#define setb_VP_NORMA {PORTA.4=0;DDRA.4=1;}
#define clrb_VP_NORMA {DDRA.4=0;PORTA.4=0;}
#define BUT1 (!(PINA&1<<4))
#define setb_SAVE {PORTA.5=0;DDRA.5=1;}
#define clrb_SAVE {DDRA.5=0;PORTA.5=0;}
#define BUT2 (!(PINA&1<<5))
#define BUT3 (!(PINA&1<<6))
#define VPIN_pin PINA.7
#define BUT4 (!(PINA&1<<7))
#define DAC_DIN PORTB.0
#define clrb_LED5 {PORTB.1=1;DDRB.1=1;}
#define setb_LED5 {PORTB.1=0;DDRB.1=1;}
#define DAC_SCLK PORTB.2
#define DAC_SYNC PORTB.3
#define setb_LED3 {PORTB.4=0;DDRB.4=1;}
#define clrb_LED3 {PORTB.4=1;DDRB.4=1;}
#define setb_LED2 {PORTB.5=0;DDRB.5=1;}
#define clrb_LED2 {PORTB.5=1;DDRB.5=1;}
#define BUTR (!(PINB&1<<6))
#define BUTL (!(PINB&1<<7))
#define setb_LED1 {PORTB.7=0;DDRB.7=1;}
#define clrb_LED1 {PORTB.7=1;DDRB.7=1;}
#define _RESET #asm("cli");while(1){}
#define _LOCK #asm("cli");while(1){#asm("wdr")}
#define setb_ADSC ADCSR|=(1<<6)
volatile unsigned int vp = 0;
volatile unsigned int msec = 0;
volatile unsigned char led_inp_mode = 0;
volatile unsigned char led_inp = 0;
void main( void )
{
unsigned long int i;
int led=0;
int led2=0;
// Declare your local variables here
DDRA = 0b00000100;
PORTA = 0b00000100;
DDRB = 0b00111101;
PORTB = 0b00000000;
TCCR0 = 0b00000000;
TCNT0 = 0;
PLLCSR = 0b00000000;
TCCR1A = 0b00000000;
TCCR1B = 0b00000110;
TCNT1 = 0;
OCR1A = 0;
OCR1B = 0;
OCR1C = 0;
GIMSK = 0b00000000;
TIMSK = 0b00000100;
MCUCR = 0b00000000;
WDTCR=0b00001010;
USICR = 0b00000000;
ACSR = 0b10000000;
ADMUX = 0b10000110;
ADCSR = 0b11100111;
#asm("sei");
while( msec<20 )
if( !EOF ) msec = 0;
#asm("cli");
setb_STOP;
setb_EORLOCK;
delay_us( 10 );
clrb_STOP;
for( i=0; i<8; i++ )
{
delay_us( 330 );
setb_START;
delay_us( 1 );
clrb_START;
}
clrb_EORLOCK;
while (1)
{
#asm("wdr");
delay_us( 1000 );
msec++;
if( msec >= ADCL ) {led = 1-led; msec = 0;}
if( led ) setb_SAVE else clrb_SAVE;
}
}
Никак не добьюсь зависимости частоты мигания от напряжения на ножке 11 (PORTA.7). При этом АЦП, вроде запускается и ADSC сбрасывается как пологается...
100 раз уже перепроверил мультиплексор, режим работы и пр. Попробовал и фри-ран и однократный режим. Все одно: частота не меняется. И похоже из ADCL считывается всегда 0.
Может я что-то пропустил?
Раздел: AVR