tiny44:при вкл АЦП пробл записи в PA6 из прерывания таймера1

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

Здраствуйте!
Прошу помочь.
Пишу в CodeVision прогу для tiny44. Эмулирую в протеусе. При включенном АЦП на ножки с 0 по 4-ю порта А не могу управлять 6-й ножкой этого же порта из прерывания таймера 1. ножкой порта B при этом управлять не проблема.
Вложения
001.rar
Проэкт в CV и симуляция для протеуса
(32.08 КБ) 187 скачиваний
Реклама
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

что? никто не сталкивался? У кого нибудь есть хоть какие-то мысли по этому поводу?
Реклама
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Визуальновы не сможете отследить мигание светодиода, если его время горения или не горение равняется 0,066 сек. А не будет ли казаться для вашего глаза и протеуса, что светодиод на постоянке горит???Исправте прескаллер в Timer1
и исправте код, а то потом проблемы будут, забыли "_" в

Код: Выделить всё

interrupt [PC_INT0] void pin_change_isr0(void)
{
// Place your code here

}
А насчет того, что не работает выход, я перепробовал все, либо это новый глюк протеуса,либо мой на ночь глядя или есть какое то условие в datasheetе на Tiny, тут увы, я пас, с ними я не работал...а вчитываться лень...[/b]
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Звезды над вами выстроились в нужную позицию и я нашел это
http://www.avrfreaks.net/index.php?name ... c&p=337724
Потом пошевелив извилинами и всетаки вчитавшись в контекстные подсказки CVAVR нашел, что код должен выглядеть так

Код: Выделить всё

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Bipolar Input Mode: Off
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: Off, ADC6: On, ADC7: Off
DIDR0=0xA0;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
ADCSRB&=0x6F;
ADCSRB|=0x10;
А именно на строчку

Код: Выделить всё

DIDR0=0xA0;
Строчка таймера для мигания светодиодом 0.5 сек вкл 0.5 сек будет выглядеть так

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz !!!!!!
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x03; \\!!!!!!
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
В обработчике прерываний таймера1 проще сделать так

Код: Выделить всё

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// Place your code here
PORTA.6=~PORTA.6 ;
}
Реклама
Эиком - электронные компоненты и радиодетали
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

Огромное спасибо за ответ. Сейчас попробую разобраться. Хотя указания на мои ошибки в коде не принимаю, т.к. почти весь код (кроме обработчника прерывания таймера) сгенерирован кодгенератором CodeVision :)
А насчет не эффективности кода инвертирования пина, это же тест :) а не конечная прога. Просто в целевой программе не смог понять в чем дело - начал урезать. Выделил кусок кода - сделал тест.
И кстати по поводу того, что я просто не вижу мельканий - нет, т.к. если рядом с кодом инвертирования A6 поставить код инвертирования любого бита порта Б - то все видно. Протеус же замедляет при симуляции.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

gep писал(а):указания на мои ошибки в коде не принимаю, т.к. почти весь код ... сгенерирован кодгенератором CodeVision
Совершенно напрасно полностью доверяете программе. Были глюки и в нем, неправильно настраивал УАПП например. Успехов
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

Попробовал заменить

Код: Выделить всё

DIDR0=0xE0;
на

Код: Выделить всё

DIDR0=0xA0;
Помогло! Спасибо!!! Теперь осталось понять из-за чего так. Я думал наоборот нужно выключать цифровой буфер если на этом выводе не будет использоваться АЦП.
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

gep писал(а):Попробовал заменить

Код: Выделить всё

DIDR0=0xE0;
на

Код: Выделить всё

DIDR0=0xA0;
Помогло! Спасибо!!! Теперь осталось понять из-за чего так. Я думал наоборот нужно выключать цифровой буфер если на этом выводе не будет использоваться АЦП.
Код привел для новичков, которые рано или поздно нарвутся на те же грабли, и будет тут ответ))).
Я в ответе специально обратил ваше внимание на строчку.
А вот насчет отключения как раз таки наоборот, мы отключаем цифру для использования ADC, так сказать выбираем одно функциональное назначение порта из нескольких возможных.
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

Т.е. Если я хочу использовать пины с 0 по 4 для АЦП, то я должен сделать так:

Код: Выделить всё

DIDR0 = 0x0F
Я прав?
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Скорее так

Код: Выделить всё

// Digital input buffers on ADC0: Off, ADC1: Off, ADC2: Off, ADC3: Off
// ADC4: Off, ADC5: On, ADC6: On, ADC7: On
DIDR0=0x1F;
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

Да, действительно. Тупанул. Спасибо, помогло.
Родился
Сообщения: 2
Зарегистрирован: Чт май 13, 2010 14:07:22

Сообщение alfons »

привет! темка староватая, но очень надеюсь на помощь! в CV AVR я не сильно силён, поэтому прошу Вас помочь! проблема по-моему у меня похожая! программирую ATmega8, и мне надо, чтобы два порта С работали как АЦП, а остальные нет! подскажите, где это поменять в программе! все порты работают как АЦП! заранее благодарю за помощь!
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

alfons писал(а): где это поменять в программе! все порты работают как АЦП! заранее благодарю за помощь!
Это надо в даташите на ваш микроконтроллер посмотреть как выставить нужные ножки для использования АЦП или в курсе AVR посмотреть www.123avr.com/z09.htm
gep
Нашел транзистор. Понюхал.
Сообщения: 163
Зарегистрирован: Пт июн 05, 2009 04:27:18

Сообщение gep »

В CodeVision есть CodeGenerator. Создай проект новый и запусти CodeGenerator там в разделе АЦП все настрой и посмотри на инициализацию портов АЦП (будет в отдельном "абзаце" кода).
Родился
Сообщения: 2
Зарегистрирован: Чт май 13, 2010 14:07:22

Сообщение alfons »

спасибо! попробовал на AT90CAN32, просто было в тот момент быстрее и удобнее! всё прекрасно получилось, выбрал нужные порты! но у меня МК на ATmega8 и проблема с ним! там в CVAVR для него нет таких функций! работать именно на нём - это не мой каприз, а руководителя :cry: ! может, можно как то в ручную в самом тексте программы поменять?
Нашел транзистор. Понюхал.
Сообщения: 155
Зарегистрирован: Вт авг 19, 2008 23:39:59
Откуда: г.Смоленск

Сообщение Saadov »

Saadov писал(а):
alfons писал(а): где это поменять в программе! все порты работают как АЦП! заранее благодарю за помощь!
Это надо в даташите на ваш микроконтроллер посмотреть как выставить нужные ножки для использования АЦП или в курсе AVR посмотреть http://www.123avr.com/z09.htm
Перечитайте еще раз, а по ссылке разжевано проще простого...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»