Jump to content

    

Slavik_tz

Участник
  • Content Count

    51
  • Joined

  • Last visited

Everything posted by Slavik_tz


  1. Хочу разобраться с данным зверем
  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 (например CD-ROM такой-то, магнитола такая-то, ... ). Перерыл все справочники по ремонту но не нашел никакой информации. Заранее благодарен.
  12. Здраствуете, подскажите, если кто сталкивался со следующей проблемой компилирую проект с опцией в Makefile OPT = 0 все работает, а с опцией OPT = s,1,2, 3 не работает. В чем может быть ошибка?
  13. Да при том, что если выставить OPT = 0 (без оптимизации) то все нормально определяется, а OPT=1,2,3,s не работает
  14. да, выбран DEBUG = dwarf-2 На рисунке код на С в WinAvr и загруженый файл, после make .elf в Proteus почему не видно переменной tmp, что сделано не так в makefile
  15. Make(WinAvr)+Proteus

    Для отладки программы на С в Proteus используется файл с расширением .elf. Примеры которые поставляются вместе с proteus, после запуска в WinAvr make симулируются нормально. А если создать с помощью утилиты MFile, входящей в состав пакета WinAvr, и запустить make со своим исходником на С, то в итоге создается .elf, который в Proteus работать оказывается. Не погли бы подсказать в каком направлении рыть, что бы иметь возможность симулировать свои проекты в Proteus на С. Заранее спасибо!
  16. Есть микросхема трансивера CC2500 в корпусе QLP-20, какие возможные приемы установки ее на печатную плату в домашних условиях. Может у кого-то есть наработки или пробывал
  17. Подскажите пожалуйста в чем может быть ошибка #include <stdio.h> #define F_CPU 4000000L void main(void) // { UBRRL=25;//9600 UCSRB|=_BV(TXEN)|_BV(RXEN); printf("%d",5); } микроконтроллер ATMega32, симуляция программы в Proteus 6.9
  18. Помогите разобратся укого есть опыт! Для индикации данных на семисегментном индикаторе с общим катодом и экономии портов микроконтроллера было выбрано две микросхемы К176ИЕ4 и 74HC139N (аналог К1554ИД14), возможно ли использование микросхем К176ИЕ4 без токоограничительных резисторов при подключении к сегментам. И выдержит ли ток 74HC139N при подключении без ключей к общему катоду. Используется динамическая индикация. Рисунок прилагается
  19. За все спасибо, максимальную длину кабеля можно будет проложить от МК до ПК при скорости 11Кбод
  20. Спасибо буду разбираться, и еще один вопрос, что лучше использовать микросхему MAX232 и т.п. или же сделать опоторазвязку, и если у кого-то есть схемы с развязкой не могли бы помочь
  21. Не могли бы подсказать какие используються стандартные объекты или классы для COM-порта на С++ под Windows XP.
  22. Proteus

    Всем привет. Не знаю на каком подфоруме задать данный вопрос, скорее всего на этом, эсли не прав то подскажите где? Почему-то, не работает в ПО Proteus 6.X модели LM335(135,235). При запуске выдает сообщение о ошибке ERROR [PSM] : No model specified for 'U2'. Simulation FAILED due to partition analysis error(s). не могу понять, возможно что-то надо дорабатывать самому Зарание спасибо
  23. WinAvr

    При создании в WinAVR-20060125 рабочих проектов при выполнении комады Make All, Make Clean выдает ошибки. Версия не рабочая что-ли? В предыдуших все было нормально Как написать функцию в WinAVr, чтобы написана она была на асме а вызывалась на С, например Char* Func(Char) { asm{... return Char*(в регистах)} }
  24. Proteus 6.9 SP5

    откуда можно слить эту версию ???? http://upload.caxapa.ru/ ,
  25. Proteus 6.9 SP5

    А что значит пошпговая отладка, патч ворде бы тот