Форум РадиоКот https://radiokot.ru/forum/ |
|
ATtiny25 и встроенный термодатчик https://radiokot.ru/forum/viewtopic.php?f=57&t=151757 |
Страница 1 из 2 |
Автор: | Серый_ [ Вт янв 16, 2018 09:53:09 ] |
Заголовок сообщения: | ATtiny25 и встроенный термодатчик |
"Фсё ребят, берупомощьзнатоков". ![]() 1) ATtiny25, на ADC заведён внутренний термодатчик. 2) Раз в секунду поднимаю "Start Conversion" бит. (В прерывании от таймера). 3) Прерывания от ADC случаются. 4) Младшие биты из ADC сливаются в порт на светодиоды. (Проверка работоспособности). При прогреве корпуса МК - данные не обновляются динамически. Но обновляются каждый раз при подаче питания (единожды). В чём подвох? |
Автор: | Ivanoff-iv [ Вт янв 16, 2018 11:42:55 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
в коде...? Добавлено after 2 minutes 7 seconds: Серый_ писал(а): берупомощьзнатоков пока, вижу, вам нужна помощь не знатоков а медиумов ![]() |
Автор: | BOB51 [ Вт янв 16, 2018 12:08:04 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Или анализ даташитов нескольких подряд выпусков да со всеми имевшими публикацию ерратами... ![]() |
Автор: | Серый_ [ Вт янв 16, 2018 12:29:05 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
А что код даст? Тут аппаратное что-то. Может из за-того, что порт VS Reset как-то "не того"... Спойлер.include "tn25def.inc".def ter = r19 ;хранение значение ADC температуры .equ fleg = 244 ;флегмирование процессов 244 = неточная секунда .cseg ;ВЕКТОРЫ ПРЕРЫВАНИЙ rjmp reset .org 0x0003 ;таймер 1 канал A [48] rjmp int_timer1A .org 0x0008 ;от ADC (результат готов) rjmp int_adc ;ПРЕДКОНФИГ КОНТРОЛЛЕРА reset: ldi r16,RAMEND ;стек на весь RAM [16] out spl,r16 ldi r16,0b10000000 ;отключение аналогового компаратора [120] out ACSR,r16 ldi r16,0b00011111 ;нужные электроды на вывод [64] out ddrB,r16 ;настройка таймера 1 ldi r16,fleg ;коэффициент флегмирования процессов канал A [91] out ocr1A,r16 ldi r16,0b01000000 ;прерывание по совпадению в канале A [92] out TIMSK,r16 ldi r16,0b10001101 ;режим CTC, клок таймера /4096 [89,90] out tccr1,r16 ;таймер пошёл ;настройка ADC ldi r16,0b10001111 ;опорка 1V1, >R-результат, ADC4-термосенсор [134] out ADMUX,r16 ldi r16,0b10001111 ;ADC-вкл, Start-выкл, прерывание вкл, клок /128 [136] out ADCSRA,r16 ;---- ОСНОВНАЯ ПРОГРАММА ---- sei ;разрешить прерывания глобально start: rjmp start ;вертеться здесь ;================= ПРЕРЫВАНИЕ ТАЙМЕР 1 СОВПАДЕНИЕ С КАНАЛОМ A int_timer1A: brtc clea ;T сброшен = к зажжению светодиода clt ;иначе сбросить T ;cbi portB,3 ;погасить светодиод (на заюзано) rjmp next ;и к выходу clea: set ;установить T ;sbi portB,3 ;зажечь светодиод (не заюзано) next: sbi ADCSRA,6 ;запускать ADC reti ;выход ;================= ПРЕРЫВАНИЕ ОТ ADC (РЕЗУЛЬТАТ ГОТОВ) int_adc: in ter,ADCL ;забрать значение ADC в ter cbr ter,0b11110000 ;обнулить старший полубайт out portB,ter ;выдать в порт B (1=зажжение) reti ;выход |
Автор: | АСУ [ Вт янв 16, 2018 12:52:59 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
А что код даст? Насколько я понял из кода, регистр ADCH не читается… если так, то это неправильно… |
Автор: | Ivanoff-iv [ Вт янв 16, 2018 13:20:23 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
точно - при чтении обязательно прочитать сначала младший байт, потом старший, т.е. сначала ADCL, потом ADCH, если он не нужен - читай его в какой нибудь темп регистр и забудь там... |
Автор: | Серый_ [ Вт янв 16, 2018 14:39:26 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
![]() in ter,ADCH ;верх забрать впустую in ter,ADCL ;туда же налепить низ и... этот вариант нерабочий (тем не менее при включении оно почему-то прокатывало) И того, ваш рабочий вариант: in ter,ADCL ;забрать Low in r16,ADCH ;забрать High куда-либо (процедура забора обязательна) |
Автор: | Ivanoff-iv [ Вт янв 16, 2018 17:19:16 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
сам шпаргалкой пользуюсь ![]() |
Автор: | Z_h_e [ Вт янв 16, 2018 17:23:30 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Если Вам нужен 8битный АЦП , то можно включить бит ADLAR (выравнивание по левому краю) и считывать данные только с ADCH. Если конечно ИОН подойдет для входного сигнала. |
Автор: | Серый_ [ Вт янв 16, 2018 19:21:29 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Тоже близко к "варианту". Показания меж светодиодами задуманы в 5°C. Но без 2-х младших битов это будет шаг = 4,64°C. (Правда, "планую" для промежуточных значений - "светодиод мигает"). В общем при любом сдвиге, "шаго-коэффициент" = 1,16°C, если приспичит поточнее - числа после запятой всё равно мутить. P. s. тоже просчитался ![]() |
Автор: | АСУ [ Вт янв 16, 2018 21:06:24 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
И того, ваш рабочий вариант: in ter,ADCL ;забрать Low in r16,ADCH ;забрать High куда-либо (процедура забора обязательна) Лично я копирую сразу весь регистр ADC в двухбайтный регистр Y или Z или W, и никогда не было танцев с бубном. |
Автор: | Demiurg [ Ср янв 17, 2018 02:43:48 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Лично я копирую сразу весь регистр ADC в двухбайтный регистр Y или Z или W, и никогда не было танцев с бубном. Да? Ваш пример в студию, плиз. |
Автор: | АСУ [ Ср янв 17, 2018 19:24:09 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Ваш пример в студию Вложение:
|
Автор: | Ivanoff-iv [ Ср янв 17, 2018 20:17:04 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
удобно, если откомпилить, а потом ничего не меняя наводить мышку, то высвечивается из чего какая операция состоит... например это копирование состоит из 2х, и тут сам АБ следит за очерёдностью. |
Автор: | АСУ [ Ср янв 17, 2018 21:50:44 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
например это копирование состоит из 2х, и тут сам АБ следит за очерёдностью. Компилятор Си предполагаю поступает аналогично… а вообще данный нюанс хорошо расписан у Евстифеева. Цитата: Обращение к регистрам ADCH и ADCL для получения результата преобразования должно выполняться в определенной последовательности: сначала необходимо прочитать регистр ADCL, а затем ADCH. Это требование связано с тем, что после обращения к регистру ADCL процессор блокирует доступ к регистрам данных со стороны АЦП до тех пор, пока не будет прочитан регистр ADCH. Благодаря этому можно быть уверенным, что при чтении регистров в них будут находиться составляющие одного и того же результата. Соответственно, если очередное преобразование завершится до обращения к регистру ADCH, результат преобразования будет потерян.
|
Автор: | Demiurg [ Чт янв 18, 2018 03:43:21 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Вложение: 1.png Ггг. А теперь откройте в дизассемблере ваш пример и посмотрите, как это будет выглядеть в командах. МК 8 битный. И есть только одна команда копирования сразу из двух регистров в два - movw. И то, только с рабочими регистрами. |
Автор: | Ivanoff-iv [ Чт янв 18, 2018 06:25:22 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Так тут всё норм - копирует поочереди, но он этого и не скрывает, а вот пару регистров в пару регистров - за раз. также за раз выполнятся операции вида "RR-const" => SBIW RWl,K "RR+const" => ADIW RWl,K. в справке это всё тоже описано Добавлено after 28 minutes 8 seconds: Главная то мысль в том, что, правильное чтение регистров - в АБ не проблема программиста |
Автор: | Demiurg [ Чт янв 18, 2018 07:31:28 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Мне за ассемблер можно не объяснять. И речь шла о командах пересылки данных. Я потому и сказал, пусть покажет пример копирования регистра ADC в рабочие регистры ЗА РАЗ. А это как раз и невозможно в случае регистров периферии и рабочих регистров. |
Автор: | АСУ [ Чт янв 18, 2018 14:48:08 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Ггг. А теперь откройте в дизассемблере ваш пример и посмотрите, как это будет выглядеть в командах. Я прекрасно знаю как выполняются действия компилятором то что я пишу. ![]() ![]() |
Автор: | Demiurg [ Чт янв 18, 2018 15:20:17 ] |
Заголовок сообщения: | Re: ATtiny25 и встроенный термодатчик |
Ггг. А теперь откройте в дизассемблере ваш пример и посмотрите, как это будет выглядеть в командах. Я прекрасно знаю как выполняются действия компилятором то что я пишу. ![]() ![]() Вы написали, что копируете ADC сразу в регистры XYZ, а речь шла о порядке записи-чтения регистров ADCL и ADCH. |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |