Микроконтроллеры AVR - применение и Краткий Курс - часть 10

 
1 15 16 17 18 19 38
RU Massaraksh #19.05.2011 16:29  @Alexeev Max#19.05.2011 11:53
+
-
edit
 

Massaraksh

аксакал
★☆
A.M.> Я без разрешения немного посоветую :)

И, разумеется, пальцем в небо. Подумай, почему.

P.S.: Кстати, я никогда не выкладываю неотлаженный код.
RU Alexeev Max #19.05.2011 16:56  @Massaraksh#19.05.2011 16:29
+
-
edit
 

Alexeev Max

втянувшийся

Massaraksh> И, разумеется, пальцем в небо. Подумай, почему.
Massaraksh> P.S.: Кстати, я никогда не выкладываю неотлаженный код.



Работа с АЦП. Программные средства повышения точности : Электроника для всех


Работа с АЦП. Программные средства повышения точности
Автор DI HALT
Опубликовано 16 Сен 2008 
Рубрики: AVR. Учебный курс
Метки: Assembler, AVR, Алгоритм, Аналог, АЦП
Вообще, сграбив сигнал в цифровую форму мы мы можем извращаться с ним как угодно. Методик цифровых фильтраций существует масса и все они основаны на сборе избыточной информации с последующим выделением сигнала. Я приведу для примера лишь один простейший способ - усреднение.


// Дальше —
easyelectronics.ru
 

Отличная иллюстрация решения, реализовано деление на 64. Сам регулярно пользуюсь в своем коде именно этой конструкцией, плюс я привел описание использованных тобою команд. И я дзадал ранее вопрос, почему такое пренебрежительное отношение к моей персоне.
 
RU Alexeev Max #19.05.2011 17:15  @Alexeev Max#19.05.2011 16:56
+
-
edit
 

Alexeev Max

втянувшийся

Пошагово
что находится во флаге переноса то попадет в 7-й бит при команде ror
r4:r21:r20 - 3-х байтное значение которое предполагается делить

;-----------------------получили сумму, делим на 8
ror r4
ror r21
ror r20

ror r4 ;
ror r21
ror r20

ror r4
ror r21 ;------------------результат (r21:r20)
ror r20

судя по коду если только r4 обнулен и не учавствует в дальнейших операциях, соответственно при делении результат получится... опять из разряда "так работает же".
 
RU Alexeev Max #19.05.2011 17:46  @Alexeev Max#19.05.2011 17:15
+
-
edit
 

Alexeev Max

втянувшийся

Еще совет

;----------указатель+2
clr r4
inc r4
inc r4
clr r3
add r8,r4
adc r7,r3

я так понимаю тут задача к указателю r7:r8 прибавить 2
можно сделать

ldi r4, 2
add r8, r4
clr r4
adc r7, r4

а еще лучше хранить указатель в Z (ZH:ZL) он в коде вроде не используется
и тогда его увеличение можно будет выполнить так

adiw ZH:ZL, 2
 
RU Massaraksh #19.05.2011 18:57  @Alexeev Max#19.05.2011 17:15
+
-
edit
 

Massaraksh

аксакал
★☆
A.M.> судя по коду если только r4 обнулен и не учавствует в дальнейших операциях, соответственно при делении результат получится... опять из разряда "так работает же".
Ну так написано же "...результат (r21:r20)...". По определению результат не может быть более, чем двухбайтовым числом, поэтому совершенно неважно, что находится с 3-м регистре.
A.M.> ldi r4, 2
Ты ещё и команд не знаешь. Нет такой команды в Atmega8.

P.S. И ещё. Разумные советы я всегда с благодарностью принимаю. Но советовать программисту с более чем 30-летним стажем, как писать код, занятие не очень плодотворное.
RU Alexeev Max #19.05.2011 19:14  @Massaraksh#19.05.2011 18:57
+
-
edit
 

Alexeev Max

втянувшийся

A.M.>> ldi r4, 2
Massaraksh> Ты ещё и команд не знаешь. Нет такой команды в Atmega8.

Тут ошибся, признаюсь. Правильнее так
ldi r16, 2
add r8, r16
clr r16
adc r7, r16


Massaraksh> P.S. И ещё. Разумные советы я всегда с благодарностью принимаю. Но советовать программисту с более чем 30-летним стажем, как писать код, занятие не очень плодотворное.

В чем мои советы были неразумны, помимо ldi? И в третий раз вопрос чем вызвано такое пренебрежение к моей персоне?
 
RU Massaraksh #19.05.2011 19:16  @Alexeev Max#19.05.2011 19:14
+
-
edit
 
RU Alexeev Max #19.05.2011 19:50  @Massaraksh#19.05.2011 19:16
+
-
edit
 

Alexeev Max

втянувшийся

A.M.>>...
Massaraksh> http://lib.ru/JEROM/r_anxious.txt

Суть понятна, с учетом 30-ти летнего стажа программистом прейду на Вы я уважаю людей вашего возраста, вокруг меня в институте работает очень много сотрудников инженеров и программистов вашего поколения, к сожалению не знаю имени.

Советы Вы принмать готовы, но как видно не от всех, а вот сами аргументированно советовать не очень, по крайней мере напомню что неприязнь началась в моей ветке по БРЭО касаемо АЦП ADS1100, где вобщем то ничего дельного от Вас я так и не услышал хотя так же с удовольствием принимаю опыт окружающих и от Вас в том числе собственно на этом опыте и основывается моя работа. Почему то мои советы воспринимаются исключительно как палки в колеса хотя я все достаточно аргументирую, да и еще отсылка к данному произведению мне не очень понятна... мне жаль что все скатилось до такого абсурда.
 
RU Massaraksh #19.05.2011 20:20  @Alexeev Max#19.05.2011 19:50
+
-
edit
 

Massaraksh

аксакал
★☆
A.M.>...прейду на Вы
Здесь принято на "ты", значит на "ты".
A.M.> Советы Вы принмать готовы, но как видно не от всех, а вот сами аргументированно советовать не очень, по крайней мере напомню что неприязнь началась в моей ветке по БРЭО касаемо АЦП ADS1100, где вобщем то ничего дельного от Вас я так и не услышал хотя так же с удовольствием принимаю опыт окружающих и от Вас в том числе собственно на этом опыте и основывается моя работа.
Собственно, в той ветке я сделал два замечания:
1. Что поиск апогея при хождении с прибором по этажам - вещь бесполезная, что соответствует действительности.
2. Что сложение 3-х и более байтных чисел ничего сложного из себя не представляет, что также соответствует действительности.
Если есть необходимость перенять какой-то мой опыт, достаточно перейти по ссылке в правом нижнем углу любого моего сообщения.
Если ты согласен со всем вышеперечисленным, будем считать инцидент исчерпанным.

P.S.: А вот по коду, прошу тебя, всё равно не надо давать мне советов.
RU Alexeev Max #19.05.2011 22:59  @Massaraksh#19.05.2011 20:20
+
-
edit
 

Alexeev Max

втянувшийся

Massaraksh> Собственно, в той ветке я сделал два замечания:
Massaraksh> 1. Что поиск апогея при хождении с прибором по этажам - вещь бесполезная, что соответствует действительности.

"Какие ваши доказательства..." параметры алгоритма у меня настраиваются (частота проверок, порог срабатывания) из ПО... соответственно при "медленных" параметрах расчитаных на ходьбу по этажам алгоритм показал свою работу, при полетах будет работать этот же алгоритм но заданы другие параметры.

Вы так же как и я прокатились в лифте на 5-й этаж.... и записали данные, я не считаю это бесполезным и бессмысленным. Причем так делает весь форум, ходит в гору, катается на лифтах... тренируется на кошках.

Massaraksh> 2. Что сложение 3-х и более байтных чисел ничего сложного из себя не представляет, что также соответствует действительности.

Сложение 3-х байтных чисел не представляет, я с этим никогда не спорил и такого не утверждал, не надо вырывать фразу из контекста...

Разговор шел касаемо обработки результатов АЦП ADS1100, там это не возможно т.к. этих чисел просто нет, он выдает значение 8 раз в секунду, там просто нечего складывать.

Massaraksh> Если есть необходимость перенять какой-то мой опыт, достаточно перейти по ссылке в правом нижнем углу любого моего сообщения.

Побывал уже год назад когда занялся этим делом.... отличный сайт, как я и говорил насчет того что основа моей разработки это чужой опыт.

Massaraksh> P.S.: А вот по коду, прошу тебя, всё равно не надо давать мне советов
Получается футбол в одни ворота... хорошо пусть будет так.
 
RU Massaraksh #20.05.2011 03:08
+
-
edit
 

Massaraksh

аксакал
★☆
В помощь определяющим апогей.
Блок усреднения данных высотомера, работающего по принципу, описанному Serge77, по скользящему среднему на 2,4,8,16,32,64,128 точек и хранение их за последние 5 секунд.

code text
  1. ;--------------------------регистры
  2. ;
  3. ;       $060-$15F - кольцевой буфер (рабочий) для вычисления усредненных данных на
  4. ;                   (2^N) N=1...7 значений (A)
  5. ;       $160-$28C - кольцевой буфер последних 150 значений (300 байт)
  6. ;                   сглаженных данных в SRAM (Б)
  7. ;
  8. ;       r0  - N
  9. ;       r1  - счетчик начала отсчета скользяшего среднего
  10. ;       r2  - текущее смещение в буфере (A) (Low)
  11. ;       r3  - рабочий
  12. ;       r4  - рабочий
  13. ;       r5  - рабочий
  14. ;       r6  - рабочий
  15. ;       r7  - текущее смещение в буфере Б (High)
  16. ;       r8  - текущее смещение в буфере Б (Low)
  17. ;       r9  -
  18. ;       r10 -
  19. ;       r11 -
  20. ;       r12 -
  21. ;       r13 -
  22. ;       r14 -
  23. ;       r15 -
  24. ;       r16 -
  25. ;       r17 - рабочий
  26. ;       r18 -
  27. ;       r19 -
  28. ;       r20 - Сумма ADC (Low)
  29. ;       r21 - Сумма ADC (High)
  30. ;       r22 -
  31. ;       r23 -
  32. ;       r24 -
  33. ;       r25 -
  34. ;       r26 - регистр X (Low)
  35. ;       r27 - регистр X (High)
  36. ;       r28 -
  37. ;       r29 -
  38. ;       r30 -
  39. ;       r31 -
  40. ;
  41. ;--------------------------------Начальные установки
  42.         clr r20
  43.         clr r21
  44.         clr r1
  45.         clr r7
  46.         clr r8
  47.         clr r2
  48.         ldi r17,3               ;----N=1,2,3,4,5,6,7
  49.         mov r0,r17  
  50.         sei
  51. idle:   rjmp idle            ;---Idle
  52.  
  53. ................................................
  54.  
  55. ;------------------------Сюда приходит суммированное 64 раза значение АЦП (r21:r20)
  56.           inc r2           ;--------увеличиваем указатель в буфере усреднения
  57.           inc r2
  58.           push r21
  59.           push r20
  60.           rcall power
  61.           add r6,r6
  62.           cp  r2,r6
  63.           brne ac1
  64.           clr r2           ;--------конец буфера? на начало
  65. ac1:      ldi r26,$060
  66.           clr r27
  67.           clr r17
  68.           add r26,r2
  69.           adc r27,r17
  70.           st X+,r20        ;--------запись полученного значения в кольцевой буфер усреднения
  71.           st X+,r21
  72.           inc r1
  73.           rcall power
  74.           cp  r1,r6       ;--------пора начинать усреднение?
  75.           brne accno       ;--------рано
  76. ;--------------------------------Подсчет суммы в цикле
  77.           ldi r26,$060
  78.           clr r27
  79.           clr r20
  80.           clr r21
  81.           clr r4
  82.           clr r3
  83.           clr r17
  84. ac2:      ld r6,X+
  85.           ld r5,X+
  86.           add r20,r6      ;--------сложение 2-ух трёхбайтных чисел
  87.           adc r21,r5
  88.           adc r4,r3
  89.           rcall power
  90.           inc r17
  91.           cp r17,r6
  92.           brne ac2
  93. ;-----------------------получили сумму, делим 3-х байтовое число на 2^N
  94.           clr r17
  95. ac3:      ror r4
  96.           ror r21
  97.           ror r20
  98.           inc r17
  99.           cp r17,r0
  100.           brne ac3
  101. ;--------------------------теперь всегда усреднять
  102.           rcall power
  103.           mov r1,r6
  104.           dec r1
  105. ;--------------------------запись в кольцевой буфер сглаженных значений за последние 5 секунд
  106. ;--------------------------(это у меня 5 секунд, потому что 30 опросов в секунду)
  107. ;--------------------------иначе буфер надо расширить
  108.           ldi r26,$60
  109.           ldi r27,1
  110.           add r26,r8
  111.           adc r27,r7
  112.           st X+,r20
  113.           st X+,r21
  114. ;----------указатель смещаем
  115.           clr r4
  116.           inc r4
  117.           inc r4
  118.           clr r3
  119.           add r8,r4
  120.           adc r7,r3
  121. ;----------по кольцу
  122.           mov r17,r8
  123.           cpi r17,$2C
  124.           brne accno
  125.           mov r17,r7
  126.           cpi r17,1
  127.           brne accno
  128.           clr r7
  129.           clr r8
  130. ;-----------------------------запись r20,r21 в EEPROM
  131. accno:    pop r20
  132.           pop r21
  133. ..........................
  134. ;-------------------------------п/п возведения в степень
  135. ;
  136. ;        r0 - N
  137. ;        r6 - 2^^N
  138. ;
  139. power:   push r17
  140.          ldi r17,2
  141.          mov r6,r17
  142.          clr r5
  143. pow1:    inc r5
  144.          cp r5,r0
  145.          breq powfin
  146.          push r0
  147.          push r1
  148.          push r18
  149.          mov r18,r6
  150.          fmul r18,r17
  151.          ror r1
  152.          ror r0
  153.          mov r6,r0
  154.          pop r18
  155.          pop r1
  156.          pop r0
  157.          rjmp pow1
  158. powfin:  pop r17
  159.          ret

Здесь привожу подпрограмму доступа к этим данным.
code text
  1. ;
  2. ;         Вход: r3:r4 - индекс запрашиваемых данных 0 - 149
  3. ;                       0-самое свежее значение, 1-следующее и т.д.
  4. ;        Выход: r21:20 - знчаение
  5. ;
  6. ;        При работе в многозадачной среде при вызове п/п следует запретить прерывания,
  7. ?        если необходимо, после - разрешить.
  8. ;
  9. get_v:    push r5
  10.           push r6
  11.           push r26
  12.           push r27
  13.           push r16
  14.           push r17
  15.           push r3
  16.           push r4
  17.           add r4,r4
  18.           adc r3,r3
  19.           ldi r26,$60
  20.           ldi r27,$1
  21.           add r26,r8
  22.           adc r27,r7
  23.           clr r6
  24.           inc r6
  25.           inc r6
  26.           clr r5
  27.           sub r26,r6
  28.           sbc r27,r5
  29.           sub r26,r4
  30.           sbc r26,r3
  31.           cpi r27,1
  32.           brlt plus
  33.           breq pnext
  34.           rjmp noplus
  35. pnext:    cpi r26,$60
  36.           brlt plus
  37. noplus:   rjmp gload
  38. plus:     ldi r16,$2C
  39.           ldi r17,1
  40.           add r26,r16
  41.           adc r27,r17
  42. gload:    ld r20,X+
  43.           ld r21,X+
  44.           pop r4
  45.           pop r3
  46.           pop r17
  47.           pop r16
  48.           pop r27
  49.           pop r26
  50.           pop r6
  51.           pop r5
  52.           ret
Это сообщение редактировалось 21.05.2011 в 03:06
UA Non-conformist #18.03.2012 16:21  @GOGI#18.04.2011 13:26
+
-
edit
 

Non-conformist

аксакал

GOGI> В IAR нет встроенных задержек, задаваемых в мс, только в тактах процессора, замени _delay_ms(10) на __delay_cycles(80000);
Заменил, предупреждение пропало, но ошибка осталась по-моему без изменений:

Error[e16]: Segment RSTACK (size: 0x20 align: 0) is too long for segment definition. At least 0x6 more bytes needed. The problem occurred while processing the segment placement command
"-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_RSTACK_BASE-_..X_RSTACK_END", where at the moment of placement the available memory ranges were "DATA:c6-df"
Reserved ranges relevant to this placement:
DATA:60-a5 TINY_Z
DATA:a6-c5 CSTACK
DATA:c6-df RSTACK
Error while running Linker
Skype: a_schabanow  
RU GOGI #18.03.2012 16:37  @Non-conformist#18.03.2012 16:21
+
-
edit
 

GOGI

координатор
★★★★
Забыл что RSTACK задается в глубине вложений. Ставь Return adress stack 10 (это та же вкладка, где ты ставил Enable io bits)
1  11.011.0

GOGI

координатор
★★★★
>А почему? Я же настроил проект на Тайни2313? И если не хватает, то чем это может грозить для визуального эффекта?
Стек он по умолчанию одинакового размера для всех контроллеров. Для больших, где памяти много, значения обычно подходят, для маленьких надо уменьшать. Для любых эффектов это грозит тем, что у тебя программа просто не компилируется, если места под стек не хватило.
1  11.011.0
UA Non-conformist #18.03.2012 16:44  @GOGI#18.03.2012 16:39
+
-
edit
 

Non-conformist

аксакал

Скомпилилось!

Там два стека: CSTACK und RSTACK. Первый я оставил как было, 0x20, а второй (Depth levels) изменил с 16 на 10. И скомпилилось!

