Например TDA7294

Форум РадиоКот • Просмотр темы - Ассемблер (ASM) для AVR в вопросах и ответах
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб авг 23, 2025 15:03:07

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 307, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт авг 08, 2017 19:43:07 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
Z_h_e писал(а):
Правда мне непонятно почему в формуле 1024, а не 1023.
Может, потому что так оно и есть?.

Любые значения в диапазоне [0..1) - это 0, [1..2) - это 1, ..., [1023..1024) - это 1023, всё выше - тоже 1023.

АЦП изменяет весь диапазон 0..1024, просто именно верхнюю границу отобразить не может. Вот в формуле и фигурирует 1024, что, к счастью, сильно упрощает вычисления.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт авг 08, 2017 19:51:27 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Возьмем для примера гипотетическое АЦП 2х разрядное (просто на нем нагляднее будет) .
Пускай ИОН 5 В. АЦП выдало код 3. По аналогии считаем 2^2/3*5=6,67В. Плохая математика получается. Конечно чем больше разрядность, тем менее это заметно.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт авг 08, 2017 19:59:00 
Встал на лапы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 4
Зарегистрирован: Ср окт 15, 2014 12:45:46
Сообщений: 117
Откуда: Анапа
Рейтинг сообщения: 0
Чисто в порядке бреда - может потому что "0" тоже может быть результатом измерения, отсюда имеем 1024, скажем так, варианта

_________________
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Вт авг 08, 2017 20:04:44 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Конечно 0 может быть результатом АЦП. Но я специально привел пример 2х разрядного АЦП, чтобы было понятно что я тут считаю не так с математикой.
В реале, для 10 битного АЦП, да еще и при шумящем младшем бите (это в лучшем случае) - это не имеет особого значения. Просто считайте меня занудой :).

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 06:32:06 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 4
Возьмем для примера гипотетическое АЦП 2х разрядное (просто на нем нагляднее будет) .
Пускай ИОН 5 В. АЦП выдало код 3. По аналогии считаем 2^2/3*5=6,67В. Плохая математика получается. Конечно чем больше разрядность, тем менее это заметно.

Что-то я не совсем понял, что это Вы посчитали.

Формула по аналогии будет ADC = Vin/Vref * 2^2, откуда Vin = ADC * Vref / (2^2)

В нашем гипотетическом случае Vin = ADC * 5 / 4. (Vin = ADC * 5 / 3, если брать 2^2-1).

Как по мне, первая картинка, под первую формулу, правильнее:

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 08:16:49 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 210
Рейтинг сообщения: 0
Может не совсем в тему, но...
Пишу на с, asm не знаю совершенно, не могу понять почему ATMega32, во время выполнения программы, как будто виснет. Если во время "зависания" была включена отладка и нажать останов, то останавливается вот тут:
Код:
--- No source file ----------
0000037E  LSL R30      Logical Shift Left
0000037F  ROL R31      Rotate Left Through Carry
00000380  LPM R0,Z+      Load program memory and postincrement
00000381  LPM R31,Z      Load program memory
00000382  MOV R30,R0      Copy register
00000383  IJMP       Indirect jump to (Z)
00000384  CLI       Global Interrupt Disable
00000385  RJMP PC-0x0000      Relative jump                           // вот тут получается останов
00000386  NOP       Undefined
00000387  NOP       Undefined
00000388  NOP       Undefined
00000389  NOP       Undefined
0000038A  NOP       Undefined
0000038B  NOP       Undefined
0000038C  NOP       Undefined
0000038D  NOP       Undefined
0000038E  NOP       Undefined
0000038F  NOP       Undefined
00000390  NOP       Undefined
00000391  NOP       Undefined
00000392  NOP       Undefined

Правильно ли я понимаю, что "RJMP PC-0x0000" это, что то вроде перехода по адресу относительно команды, а т.к. параметр нулевой, получается переход на саму себя, т.е. вечный while(1)?
Т.к. перед этим стоит CLI - глобальный запрет прерываний, вся эта петрушка вероятно из-за какого то аппаратного сбоя в МК или программе, это своеобразный стоп работы(максимизация ошибки). В самой программе ничего такого нет, т.е. это компиллятор по умолчанию добавляет(Atmel Studio 7.0)?
Если отбросить железные проблемы, то почему такое может происходить?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 09:12:00 
Друг Кота

Карма: 64
Рейтинг сообщений: 1013
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4343
Откуда: Ижевск
Рейтинг сообщения: 0
По мне,
FeCat писал(а):
это компиллятор по умолчанию добавляет
в конце программы, а вот косвенный переход по адресу в указателе Z выбрасывает в заадресное пространство mega32. Как вариант, компилируете для камня с адресным пространством >32к.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 10:30:35 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
...

Этот кусок аварийный. Если какой-нибудь сбой, незапланированное прерывание, то программа уйдет на выполнение этого кода. Глобальный запрет прерываний, cli и rjmp PC+0 - глухое зацикливание программы. Возможно у вас включено какое-то прерывание, а обработчика нет. Компилятор в таких случаях автоматом делает такие программные заглушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 11:12:06 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
Возможно у вас включено какое-то прерывание, а обработчика нет. Компилятор в таких случаях автоматом делает такие программные заглушки.
avr-gcc в этом случае не зацикливает программу, а перебрасывает её на нулевой вектор, т.е. выполняет пересброс.

avr-gcc автоматически генерирует последовательность cli; jmp PC - 0; только в одном месте: там, где происходит выход из main.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 12:55:57 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
WiseLord писал(а):
Как по мне, первая картинка, под первую формулу, правильнее:
Не надо было приводить даже такие картинки, в ДШ есть график на котором указано что Vref выше 0x3FF. И формулу расчета я не пытался оспаривать, как сделали разрабы камня, так и надо считать. Просто мои зачерепные опилки желают, чтобы максимум АЦП соответствовал опоре.
WiseLord писал(а):
Что-то я не совсем понял, что это Вы посчитали.
Что тут может быть непонятного, хрень какую-то насчитал я. :oops: Хотел показать, что код АЦП не будет соотвествовать ИОН никогда и показал :)) .

Добавлено after 8 minutes 29 seconds:
ARV писал(а):
avr-gcc в этом случае не зацикливает программу, а перебрасывает её на нулевой вектор, т.е. выполняет пересброс.
Можно вставить обработчик по умолчанию ISR(__vector_default), но он же тоже не циклит, если сам это не сделаешь.
FeCat писал(а):
Если отбросить железные проблемы, то почему такое может происходить?
А Вы запустите в симуляторе код и в окне дизассемблера должно быть указано к какому участку исходного кода соответствует машинный.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 13:52:39 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
в одном месте: там, где происходит выход из main.

И где же у нас выход из майн? Если майн вызывается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 14:30:21 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
И где же у нас выход из майн?
я пометил место, где он :)))
Код:
int main(void){
   
} <<<< вот где-то тут


если посмотреть листинг, который генерирует avr-gcc, то можно увидеть ОБЯЗАТЕЛЬНО такой (не считая адресов, конечно) кусочек:
Код:
  32:   14 d0          rcall   .+40        ; 0x5c <main>
  34:   19 c0          rjmp   .+50        ; 0x68 <_exit>

; что-то там всякое


00000068 <_exit>:
  68:   f8 94          cli

0000006a <__stop_program>:
  6a:   ff cf          rjmp   .-2         ; 0x6a <__stop_program>

обратите внимание на вход в main и выход из него

Добавлено after 9 minutes 57 seconds:
Кстати, вот другой кусочек, поясняющий, как avr-gcc обслуживает прерывания, для которых нет обработчика (bad_interrupt):
Код:
00000000 <__vectors>:
   0:   12 c0          rjmp   .+36        ; 0x26 <__ctors_end>
   2:   19 c0          rjmp   .+50        ; 0x36 <__bad_interrupt>
   4:   18 c0          rjmp   .+48        ; 0x36 <__bad_interrupt>
   6:   17 c0          rjmp   .+46        ; 0x36 <__bad_interrupt>
   8:   17 c0          rjmp   .+46        ; 0x38 <__vector_4>
   a:   15 c0          rjmp   .+42        ; 0x36 <__bad_interrupt>
   c:   14 c0          rjmp   .+40        ; 0x36 <__bad_interrupt>
   e:   13 c0          rjmp   .+38        ; 0x36 <__bad_interrupt>
  10:   12 c0          rjmp   .+36        ; 0x36 <__bad_interrupt>
  12:   11 c0          rjmp   .+34        ; 0x36 <__bad_interrupt>
  14:   10 c0          rjmp   .+32        ; 0x36 <__bad_interrupt>
  16:   0f c0          rjmp   .+30        ; 0x36 <__bad_interrupt>
  18:   0e c0          rjmp   .+28        ; 0x36 <__bad_interrupt>
  1a:   0d c0          rjmp   .+26        ; 0x36 <__bad_interrupt>
  1c:   0c c0          rjmp   .+24        ; 0x36 <__bad_interrupt>
  1e:   0b c0          rjmp   .+22        ; 0x36 <__bad_interrupt>
  20:   0a c0          rjmp   .+20        ; 0x36 <__bad_interrupt>
  22:   09 c0          rjmp   .+18        ; 0x36 <__bad_interrupt>
  24:   08 c0          rjmp   .+16        ; 0x36 <__bad_interrupt>

00000026 <__ctors_end>:
  26:   11 24          eor   r1, r1
  28:   1f be          out   0x3f, r1   ; 63
  2a:   cf e5          ldi   r28, 0x5F   ; 95
  2c:   d4 e0          ldi   r29, 0x04   ; 4
  2e:   de bf          out   0x3e, r29   ; 62
  30:   cd bf          out   0x3d, r28   ; 61
  32:   14 d0          rcall   .+40        ; 0x5c <main>
  34:   19 c0          rjmp   .+50        ; 0x68 <_exit>

00000036 <__bad_interrupt>:
  36:   e4 cf          rjmp   .-56        ; 0x0 <__vectors>

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 15:56:15 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
...

Вы не учитываете одну очень важную вещь. И это говорит о том, что вы не ассемблерщик. Пусть даже и так, вы обязаны заглядывать в дизасм. Иначе как вы оцениваете работу МК в тяжелых случаях.
Код:
   rcall main

Подсказка. Main вызван, а стек сорван.


Последний раз редактировалось Demiurg Ср авг 09, 2017 16:21:38, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 16:20:28 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Demiurg, пока ARV изучает основы AVR чтобы Вам что-то ответить :wink: , мне поясните, о каком срыве стека Вы говорите при выполнении команды RJMP PC-0x0000

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 16:42:54 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Z_h_e писал(а):
...

ARV писал(а):
avr-gcc автоматически генерирует последовательность cli; jmp PC - 0; только в одном месте: там, где происходит выход из main.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Ср авг 09, 2017 16:46:31 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2708
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
И???

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 06:47:53 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ща буду спорить :evil:
Demiurg писал(а):
вы не ассемблерщик. Пусть даже и так, вы обязаны заглядывать в дизасм. Иначе как вы оцениваете работу МК в тяжелых случаях
как бы я вам дизасм и привел в качестве подтверждения своих слов. а ассемблер у меня занимает ровно ту нишу, которую и должен - помогает в особо тяжких случаях, а в остальных полагаюсь на Си. перерос я ассемблер...
Demiurg писал(а):
Подсказка. Main вызван, а стек сорван
за подсказку спасибо, но теперь подскажите по подсказке: в каком именно месте срывается стек при вызове main? напоминаю код:
Код:
00000026 <__ctors_end>:
  26:   11 24          eor   r1, r1
  28:   1f be          out   0x3f, r1   ; 63
  2a:   cf e5          ldi   r28, 0x5F   ; 95
  2c:   d4 e0          ldi   r29, 0x04   ; 4
  2e:   de bf          out   0x3e, r29   ; 62
  30:   cd bf          out   0x3d, r28   ; 61
  32:   14 d0          rcall   .+40        ; 0x5c <main>
  34:   19 c0          rjmp   .+50        ; 0x68 <_exit>
если вы вдруг забыли, то порт 0x3e это SPH, а 0x3d - SPL.
Z_h_e писал(а):
пока ARV изучает основы AVR
:beer:

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 07:48:01 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
ARV писал(а):
...

В том-то и дело, что стек может сорвать в любой момент. Незапланированное прерывание может быть включено в любой момент. Это может быть ошибка программиста. Сбой по питанию. Именно по этой причине делается переход на такой кусок код. Отключается глобально прерывание и глухое зацикливание. Если watchdog не включен, мк наглухо зависнет. Если включен, то мк зависнет до сработки сторожевого таймера.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 08:21:00 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 210
Рейтинг сообщения: 0
akl
Demiurg
ARV
Z_h_e

Спасибо, что откликнулись. Нашёл ошибку... в железе ). Фьюз CKOPT не запрограммировал. В результате на макетке ловил помеху раз в несколько минут.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
СообщениеДобавлено: Чт авг 10, 2017 08:40:42 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2117
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18404
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Demiurg писал(а):
Незапланированное прерывание может быть включено в любой момент. Это может быть ошибка программиста. Сбой по питанию. Именно по этой причине делается переход на такой кусок код.
вы о чем вообще говорите? AVR систему исключений (exception) не поддерживает, и запланировать переход на какую-то заглушку в случае незапланированного "срыва стека" невозможно.

я же говорю только о факте: avr-gcc генерирует кусочек кода с запретом прерываний и вечным циклом только в одном месте - после завершения main (туда же передается управление по стандартной функции exit). в качестве обработки необслуживаемых прерываний avr-gcc пересбрасывает программу. оба эти утверждения я сопроводил доказательствами в виде кусков листинга из-под avr-gcc.
ничего иного я не говорил.

если я вас не правильно понял - поясните, что вы имеете ввиду.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7956 ]     ... , , , 307, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 133


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y