Страница 39 из 132

Добавлено: Вт сен 08, 2009 12:50:18
Vergilium
какой контроллер то?
ATtiny2313

Добавлено: Вт сен 08, 2009 13:13:51
izmmisha
Ну в общем то проблема ясна ;) сам с этим по началу парился
У контроллера нет конкретного прерывания для каждого порта, у него есть общее прерывание

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

12 0x000B PCINT Pin Change Interrupt
Описание прерывания должно выглядеть так:

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

ISR(PCINT_vect)
{
led[0]=r;
}
Вот как можно узнать прицепилось ли прерывание
делаем думп и видим что ни одно прерывание не подцепилось

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

$ avr-objdump -S test

test:     file format elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2a c0       	rjmp	.+84     	; 0x58 <__bad_interrupt>
   4:	29 c0       	rjmp	.+82     	; 0x58 <__bad_interrupt>
   6:	28 c0       	rjmp	.+80     	; 0x58 <__bad_interrupt>
   8:	27 c0       	rjmp	.+78     	; 0x58 <__bad_interrupt>
   a:	26 c0       	rjmp	.+76     	; 0x58 <__bad_interrupt>
   c:	25 c0       	rjmp	.+74     	; 0x58 <__bad_interrupt>
   e:	24 c0       	rjmp	.+72     	; 0x58 <__bad_interrupt>
  10:	23 c0       	rjmp	.+70     	; 0x58 <__bad_interrupt>
  12:	22 c0       	rjmp	.+68     	; 0x58 <__bad_interrupt>
  14:	21 c0       	rjmp	.+66     	; 0x58 <__bad_interrupt>
  16:	20 c0       	rjmp	.+64     	; 0x58 <__bad_interrupt>
  18:	1f c0       	rjmp	.+62     	; 0x58 <__bad_interrupt>
  1a:	1e c0       	rjmp	.+60     	; 0x58 <__bad_interrupt>
  1c:	1d c0       	rjmp	.+58     	; 0x58 <__bad_interrupt>
  1e:	1c c0       	rjmp	.+56     	; 0x58 <__bad_interrupt>
  20:	1b c0       	rjmp	.+54     	; 0x58 <__bad_interrupt>
  22:	1a c0       	rjmp	.+52     	; 0x58 <__bad_interrupt>
  24:	19 c0       	rjmp	.+50     	; 0x58 <__bad_interrupt>
Ну и при компиляции с не верным именем прерывания выдается сообщение:

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

$ avr-gcc -std=c99 -g -O -mmcu=attiny2313 -c test.c -o test.o
test.c: В функции ‘main’:
test.c:33: предупреждение: неявное приведение большого целого значения к беззнаковому типу
test.c: В функции ‘PCINT0_vect’:
test.c:13: предупреждение: ‘PCINT0_vect’ возможно некорректно называнный обработчик сигнала
При замене на правильное объявление при компиляции не будет предупреждения и думп будет выглядеть так:

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

$ avr-objdump -S test

test:     file format elf32-avr


Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2a c0       	rjmp	.+84     	; 0x58 <__bad_interrupt>
   4:	29 c0       	rjmp	.+82     	; 0x58 <__bad_interrupt>
   6:	28 c0       	rjmp	.+80     	; 0x58 <__bad_interrupt>
   8:	27 c0       	rjmp	.+78     	; 0x58 <__bad_interrupt>
   a:	26 c0       	rjmp	.+76     	; 0x58 <__bad_interrupt>
   c:	25 c0       	rjmp	.+74     	; 0x58 <__bad_interrupt>
   e:	24 c0       	rjmp	.+72     	; 0x58 <__bad_interrupt>
  10:	23 c0       	rjmp	.+70     	; 0x58 <__bad_interrupt>
  12:	22 c0       	rjmp	.+68     	; 0x58 <__bad_interrupt>
  14:	21 c0       	rjmp	.+66     	; 0x58 <__bad_interrupt>
  16:	21 c0       	rjmp	.+66     	; 0x5a <__vector_11>
  18:	1f c0       	rjmp	.+62     	; 0x58 <__bad_interrupt>
  1a:	1e c0       	rjmp	.+60     	; 0x58 <__bad_interrupt>
  1c:	1d c0       	rjmp	.+58     	; 0x58 <__bad_interrupt>
  1e:	1c c0       	rjmp	.+56     	; 0x58 <__bad_interrupt>
  20:	1b c0       	rjmp	.+54     	; 0x58 <__bad_interrupt>
  22:	1a c0       	rjmp	.+52     	; 0x58 <__bad_interrupt>
  24:	19 c0       	rjmp	.+50     	; 0x58 <__bad_interrupt>
Вот собственно и 12е прерывание, указывающее на вашу функцию

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

  16:   21 c0          rjmp   .+66        ; 0x5a <__vector_11> 
P.S. пардон, на счет "какой контроллер?" затупил, тема ж про tiny2313

Добавлено: Вт сен 08, 2009 20:04:17
Vergilium
Благодарю, буду пробывать. Я так понимаю чтобы привязатся к конкретной клавише на входе нужно проверять в самой функции прерывания какая клавиша нажата.
Мне нужно в соответствии нажатой клавише выполнить определенное действие. Может у кого есть примерчик какой либо.

Добавлено: Вт сен 08, 2009 21:04:17
izmmisha
Vergilium писал(а):Я так понимаю чтобы привязатся к конкретной клавише на входе нужно проверять в самой функции прерывания какая клавиша нажата.
Да, а вот в ATmega3290 для отдельных пинов отдельные прерывания ;)
Vergilium писал(а):Мне нужно в соответствии нажатой клавише выполнить определенное действие. Может у кого есть примерчик какой либо.
что-то типа того:

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

static uint8_t pred;
ISR(PCINT_vect)
{
    uint8_t change = (PINB & 0x1F) ^ pred;
    if(change & _BV(PB0))
        led[0]=r;
    else if(change & _BV(PB1))
        led[0]=b;
    pred = PINB & 0x1F;
}

Добавлено: Вт сен 08, 2009 21:17:48
Vergilium
Урраааа! Заработало. Большое спасибо буду разбератся с кодом.

Добавлено: Пт сен 11, 2009 06:21:05
Takker
Здравствуйте!!! Я собираю робота на микроконтроллере ATtiny2313, я пока новичок, и много не знаю, помогите пожалуйста связать радио модуль RFM12 и контроллер цифровой связью... Зарание спасибо!
Программирую на Си

Добавлено: Пт сен 11, 2009 17:54:04
Aheir
Какой интерфейс у модуля? Подозреваю, что UART. Вот и поищите темы по нему, информации масса :)

Добавлено: Сб сен 12, 2009 10:22:34
Takker
Насчёт интерфейса незнаю) Не читал пока) Я имею ввиду програмно как связать по командам?

Добавлено: Вс сен 13, 2009 15:39:21
Aheir
В таком случае, позвольте поинтересоваться, Вы сами понимаете некоторую абсурдность своего вопроса? :) Возможно, стоит дать себе труд почитать документацию на модуль? Иначе как Вы собираетесь разбираться в тех ответах, которые получите? Впрочем, судя по вопросу, я сомневаюсь, что буду ответы... ;)

Добавлено: Пт сен 18, 2009 08:03:26
evgeshka
у меня вопрос достойный статуса чайника = )
Attiny2313v-10pu. внешний кварц на 8МГц. можно ли его прошить пятью проводами, НО без схемы. то есть позже установить = )?

Добавлено: Пт сен 18, 2009 08:44:52
Alex72
Можно, отчего ж нельзя

Добавлено: Вс сен 20, 2009 12:39:19
Redrik Shuhart
HEEELP! помогите! 2313 мрут как мухи. шью програматором громова(доработанім(кварц отдельно присоеденяется). вот исходник.
они после прошивки перестают определятся, уже 2 тиньки убил так((( питание от комп БП
шью с помошью унипрофа.
прикол в том, что они работают. мож ҐЛПТ програматор аля 5 проводков попробовать?

Добавлено: Вс сен 20, 2009 13:36:49
Redrik Shuhart
комп его не видет

но он работает, аля светофор.

Добавлено: Вс сен 20, 2009 13:47:59
Arlleex
а фьюзы прошил? ну тогда ищи парралельный программатор или реаниматор.

Добавлено: Вс сен 20, 2009 13:53:20
Redrik Shuhart
фьюзы не трогал.

Добавлено: Вт сен 22, 2009 10:37:42
evgeshka
achtung!!! я уже на грани срыва. поэтому хочу совета.
плата http://radiokot.ru/circuit/digital/home/36/ уже травлена.
пара ATtiny2313 (soic & dip) куплены.
проги (avrasm, tavrasm, avreal, Atmel AVR Tools) скачены.
папки созданы.
но ничего не запускается.
tavrasm ругается что
program terminated - unable to open list file 'output\listfile.lst'
еще необходимо что то исправить в avreal что бы прошить этот attiny2313 и квартс 8Mhz. очевидно это должно выглядеть как:
F:\avr\avreal\avreal32-1.27r3.exe +tiny2313 -! -p1 -ab -o8Mhz -ew output\hexfile.hex -n
pause=null

честно.
прошивать хочу пятью проводами.
я уже израсходовал месячный траффик работы. а сейчас пойду проводить релаксацию усов.

Добавлено: Ср сен 23, 2009 09:27:05
Kaban
Чес слово ничего не понял :)) evgeshka по моему вы пытаетесь изобрести велосипед. Делайте простой СТК200 и поставьте кодевижн и будет вам счастье :)) И зачем целая куча программ для прошивки :shock:

Добавлено: Ср сен 23, 2009 09:38:39
izmmisha
Прошивка же уже есть готовая, компилить не обязательно (если не хотите что либо изменить), тогда вам для прошивки 5ю проводами подойдет UniProF. Сам проверял работает программа отлично и очень простая.


Ну и сам как новичек начинал с AVR шаг первый - программат и вам советую ;)

Добавлено: Ср сен 23, 2009 12:09:17
evgeshka
програматор делать на пару раз не вижу (пока еще) смысла. мне сделать прошить один раз и пока на этот год хватит.

унипроф...хм аппетитно звучит. выражаю свою благодарность = )

Добавлено: Пт сен 25, 2009 09:40:11
allergen
Привет!
Делаю контроллер для девайса в котором будут 3 шаговых двигателя (драйвера на них есть, зовут их SLA7024M, выковырял из того-же принтера, что и движки), ~10 кнопок, 3 реостата и штук пять светодиодов. Управлять всем этим хозяйством вроде мог бы МК ATtiny2313, да ног не хватает. Как быть?

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