И что, теперь можно прошивать?
Skype: a_schabanow  
RU GOGI #18.03.2012 16:50  @Non-conformist#18.03.2012 16:44
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist> И что, теперь можно прошивать?
Да. Кстати, этот проект идеально подходит для его симуляции в Протеусе. Ты можешь его полностью эмулировать, как он будет в железе. Ну а можно и сразу в железяку прошить.
1  11.011.0
UA Non-conformist #18.03.2012 17:23  @GOGI#18.03.2012 16:50
+
-
edit
 

Non-conformist

аксакал

Понял. Только что наконец впервые увидел свой УСБ-ИСП программатор, купленный на Ебае (всё никак не получалось из отчего дома забрать).

USB ISP Programmer for ATMEL AVR ATMega ATTiny 51 Development Board

USB ISP Programmer for ATMEL AVR ATMega ATTiny 51 Development Board in Consumer Electronics , Other | eBay

// www.ebay.com
 


Цивильная антистатическая упаковка, собран аккуратно. Воткнул в комп - гарыць красный! )) Начинаю разбираться с дровами...
Skype: a_schabanow  
UA Non-conformist #18.03.2012 19:33  @Non-conformist#18.03.2012 17:23
+
-
edit
 

Non-conformist

аксакал

Встал прилагаемый драйверок без вопросов. Теперь бы схемку спаять...
Skype: a_schabanow  
UA Non-conformist #18.03.2012 20:28  @Non-conformist#18.03.2012 19:33
+
-
edit
 

Non-conformist

аксакал

@GOGI
Просмотрел сейчас перечень вопросов, возникавших в процессе компиляции проекта. Это же сколько новых вещей узнать нужно/можно, прежде чем какую-то мигалку сделаешь... ))
Skype: a_schabanow  
UA Non-conformist #18.03.2012 22:29  @Non-conformist#18.03.2012 20:28
+
-
edit
 

Non-conformist

аксакал

А какой программатор (софт) будет работать с этим адаптером? У меня стоит CodeVision.
Skype: a_schabanow  
RU GOGI #18.03.2012 22:30  @Non-conformist#18.03.2012 22:29
+
-
edit
 

GOGI

координатор
★★★★
Точно должен работать AVRdude. Но я с ним не работал.
1  11.011.0
UA Non-conformist #18.03.2012 22:53  @GOGI#18.03.2012 22:30
+
-
edit
 

Non-conformist

аксакал

Тут я ещё скачал программатор с сайта производителя:
http://www.yourportablelab.com/downloads/ProgISP%20V1.7.2.rar
Но вся документация на китайском, интерфейс - на ломаном английском.

Пока целевого устройства нет, просто воткнул в комп адаптер, установил его драйвер, запустил свежескачанный программатор, нажал кнопку "Load FLASH", указал на скомпиленный .hex - пишет ошибку "Illegal line found".

Это он .bin хочет, или из-за того, что устройство не подключено? Или вообще с этим китайским софтом лучше не связываться и сразу пробовать AVRdude?
Skype: a_schabanow  
RU GOGI #18.03.2012 22:57  @Non-conformist#18.03.2012 22:53
+
-
edit
 

GOGI

координатор
★★★★
Non-conformist>Или вообще с этим китайским софтом лучше не связываться и сразу пробовать AVRdude?
Сразу. Он хоть распространенный и по нему можно будет на нормальном английском-русском найти что-то.
1  11.011.0
UA Non-conformist #18.03.2012 23:00  @Non-conformist#18.03.2012 22:53
+
-
edit
 

Non-conformist

аксакал

А для дудки ВинАВР нужен? А то только чёрное окошко еле видно моргает, когда экзешник кликаешь - и всё... ???
Skype: a_schabanow  
AD Реклама Google — средство выживания форумов :)
UA Non-conformist #18.03.2012 23:56  @Non-conformist#18.03.2012 23:00
+
-
edit
 

Non-conformist

аксакал

Non-conformist> А для дудки ВинАВР нужен? А то только чёрное окошко еле видно моргает, когда экзешник кликаешь - и всё... ???
Попробовал было потыкаться в командную строку - понял, что это любовь, и что этим надо заниматься... В итоге скачал вот такую графическую оболочку:
http://yourdevice.net/downloads/usbprog.rar
Вроде всё просто, чётко и понятно. Указал путь к .hex - написало, что программируемый контроллер не обнаружен. Так что я понимаю - теперь дело за девайсом...
Skype: a_schabanow  
1 15 16 17 18 19 38

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru