Технический форум по робототехнике.
к561ЛА7 » 09 янв 2011, 01:03
Господа!
В атмеге 8 АЦП замечательно запускается так
ADMUX=0b00100001; //
ADCSRA.6=1;
while(ADCSRA.4==0);
a5=ADCH;
но в атмеге 48 содвижн ругается на строчки с ADCSRA.
что левая часть . нуждается в стрикт/юнион
как запустить АЦП в атмеге 48?
avr123.nm.ru » 09 янв 2011, 02:17
"любимый мой учитель АВР123!" рекомендует мастером код смастерить и посмотреть.
к561ЛА7 » 09 янв 2011, 21:16
я так сразу и сделал, Учитель! . Сгенерил код, перекинул программу с атмеги 8 туда, но там он не идет. Хотя регистр называься так же. А поскольку я основываюсь на предположении, что если регистр называется также, то и на языке СИ все равно для какой атмеги писать, все равно должно бы работать, но оно не работает, и я совкершщенно не понимаю в чем тут дело.
avr123.nm.ru » 09 янв 2011, 21:48
дак сгенери сразу для меги48 без перекидки.
к561ЛА7 » 09 янв 2011, 22:35
сгенерил, но запустить АЦП не могу. Строчки чтоработают в атмеге 8
ADMUX=0b00100001; //
ADCSRA.6=1;
while(ADCSRA.4==0);
a5=ADCH;
не работают в атмеге 48.
Последний раз редактировалось
к561ЛА7 09 янв 2011, 22:35, всего редактировалось 1 раз.
Duhas » 09 янв 2011, 22:36
есть там разница в именах регистров.. есть...
Добавлено спустя 53 секунды:
есть там разница в именах регистров.. есть...
АВР123 вот вам и проблема... если пишешь на АСМ или на СИ но БЕЗ генератора - то все смотришь в ДШ...
avr123.nm.ru » 09 янв 2011, 22:38
Какая ж тут проблема если чел в генераторе кода не тот чип указывает.
к561ЛА7 » 09 янв 2011, 22:42
Duhas писал(а):есть там разница в именах регистров.. есть...
Добавлено спустя 53 секунды:есть там разница в именах регистров.. есть...
Атмега 8
// ADC initialization
// ADC Clock frequency: 500,000 kHz
// ADC Voltage Reference: AREF pin
// Only the 8 most significant bits of
// the AD conversion result are used
//ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84; // 62 êãö, 85- 31 êãö
Атиега 48
// ADC initialization
// ADC Clock frequency: 62,500 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84; // 62 êãö, 85- 31 êãö
по моему ADCSRA одинаково называется
Добавлено спустя 1 минуту 49 секунд:avr123.nm.ru писал(а):Какая ж тут проблема если чел в генераторе кода не тот чип указывает.
#include <mega48.h>
#include <delay.h>
#define ADC_VREF_TYPE 0x00
avr123.nm.ru » 09 янв 2011, 22:43
просто пишите так:
ADCSRA=(1<<6);
и будет работать.
В задаче 1 курса, в примерах манипулирования битами в разных компиляторах, сказано что
запись типа ADCSRA.6 подходит не для всех регистров !ПРЧЕМ !!! CVAVR прямо в ругани пишет что ему ТОЧКА не нравится.
Последний раз редактировалось
avr123.nm.ru 09 янв 2011, 22:47, всего редактировалось 1 раз.
к561ЛА7 » 09 янв 2011, 22:47
avr123.nm.ru писал(а):просто пишите так:
ADCSRA=(1<<6);
и будет работать.
В задаче 1 курса, в примерах манипулирования битами в разных компиляторах, сказано что запись типа ADCSRA.6 подходит не для всех регистров !
Фантастика, Учитель! А Вы не подскажите как писать вторую строчку?
avr123.nm.ru » 09 янв 2011, 22:51
маски это страница 5 курс Си для мк
примерно так
while((ADCSRA & 0b00010000) == 0);
или while((ADCSRA & (1<<(название бита))) == 0);
или while((ADCSRA & (1<<4)) == 0);
но обычно прерывание включают по окончании преобразования, как в примерах CVAVR - ADC8535
======
a5=ADCH;
тут наверно оба регистра надо читать и потом если нужно то масками и сдвинами оставлять то что в старшем байте
a5=ADCW;
к561ЛА7 » 09 янв 2011, 23:11
Спасибо, Учитель!
Работает всяко!
Правда на выражение
"или while((ADCSRA & (1<<4)) == 0);" сначала ругнулся invalid expression