Перейти к содержанию
    

Slavik_tz

Участник
  • Постов

    51
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Slavik_tz

  • Звание
    Участник
    Участник
  1. qn8027

    Хочу разобраться с данным зверем
  2. А я не говорил что они одинаковые и заглядывал, а там написано что прерывание от АЦП в режиме ADC Noise Reduction возможно. Алгоритм програмы 1. Запускаем АЦП 2. переходим в енергосберг. режим (Idle, ADC Noise Reduction), ждем в спящем режиме прерывание от АЦП и продолжаем выполнение дальше (больше никакие прерывания не разрешены) 3. считываем данные из АЦП 4. меняем канал 5.. передаем данные на ПК через UART 6. возращаемся в 1 и в этом случае ведет по-разному а на вопрос по Proteus: энергосберегающий режим симулируется в нем или нет, так никто и не ответил
  3. Насчет таймера, я понял, на спасибо за комент. Но вопрос в другом, почему по разному ведет себя микроконтроллер с режимами Idle и ADC Noise Reduction (вот по этой причине был закручен таймер).
  4. если закоментровать //set_sleep_mode(SLEEP_MODE_ADC);//инициализировать енергосберегающий режим то получится Idle (по умолчанию), и все начинает работать так как надо, просмотрев ассемблерный код то биты устанавливаються правельно, в чем траблы.
  5. ADCCR определен макросом. если ATMega16, то ADCSRA, если Mega8 то ADCSR вот именно что 5, если установить таймер=тактовой частоте процесоора, то 40, то получается что прерывание происходить не по оканчанию преобразования АЦП. И я задавал вопрос, может кто-то знает sleep в Proteus не обрабатывается, то есть после команды sleep, все идет так как б ее и не было. Это глюк в Протеусе? На данный момент используется процессор ATMega16. Заранее спасибо
  6. Вы меня не поняли, согласно документации на микроконтроллеры, для того, что бы данные были наиболее коректны, останавливается процессор (не создает шумов при преобразовании), а АЦП работает. И при возникновении прерывания от него или же от других источников возобновляет свою работу.
  7. Вот код программы void InitADC(void) { set_sleep_mode(SLEEP_MODE_ADC);//инициализировать енергосберегающий режим uart_puts("\r MCUCR="); uart_puti((int)MCUCR); SET_FRENCH();//устанавливает частоту 112КГц (частота кварца 14 318 180Гц (ADCRA|=_BV(ADPS2)|_BV(ADPS1)|_BV(ADPS0))) ADCCR|=_BV(ADEN);//Выбрать одиночное преобразования ADMUX|=_BV(REFS0)|_BV(ADLAR);//результ преобразование выравнивается в левую сторону 8бит ADCCR|=_BV(ADIE);//разрешить прерывание по окончанию преобразования АЦП uart_puts("\r ADCCR="); uart_puti((int)ADCCR); uart_puts("\r ADMUX="); uart_puti((int)ADMUX); TCCR0|=_BV(CS01); TCNT0=0; ADCCR|=_BV(ADSC);//запустить АЦП sleep_mode();//перйти в енергосберегающий режим TCCR0=0; uart_puts("\r Timer="); uart_puti((int)TCNT0); } результат таков: MCUCR=16 (00010000b) ADCCR=143 (10001111b) ADMUX=96 (01100000b) Timer=5 вопрос: почему таймер =5, если должен быть равен 25(первое одиночное преобраз)*128(коеффициент деления АЦП)/8 mod(255)= 145 (прерываний от таймера нет), от чего может быть и следующее вот функция //Функция получения температуры, параметр kan=номер канала unsigned int GetTemp(uint8_t kan) { volatile unsigned int Temp=0;//значение температуры возращаемое функцией ADMUX+=kan; TCCR0|=_BV(CS00); TCNT0=0; ADCCR|=_BV(ADSC);//запустить преобразование //sleep_mode();//ждать пока не закончиться TCCR0=0; Temp=(unsigned int)ADCH;//результат в регистр // _delay_us(1); uart_puts(" Timer="); uart_puti((int)TCNT0); uart_puts(" Temp="); uart_puti(Temp); uart_puts(" "); ADMUX&=~_BV(MUX0)&~_BV(MUX1)&~_BV(MUX2); return Temp+170;// прибавить начальные установки } SIGNAL(SIG_ADC) { ; } вопрос следующего характера если раскоментировать sleep_mode() вообще эта функции не работает, от чего может возникать прерывание, в Proteus sleep вообще не работает, это его глюк или я что-то делаю не так
  8. UART AVR

    Все правильно, спасибо
  9. UART AVR

    Здараствуйте Помогите разобраться со следующей ситуацией Связь с микропроцессором и ПК организована через микросхему ST232BN, все конденсаторы электролиты 10мкФ. Посылаю данные с микроконтроллера на ПК в цикле 1, 2, 3, 4..., принимаю данные с помощью программы CVAVR(Terminal), или стандартной программой Hyper Terminal. Вот превый раз нажимаю в программе СVAVR Connect, все работает как надо, далее Disconnect ... Connect не понимаю... Если далее нажимать Disconnect ... Connect то может случайным образом на экране появлятся продолжение цикла вывода коректных данных или же адакадабра.
  10. на счет tqfp уже описано, dip - отсосом =5минут, обычный 100 Вт паяльник со специальной насадкой вот теперь вижу что не выгодно поскольку мк используются в б/у устройствах, которых на рынке я не встречал.
  11. Микроконтроллеры AVR

    Здраствуйте, Поскажите пожалуйства, в каких устройствах промышленного изготовления используются микроконтроллеры AVR (например CD-ROM такой-то, магнитола такая-то, ... ). Перерыл все справочники по ремонту но не нашел никакой информации. Заранее благодарен.
  12. WinAvr

    Здраствуете, подскажите, если кто сталкивался со следующей проблемой компилирую проект с опцией в Makefile OPT = 0 все работает, а с опцией OPT = s,1,2, 3 не работает. В чем может быть ошибка?
  13. Make(WinAvr)+Proteus

    Да при том, что если выставить OPT = 0 (без оптимизации) то все нормально определяется, а OPT=1,2,3,s не работает
  14. Make(WinAvr)+Proteus

    да, выбран DEBUG = dwarf-2 На рисунке код на С в WinAvr и загруженый файл, после make .elf в Proteus почему не видно переменной tmp, что сделано не так в makefile
  15. Make(WinAvr)+Proteus

    Для отладки программы на С в Proteus используется файл с расширением .elf. Примеры которые поставляются вместе с proteus, после запуска в WinAvr make симулируются нормально. А если создать с помощью утилиты MFile, входящей в состав пакета WinAvr, и запустить make со своим исходником на С, то в итоге создается .elf, который в Proteus работать оказывается. Не погли бы подсказать в каком направлении рыть, что бы иметь возможность симулировать свои проекты в Proteus на С. Заранее спасибо!
×
×
  • Создать...