Attiny26: Уже Который День Бьюсь С Ацп - Нет Данных

12-11-2012, 16:09 От: admin Посмотрели: 1223
Пардон, разобрался!

Видимо, надо было считывать сначала 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

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Attiny26: Уже Который День Бьюсь С Ацп - Нет Данных все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031