Страница 38 из 160

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср авг 24, 2011 17:14:34
Gron
Engineer_Keen писал(а):
Gron писал(а):работает ли в AVR Studio счетный регистр TCNTxL (TCNTxH) при запуске таймера?
Не знаю как в 4.18, но в 4.17 точно работает. Ошибка может быть в коде (например не установлен прескалер или установлен такой, что значение меняется очень медленно).
temp, 0x05 - код конфигурации установлен. В микроконтроллере код работает.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср авг 24, 2011 19:55:34
Gron
Поставил я версию 4.17 - ничего не изменилось. Наверное я неправильно спросил. Меняется ли (увеличивается) значение счетного регистра при пошаговой отладки, как в реальном котроллере. Или такой возможности AVR Studia 4 не предоставляет. Ибо постоянно при проходе по циклу wt1 в temp заносится только 0, значит значения не меняются.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср авг 24, 2011 20:02:27
Gudd-Head
Gron писал(а):Поставил я версию 4.17 - ничего не изменилось.
Есть такая полезная штука — know issues в хэлпе про симулятор, посмотрите там, нормально ли симулируется таймер для вашеё меги. Как вариант, попробуйте использовать симулятор2.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Ср авг 24, 2011 20:21:50
Gron
В know issues для своей меги информации нету, только общая. Во втором симуляторе моя мега (atmega32a) недоступна.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Чт авг 25, 2011 08:53:12
Gudd-Head
Gron писал(а):В know issues для своей меги информации нету, только общая. Во втором симуляторе моя мега (atmega32a) недоступна.
Ну да, есть общие слова:
Timer/Counters
16-bit Timer/Counters on all devices have several problems with PWM, prescaler and output compare. Output compare registers are not buffered properly.
The Asynchronous Status Register (ASSR) is not supported in timers with asynchronous mode. This is due to lack of a generic external clock implementation.

При пошаговой отладке значение счётного регистра увеличивается.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Чт авг 25, 2011 12:20:00
Engineer_Keen
Gron писал(а):[...]Ибо постоянно при проходе по циклу wt1 в temp заносится только 0, значит значения не меняются.
У вас предделитель стоит - 0x05. Вы вручную сделали 1024 шага чтобы увидеть что значение TCNT изменилось?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт авг 26, 2011 06:45:04
Gron
:)) . Engineer_Keen Теперь я понял почему значения не менялось. Спасибо всем за помощь. :))

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 09:49:11
Valek87
Добрый день. Использую atmega324p. Задача элементарная - мигать светододом каждую секунду. Всё делаю по аналогии с инструкцией. Но когда я ввожу

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

 ldi Temp,0b00100111    ;разрешить прерывание компаратора 
out TIMSK,Temp
мне пишется
error: Undefined symbol: TIMSK
Тогда я изменяю на

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

ldi r18,0b00100111   ;разрешить прерывание компаратора
out 0x6E,r18
на что мне пишется
error: Operand 1 out of range: 0x6e
Помогите обнаружить ошибку. :( Может у кого есть пример уже написанной программы, где используется данная операция с миганием?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 09:51:56
GP1
все правильно
для доступа к регистрам выше 0х32 используются команды
sts/lds

TIMSK - проверь в файле m***def.inc как он там обзывается.

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

.equ	TIMSK2	= 0x70	; MEMORY MAPPED
.equ	TIMSK1	= 0x6f	; MEMORY MAPPED
.equ	TIMSK0	= 0x6e	; MEMORY MAPPED

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 10:22:04
Valek87
А нет ли примера?

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 10:25:13
Engineer_Keen
Valek87 писал(а):А нет ли примера?
А чего сложного? Код такой же, только out меняем на sts, и имя правильное пишем. Или нужен пример программы целиком ?

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

ldi Temp,0b00100111    ;разрешить прерывание компаратора
sts TIMSK0,Temp

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 10:34:39
GP1
проблема АВРок в том, сто они не совместимы между собой:
разные имена, разные адреса, и т.д.
поэтому при переходе с одного камня на другой приходится переделывать программу, даже если она работала на предыдущем камне.
в этом отношении STM8 намного удобней

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 11:48:39
Valek87
Вот составил я программу, но почему то не получается: Помогите пожалуйста. Светодиод подключен к PD2.

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

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************

;Define here the variables
.def  temp=r16
.def  temp1=r17
.def  temp2=r18
.def  temp3=r19
.def  temp4=r20
.cseg
.org 0
   
; Define here Reset and interrupt vectors
rjmp RESET ; Reset
rjmp INT0 ; INT0
rjmp INT1 ; INT1
rjmp INT2 ; INT2
rjmp PCINT0 ; PCINT0
rjmp PCINT1 ; PCINT1
rjmp $000C ; PCINT2
rjmp $000E ; PCINT3
rjmp $0010 ; Watchdog Timeout
rjmp $0012 ; Timer2 CompareA
rjmp $0014 ; Timer2 CompareB
rjmp $0016 ; Timer2 Overflow
rjmp $0018 ; Timer1 Capture
rjmp $001A ; Timer1 CompareA
rjmp $001C ; Timer1 CompareB
rjmp $001E ; Timer1 Overflow
rjmp $0020 ; Timer0 CompareA
rjmp $0022 ; Timer0 CompareB
rjmp $0024 ; Timer0 Overflow
rjmp $0026 ; SPI Transfer Complete
rjmp $0028 ; USART0 RX Complete
rjmp $002A ; USART0,UDR Empty
rjmp $002C ; USART0 TX Complete
rjmp $002E ; Analog Comparator
rjmp $0030 ; ADC Conversion Complete
rjmp $0032 ; EEPROM Ready
rjmp $0034 ; 2-wire Serial
rjmp $0036 ; SPM Ready
rjmp $0038 ; USART1 RX Complete
rjmp $003A ; USART1,UDR Empty
rjmp $003C ; USART1 TX Complete
;****************************************************
   
;******************************
;RESET:
INT0:
INT1:
INT2:
PCINT0:
PCINT1:
PCINT2:
PCINT3:
WDT:
TIM2_COMPA:
TIM2_COMPB:
TIM2_OVF:
TIM1_COMPA:
TIM1_COMPB:
;TIM1_OVF:
TIM0_COMPA:
TIM0_COMPB:
TIM0_OVF:
SPI_STC:
USART0_RXC:
USART0_UDRE:
USART0_TXC:
ANA_COMP:
;ADC:
EE_RDY:
TWI:
SPM_RDY:
USART1_RXC:
USART1_UDRE:
USART1_TXC:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset:    ldi r16,0b01111111 ;настройка PORTD
          out 0x0A,r16

	  ldi r16,0b00000100 ;загрузка указателя стека
          out $3E,r16
          ldi r16,0b10111111 ;загрузка указателя стека
          out $3D,r16

          ldi r18,0b00100111   ;разрешить прерывание компаратора (TIMSK1)
          sts 0x6F,r18

          ldi Temp,0b00000101   ;тактовый сигнал = CK/1024 (TCCR1B)
          sts 0x81,Temp

          ldi Temp,0x4E         ;инициализация компаратора
          sts 0x89,Temp       ;(OCR1AH)
          ldi Temp,0x20
          sts 0x88,Temp       ;(OCR1AL)

          ldi Temp1,0b00000100  ;инициализация индикатора

          ldi Temp,0            ;обнуление таймера
          sts 0x85,Temp       ;(TCNT1H)
		  sts 0x84,Temp       ;(TCNT1L)

          sei                   ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: 

     rjmp Inf              ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************

TIM1_OVF:
         ldi Temp,0            ;обнуление таймера
         sts 0x85,Temp
		 sts 0x84,Temp

Shift:   cpi Temp1,0b00000000  ;сравнить с 0
         breq Init             ;если равно - загрузка нач. знач.

         ldi Temp1,0b00000000  
         rjmp Output           ;перейти на вывод в порт

Init:    ldi Temp1,0b00000100  ;загрузить нач. значение
Output:  out 0x2B,Temp1       ;вывод в порт D

         reti                  ;выход из обработчика


Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 11:53:03
GP1
1. где дефайн для проца? ну или хотя бы какой проц.
2. у тебя стек не инициализирован, он стоит до метки Reset

Дальше пока смысла нет смотреть. :dont_know:

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 11:57:56
Valek87
1. где дефайн для проца? ну или хотя бы какой проц.
Как его сделать? Используется МС atmega324p.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 12:03:03
GP1
в начале программы напиши:

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

#include "m324Pdef.inc"

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 12:12:17
GP1
несколько советов:
1. не используй абсолютные адреса, сам потом запутаешься используй имена из дефайна, там описано все что касается процика: вся периферия, распределение памяти, векторов прерываний
2. для своих переменных задавай осмысленные имена, а тупо "temp1", "temp2" и т.д.
3. НИКОГДА не определяй вектора прерываний как описано в местной "обучалке"
обычалка была написана, видимо "в попыхах" в ней очень много вредных советов, лучше почитай обучалку у DiHalt-а

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 12:14:01
Valek87
Сделал:
Вектора прерываний я скопировал с даташита. Мне просто бы иметь образец программы вставки таймера. А там я думаю уже разберусь. Мне бы понять принцип его работы.

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

; ******************************************************
; BASIC .ASM template file for AVR
; ******************************************************

#include "m324Pdef.inc"
.def  temp=r16
.def  temp1=r17
.def  temp2=r18
.def  temp3=r19
.def  temp4=r20
.cseg
.org 0
   
; Define here Reset and interrupt vectors
rjmp RESET ; Reset
rjmp INT0 ; INT0
rjmp INT1 ; INT1
rjmp INT2 ; INT2
rjmp PCINT0 ; PCINT0
rjmp PCINT1 ; PCINT1
rjmp $000C ; PCINT2
rjmp $000E ; PCINT3
rjmp $0010 ; Watchdog Timeout
rjmp $0012 ; Timer2 CompareA
rjmp $0014 ; Timer2 CompareB
rjmp $0016 ; Timer2 Overflow
rjmp $0018 ; Timer1 Capture
rjmp $001A ; Timer1 CompareA
rjmp $001C ; Timer1 CompareB
rjmp $001E ; Timer1 Overflow
rjmp $0020 ; Timer0 CompareA
rjmp $0022 ; Timer0 CompareB
rjmp $0024 ; Timer0 Overflow
rjmp $0026 ; SPI Transfer Complete
rjmp $0028 ; USART0 RX Complete
rjmp $002A ; USART0,UDR Empty
rjmp $002C ; USART0 TX Complete
rjmp $002E ; Analog Comparator
rjmp $0030 ; ADC Conversion Complete
rjmp $0032 ; EEPROM Ready
rjmp $0034 ; 2-wire Serial
rjmp $0036 ; SPM Ready
rjmp $0038 ; USART1 RX Complete
rjmp $003A ; USART1,UDR Empty
rjmp $003C ; USART1 TX Complete
;****************************************************
   
;******************************
;RESET:
;TIM0_COMPA:
reti
;****************************************************
; ИНИЦИАЛИЗАЦИЯ
;****************************************************
Reset:    ldi r16,0b01111111 ;настройка PORTD
          out 0x0A,r16

	      ldi r16,0b00000100 ;загрузка указателя стека
          out $3E,r16
          ldi r16,0b10111111 ;загрузка указателя стека
          out $3D,r16

          ldi r18,0b00100111   ;разрешить прерывание компаратора (TIMSK1)
          sts 0x6F,r18

          ldi Temp,0b00000101   ;тактовый сигнал = CK/1024 (TCCR1B)
          sts 0x81,Temp

          ldi Temp,0x4E         ;инициализация компаратора
          sts 0x89,Temp       ;(OCR1AH)
          ldi Temp,0x20
          sts 0x88,Temp       ;(OCR1AL)

          ldi Temp1,0b00000100  ;инициализация индикатора

          ldi Temp,0            ;обнуление таймера
          sts 0x85,Temp       ;(TCNT1H)
		  sts 0x84,Temp       ;(TCNT1L)

          sei                   ;разрешить прерывания
;****************************************************
; ОСНОВНОЙ ЦИКЛ
;****************************************************
Inf: 

     rjmp Inf              ;бесконечный цикл
;****************************************************
; ОБРАБОТЧИК ПРЕРЫВАНИЯ КОМПАРАТОРА
;****************************************************

TIM1_COMPA:
         ldi Temp,0            ;обнуление таймера
         sts 0x85,Temp
		 sts 0x84,Temp

Shift:   cpi Temp1,0b00000000  ;сравнить с 0
         breq Init             ;если равно - загрузка нач. знач.

         ldi Temp1,0b00000000  
         rjmp Output           ;перейти на вывод в порт

Init:    ldi Temp1,0b00000100  ;загрузить нач. значение
Output:  out 0x2B,Temp1       ;вывод в порт D

         reti                  ;выход из обработчика

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 12:19:59
GP1
а теперь смотри

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

          ldi r18,0b00100111   ;разрешить прерывание компаратора (TIMSK1)
          sts 0x6F,r18
первое куда упал взгляд
и посмотри на свою таблиц векторов прерываний...
у меги324 вектора 2х словные, а у тебя там каша.

Вообще-то это не относится к студии переноси вопросы сюда, http://radiokot.ru/forum/viewtopic.php?f=20&t=5931
будем дальше ковырять.

Re: AVR studio 4 в вопросах и ответах

Добавлено: Пт сен 09, 2011 12:26:21
Engineer_Keen

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

rjmp RESET ; Reset
Нормально

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

rjmp INT0 ; INT0
...
...
Метка INT0 есть в программе? Не путаете с уже определенной константой (бит в регистре EIMSK)?

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

rjmp $000C ; PCINT2
...
...
Я конечно понимаю, что на этот адрес вроде бы мы попасть не должны, но делать заглушки прерываний-бесконечными циклами это по-моему нехорошо...

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

Reset:    ldi r16,0b01111111 ;настройка PORTD
          out 0x0A,r16
Ну так и пишите PORTD, а не 0x0A, вам же уже говорили, сами запутаетесь :facepalm: