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

Обсуждаем контроллеры компании Atmel.
Gron
Родился
Сообщения: 13
Зарегистрирован: Ср сен 16, 2009 19:03:31

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

Сообщение Gron »

Engineer_Keen писал(а):
Gron писал(а):работает ли в AVR Studio счетный регистр TCNTxL (TCNTxH) при запуске таймера?

Не знаю как в 4.18, но в 4.17 точно работает. Ошибка может быть в коде (например не установлен прескалер или установлен такой, что значение меняется очень медленно).

temp, 0x05 - код конфигурации установлен. В микроконтроллере код работает.
Последний раз редактировалось Gron Пт авг 26, 2011 06:47:29, всего редактировалось 1 раз.
Gron
Родился
Сообщения: 13
Зарегистрирован: Ср сен 16, 2009 19:03:31

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

Сообщение Gron »

Поставил я версию 4.17 - ничего не изменилось. Наверное я неправильно спросил. Меняется ли (увеличивается) значение счетного регистра при пошаговой отладки, как в реальном котроллере. Или такой возможности AVR Studia 4 не предоставляет. Ибо постоянно при проходе по циклу wt1 в temp заносится только 0, значит значения не меняются.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Gron писал(а):Поставил я версию 4.17 - ничего не изменилось.

Есть такая полезная штука — know issues в хэлпе про симулятор, посмотрите там, нормально ли симулируется таймер для вашеё меги. Как вариант, попробуйте использовать симулятор2.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Gron
Родился
Сообщения: 13
Зарегистрирован: Ср сен 16, 2009 19:03:31

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

Сообщение Gron »

В know issues для своей меги информации нету, только общая. Во втором симуляторе моя мега (atmega32a) недоступна.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение 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.

При пошаговой отладке значение счётного регистра увеличивается.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Gron писал(а):[...]Ибо постоянно при проходе по циклу wt1 в temp заносится только 0, значит значения не меняются.

У вас предделитель стоит - 0x05. Вы вручную сделали 1024 шага чтобы увидеть что значение TCNT изменилось?
Gron
Родился
Сообщения: 13
Зарегистрирован: Ср сен 16, 2009 19:03:31

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

Сообщение Gron »

:)) . Engineer_Keen Теперь я понял почему значения не менялось. Спасибо всем за помощь. :))
Valek87
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн июл 12, 2010 16:03:11

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

Сообщение 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

Помогите обнаружить ошибку. :( Может у кого есть пример уже написанной программы, где используется данная операция с миганием?
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

все правильно
для доступа к регистрам выше 0х32 используются команды
sts/lds

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

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

.equ   TIMSK2   = 0x70   ; MEMORY MAPPED
.equ   TIMSK1   = 0x6f   ; MEMORY MAPPED
.equ   TIMSK0   = 0x6e   ; MEMORY MAPPED
Чем дальше, тем больше становлюсь занудой...
Изображение
Valek87
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн июл 12, 2010 16:03:11

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

Сообщение Valek87 »

А нет ли примера?
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Valek87 писал(а):А нет ли примера?

А чего сложного? Код такой же, только out меняем на sts, и имя правильное пишем. Или нужен пример программы целиком ?

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

ldi Temp,0b00100111    ;разрешить прерывание компаратора
sts TIMSK0,Temp
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

проблема АВРок в том, сто они не совместимы между собой:
разные имена, разные адреса, и т.д.
поэтому при переходе с одного камня на другой приходится переделывать программу, даже если она работала на предыдущем камне.
в этом отношении STM8 намного удобней
Чем дальше, тем больше становлюсь занудой...
Изображение
Valek87
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн июл 12, 2010 16:03:11

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

Сообщение 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                  ;выход из обработчика

Последний раз редактировалось Valek87 Пт сен 09, 2011 12:03:00, всего редактировалось 2 раза.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

1. где дефайн для проца? ну или хотя бы какой проц.
2. у тебя стек не инициализирован, он стоит до метки Reset

Дальше пока смысла нет смотреть. :dont_know:
Чем дальше, тем больше становлюсь занудой...
Изображение
Valek87
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн июл 12, 2010 16:03:11

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

Сообщение Valek87 »

1. где дефайн для проца? ну или хотя бы какой проц.

Как его сделать? Используется МС atmega324p.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

в начале программы напиши:

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

#include "m324Pdef.inc"
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

несколько советов:
1. не используй абсолютные адреса, сам потом запутаешься используй имена из дефайна, там описано все что касается процика: вся периферия, распределение памяти, векторов прерываний
2. для своих переменных задавай осмысленные имена, а тупо "temp1", "temp2" и т.д.
3. НИКОГДА не определяй вектора прерываний как описано в местной "обучалке"
обычалка была написана, видимо "в попыхах" в ней очень много вредных советов, лучше почитай обучалку у DiHalt-а
Чем дальше, тем больше становлюсь занудой...
Изображение
Valek87
Встал на лапы
Сообщения: 136
Зарегистрирован: Пн июл 12, 2010 16:03:11

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

Сообщение 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                  ;выход из обработчика
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

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

Сообщение GP1 »

а теперь смотри

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

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

Вообще-то это не относится к студии переноси вопросы сюда, viewtopic.php?f=20&t=5931
будем дальше ковырять.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

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

rjmp RESET ; Reset

Нормально

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

rjmp INT0 ; INT0
...
...

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

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

rjmp $000C ; PCINT2
...
...

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

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

Reset:    ldi r16,0b01111111 ;настройка PORTD
          out 0x0A,r16

Ну так и пишите PORTD, а не 0x0A, вам же уже говорили, сами запутаетесь :facepalm:
Ответить

Вернуться в «AVR»