ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Обсуждаем контроллеры компании Atmel.
Wolfness
Родился
Сообщения: 3
Зарегистрирован: Вс апр 28, 2013 08:16:25

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение Wolfness »

Добрый день.
Требуется при нажатии кнопки 1 раз вывести на 7-сегм. инд. "1" и выполнить определенный код. При нажатии этой кнопки второй раз, ввести "2" и выполнить другой код.
Вот не доходит как реализовать выполнение действий при повторном нажатии кнопки. Вот схема в Протеусе.
http://www.fayloobmennik.net/2828297
Вот сам код.

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

#include <avr/io.h>
#define F_CPU 1000000UL
#include <util/delay.h>

int main(void)
{
   unsigned char dig_0 = 0x3f; //0
   unsigned char dig_1 = 0x06; //1
   unsigned char dig_2 = 0x5b; //2
   unsigned int cnt = 1;

   DDRD = 0x00;
   PORTD = 0xff;
   DDRB = 0xff;
   PORTB = dig_0;

   while (1)
   {
      if((PIND&(1 << PD0)) == 0) //Если нажата кнопка
      {
         while(PORTB == dig_0)
         {
            cnt = 0;
            PORTB = dig_1;
            _delay_ms(100);
         }   
      }
      while((PIND&(1 << PD0)) == 1){}   //Ожидание отпускания кнопки
      if((PIND&(1 << PD0)) == 0&&cnt == 0)
      {
            PORTB = dig_2;
            _delay_ms(100);
            cnt = 1;            
      }
   }
}

Двойку на индикатор ну никак не выводит. Весь день сижу, а ошибку найти не могу.
lucker21
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение lucker21 »

Здраствуйте! Подскажите как реализовать 2 задержки на разное время в схеме динамической индикации, 1 задержку на смену индикаторов, 2ую на смену цифры.Требуеться чтобы на 4ех индикаторах по очереди загорались цифры 123456789abcdef,т.е 1 индикаторе загорелся 1 на,на 2ом 2 и т.д.У меня получаеться либо чтобы на 1 индикаторе перебирались числа, либо чтобы менялись индикаторы. Шаблон 2ую таймеров что дал нам преподователь я не понял,подскажите как использовать.


Спойлер

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

.include "tn2313def.inc"
.def   temp=r16
.dseg
timer1:   .byte 1                        ; 1 ячейку под переменную timer1
timer2:   .byte 1
.cseg
.org 0
   rjmp   init
.org OVF0addr
   rjmp   T0_OVF
init:
   ldi   R16,low(RamEnd)
   out   spl,R16
; настройка портов
   ldi   R16,0b11111111
        out   ddrb,R16
   ldi   R16,0b00001111
      out   ddrd,R16
; настройка таймера счетчика T0

   cli
   ldi   temp,   (1<<cs00)|(1<<cs02)
   out   TCCR0B,   temp                  
   ldi   temp,   24
   out   TCNT0,   temp                  
   ldi   temp,   1<<TOIE0               
   out   TIMSK,   temp                  
   sei
main:
   RJMP  main

   T0_OVF:
   in   temp,   SREG
   push   temp

   lds   temp,   timer1                     
   dec   temp                           
   sts   timer1,   temp                     

   lds   temp,   timer2
   dec   temp
   sts   timer2,   temp

   pop   temp
   out   SREG,   temp
   reti
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение Jack_A »

Бред сивой кобылы, а не таймер. Будут 2 одинаковых выдержки по 256 интервалов прерывания, сдвинутые на случайное число интервалов, поскольку timer1, timer2 в начале не определены.
СпойлерT0_OVF:
in temp, SREG
push temp

lds temp, timer1
dec temp
brne _20
ldi temp,ConstT1
_20:
sts timer1, temp

lds temp, timer2
dec temp
brne _30
ldi temp,ConstT2
_30:
sts timer2, temp

pop temp
out SREG, temp
reti
lucker21
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение lucker21 »

*поправка задачи требуеться чтобы цифры бежали с 1 по f .подскажите как влючить в программу эти 2 таймера. попробовал но чёт не работает (
Спойлер.include "tn2313def.inc"
.def Temp1=R16
.def Temp2=R17
.def Temp3=R18
.def Temp4=R19
.def Temp=R20





.dseg
timer1: .byte 1 ; 1 ячейку под переменную timer1
timer2: .byte 1
Digit: .byte 4

.cseg
.org 0
rjmp init
.org OVF0addr
rjmp T0_OVF
init:
ldi R16,low(RamEnd)
out spl,R16
; настройка портов
ldi R16,0b11111111
out ddrb,R16
ldi R16,0b00001111
out ddrd,R16
; настройка таймера счетчика T0

cli
ldi temp, (1<<cs00)|(1<<cs02)
out TCCR0B, temp3
ldi temp, 24
out TCNT0, temp3
ldi temp, 1<<TOIE0
out TIMSK, temp3
sei
main:
RJMP main

T0_OVF:
in temp3, SREG
push temp3

lds temp3, timer1
dec temp3
ldi temp3,248
brne t1
t1:

sts timer1, temp3

lds temp3, timer2
dec temp3
ldi temp3,128
brne t2
t2:

sts timer2, temp3

pop temp3
out SREG, temp3
reti

ldi Temp,1
sts Digit ,Temp ;загрузка начальных значений
ldi Temp,2
sts Digit+1,Temp
ldi Temp,3
sts Digit+2,Temp
ldi Temp,4
sts Digit+3,Temp

ldi Temp,5
sts Digit+4 ,Temp ;загрузка начальных значений
ldi Temp,6
sts Digit+5,Temp
ldi Temp,7
sts Digit+6,Temp
ldi Temp,8
sts Digit+7,Temp


ldi Temp,9
sts Digit+8,Temp ;загрузка начальных значений
ldi Temp,0
sts Digit+9,Temp
ldi Temp,10
sts Digit+10,Temp
ldi Temp,11
sts Digit+11,Temp



ldi Temp,12
sts Digit+12,Temp ;загрузка начальных значений
ldi Temp,13
sts Digit+13,Temp
ldi Temp,14
sts Digit+14,Temp
ldi Temp,15
sts Digit+15,Temp




Display:
;последовательный вывод на индикацию содержимого
;переменной Digit
;111111111111111111111111111111111111111111111111111111111111111111111111111111111
lds Temp1,Digit ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3
;2222222222222222222222222222222222222222222222222222222222222222222222222222222
lds Temp1,Digit+1 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

ldi Temp3,TCNT0
sts timer2,Temp3

;333333333333333333333333333333333333333333333333333333333333333333333333333333

lds Temp1,Digit+2
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;44444444444444444444444444444444444444444444444444444444444444444444444444444444444


lds Temp1,Digit+3
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3



lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;5555555555555555555555555555555555555555555555555555555555555555555555555555555555555

lds Temp1,Digit+4 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3



lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;66666666666666666666666666666666666666666666666666666666666666666666666666666666666666


lds Temp1,Digit+5 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

ldi Temp3,TCNT0
sts timer2,Temp3

;777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777

lds Temp1,Digit+6
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888


lds Temp1,Digit+7
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

lds Temp1,Digit+8 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
;индикации
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3 ;ждем

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;1010101010101010101101010101010100000000000000000000000000000000000000000000000000000000000000000000000000000000

lds Temp1,Digit+9 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111

lds Temp1,Digit+10
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222

lds Temp1,Digit+11
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

ldi Temp3,TCNT0
sts timer2,Temp3

;1313111111111113333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333


lds Temp1,Digit+12 ;загружаем 0-ю ячейку
ldi Temp,0b00001110 ;активируем 0-й разряд
out PortD,Temp
rcall Decoder ;вызываем 7-сегм. декодер
out PortB,Temp1 ;выводим значение в порт
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+13 ;и .т.д
ldi Temp,0b00001101
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3

lds Temp1,Digit+14
ldi Temp,0b00001011
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3


lds Temp1,Digit+15
ldi Temp,0b00000111
out PortD,Temp
rcall Decoder
out PortB,Temp1
ldi Temp3,TCNT0
sts timer1,Temp3
ldi Temp3,TCNT0
sts timer2,Temp3
ret


Decoder:
;преобразование двоичного числа
;в код 7-сегментного индикатора

ldi ZL,Low(DcMatrix*2) ;инициализация массива
ldi ZH,High(DcMatrix*2)

ldi Temp2,0 ;прибавление переменной
add ZL,Temp1 ;к 0-му адресу массива
adc ZH,Temp2

lpm ;загрузка значения
mov Temp1,r0

ret

DcMatrix:
;массив - таблица истинности декодера
; hgfedcba hgfedcba
.db 0b11000000,0b11111001 ;0,1
.db 0b10100100,0b10110000 ;2,3
.db 0b10011001,0b10010010 ;4,5
.db 0b10000010,0b11111000 ;6,7
.db 0b10000000,0b10010000 ;8,9
.db 0b10001000,0b10000011
.db 0b11000110,0b10100001
.db 0b10000110,0b10001110
Последний раз редактировалось Gudd-Head Вт май 07, 2013 09:28:52, всего редактировалось 1 раз.
Причина: Нарушение п.2.5 Правил Форума
lucker21
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение lucker21 »

уже разобрался)
lucker21
Родился
Сообщения: 4
Зарегистрирован: Пн май 06, 2013 16:03:29

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение lucker21 »

подскажите пожалуйста как в старший регистр задать данные из памяти,а потом доставать их через y+ со смещением. идея чтобы в темп5 загружались цифры которые загружаються из матрицы,а нога отвечала за индикаторы...
СпойлерDisplay:


ldi noga,0
ldi YH,high(DcMatrix*2)
ldi YL,low(DcMatrix*2)
add ZL,temp5
adc ZH,temp4


d1:
ld temp5,y
inc noga
cpi noga,5
breq display
rcall decoder1
out PortD,noga
out portb,temp5
rjmp d1
ret
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение zero648 »

команды для индексных регистров:
загрузка из памяти:
ldd R,(Y+n)
сохранение в памяти:
std R,(Y+n)
n = 0...63
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

ATtiny 2313 режимы прерывания INT0 и INT1

Сообщение ATrosh »

Уважаемые коты! В даташите в разделе ВНЕШНИЕ ПРЕРЫВАНИЯ, НАЗНАЧЕНИЕ и РЕЖИМ РАБОТЫ сказано "Выбор одного из режимов производится при помощи регистра управления внешними прерываниями - EICRA" далее идет описание регистра MCUCR c битами ISC11, ISC10 и т.д., но изменение этих битов в программе не дает никаких изменений. Прерывание на INT1 происходит только по низкому входному уровню. Информации о регистре EICRA не нашел (может плохо искал :dont_know: ). Короче говоря подскажите кто может :)
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Сообщение ChipKiller »

Короче говоря подскажите кто может
.... у ATtiny2313А, кажется, прерывание можно задействовать на любом выводе (PCINTx) - ИМХО лучше написать, что нужно получить в итоге
Аватара пользователя
Rimsky
Грызет канифоль
Сообщения: 299
Зарегистрирован: Вт июн 15, 2010 07:16:42
Откуда: Иркутск
Контактная информация:

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Сообщение Rimsky »

ATrosh писал(а):Уважаемые коты! В даташите в разделе ВНЕШНИЕ ПРЕРЫВАНИЯ, НАЗНАЧЕНИЕ и РЕЖИМ РАБОТЫ сказано "Выбор одного из режимов производится при помощи регистра управления внешними прерываниями - EICRA" далее идет описание регистра MCUCR c битами ISC11, ISC10 и т.д., но изменение этих битов в программе не дает никаких изменений. Прерывание на INT1 происходит только по низкому входному уровню. Информации о регистре EICRA не нашел (может плохо искал :dont_know: ). Короче говоря подскажите кто может :)


Это опечатка, регистр EICRA есть в относительно новых атмегах таких как Atmega48...328. Видимо документацию тоже частично копи-пастят, что допускает такие ляпы. Для Attiny2313 биты режимов находятся в регистре MCUCR.
Аватара пользователя
ATrosh
Открыл глаза
Сообщения: 64
Зарегистрирован: Пт ноя 18, 2011 18:43:01

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Сообщение ATrosh »

Спасибо за ответы :)) . Буду пытать Тинку!
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15552
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: ATtiny 2313 режимы прерывания INT0 и INT1

Сообщение BOB51 »

Советую использовать последнюю из имеющихся на сайте Atmel редакцию документации (даташитов).
У меня была doc8246b.pdf, возможно сейчас и поновее уже имеется...
При симуляции в студии внимательно прочитать ограничения дебаггера для симулируемого кристалла!
:beer:
ch73
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение ch73 »

Кто в теме, подскажите пожалуйста, корректно ли в ATTiny2313 для выхода из подпрограммы использовать такой прием: вместо ret сделать 2 раза pop?
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение ibiza11 »

так вы обеспечите очистку стека от адреса возврата, но не вернетесь на то место, откуда вызывалась подпрограмма.
Ставим плюсы: )
ch73
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение ch73 »

Да, понимаю, мне так и нужно, из подпрограммы будет 2 выхода, один через ret, другой как-бы "принудительный", через pop, pop, rjmp. Просто уточнить хочу, на 2313 кроме стека ничего чистить не нужно? Не пинайте, последний раз пользовался ассемблером когда-то в 90-х на Spectrumе, если кто-нибудь такой помнит ;)))
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение ibiza11 »

больше ничего не нужно) только адрес возврата.
Ставим плюсы: )
ch73
Родился
Сообщения: 10
Зарегистрирован: Пн янв 28, 2013 08:08:25

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение ch73 »

Спасибо! (Плюс поставил))
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение B@R5uk »

Подскажите, пожалуйста, существует ли для самостоятельного изготовления какой-нибудь простой последовательный USB-программатор, поддерживаемый AVRStudio? По типу такого. Или же такого рода вещи всегда будут требовать установки сторонних самопальных драйверов и программ?
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение Kavka »

Последний раз редактировалось Kavka Пт авг 09, 2013 06:19:00, всего редактировалось 1 раз.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
B@R5uk
Собутыльник Кота
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Re: ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Сообщение B@R5uk »

Kavka, спасибо. Завтра внимательно повтыкаю, что там пишут. :)
Ответить

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