roboforum.ru

Технический форум по робототехнике.

Тупость, не работает кнопка :(

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 09:47

Где же можно посмотреть номинал такого резистоора ? или другого компонента ? Или как подключить какой то компонент ?

Вот ПУТАНОЕ объяснение в плохом форматировании:

Изображение

Re: Тупость, не работает кнопка :(

Vovan » 23 июл 2009, 10:15

Yuraskas писал(а):поставил себе задачу зажигать светодиод при нажатии на кнопку (по прерыванию)
и, очевидно тухнуть при отпускании?
а в Ваших программах ХЗ что...
Yuraskas писал(а):кнопка заработала, с тем кодом который я приводил выше
очень странно! Я проверил все Ваши варианты - они не работают так как указано в первом посте, да и не должны, ибо содержат одни и те же ошибки. Разберитесь.
Тут уже много советов выдано, но если хотите реально на асме - читайте Мортона - это букварь асматика :) , а уж потом модно Белова и остальных...

Re: Тупость, не работает кнопка :(

Yuraskas » 23 июл 2009, 10:47

Vovan писал(а):и, очевидно тухнуть при отпускании?

Нет, не очевидно, как тухнуть при отпускании я пока не придумал, поэтому пока только зажигаться (если не горела), либо тухнуть (если горела) :)
Вот этот вариант у меня работает:
Код: Выделить всёРазвернуть
.include "m8def.inc"

.cseg
.org 0x0000

RJMP Reset
RJMP INT_0
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI
RETI

Reset:

LDI R16,low(RAMEND)
OUT SPL,R16
LDI R16,high(RAMEND)
OUT SPH,R16

SEI

CBI DDRD,2            ;конфигурируем PD2 на вход
;SBI PORTD,2

SBI DDRD,0            ;PD0 на выход
CBI PORTD,0            ;зажигаем светодиод при старте МК

LDI R16,0x2            ;по спаду на INT0
OUT MCUCR,R16

LDI R16,1<<INTF0
OUT GICR,R16

Main:
RJMP Main

INT_0:
SBI PORTD,0            ;по прерыванию светодиод гасим
RETI


Если в коде есть ошибки, укажите на них, пожалуйста!!!

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 10:52

Советую начинайте и продолжайте на Си ! Это проще и эффективней для любителя.

Вот так просто в CVAVR и работает в PROTEUS сказочно ! Все в архиве прицеплено.
Заняло 11 минут.

Код в основном создан МАСТЕРОМ ! Я лишь чуток кода добавил.

Код: Выделить всёРазвернуть
#include <mega8.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTD |= (1 << 0);  // "1" на PD0
}

void main(void){
DDRD=0x01;       // PD0 выход
PORTD |= (1<<2); // подтяжка на PD2
GICR|=0x40;  // INT0: On Mode: Falling Edge  INT1: Off
MCUCR=0x02;
GIFR=0x40;
#asm("sei")
while (1){
if (PIND.2){
PORTD &= (~(1 << 0));   // "0" на PD0
           }   };
}


Добавлено спустя 3 минуты 5 секунд:
Yuraskas писал(а):пока только зажигаться (если не горела), либо тухнуть (если горела) :)


Это еще проще ! Кода меньше.

Код: Выделить всёРазвернуть
#include <mega8.h>
interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTD ^= (1 << 0);  // переключить светодиод на PD0
}

void main(void){
DDRD=0x01;       // PD0 выход
PORTD |= (1<<2); // подтяжка на PD2
GICR|=0x40;  // INT0: On Mode: Falling Edge  INT1: Off
MCUCR=0x02;
GIFR=0x40;
#asm("sei")
while (1){}  }
Вложения
button.rar
(29.95 КиБ) Скачиваний: 10
Последний раз редактировалось avr123.nm.ru 23 июл 2009, 11:31, всего редактировалось 2 раз(а).

Re: Тупость, не работает кнопка :(

Victorovych » 23 июл 2009, 11:20

А ты шутки ради дизасемблируй написанное

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 11:23

А в архиве листинг на АСМе причем в привязке к строкам кода на Си. CVAVR создает при компиляции .asm и .lst

Re: Тупость, не работает кнопка :(

Yuraskas » 23 июл 2009, 11:25

Дорогой avr123.nm.ru по поводу С вы даёте правильный совет, на нём действительно проще и эффективнее, но я все же хочу для начала понять самые основы, и хотя бы подобные мелкие вещи научиться писать на асме. Времязатраты меня пока не интересуют, пусть я буду писать долго, главное чтобы понял что и зачем я пишу. Так я сейчас пытаюсь понять как работает резистор подтяжки, понимание приходит, но медленно...

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

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 11:28

Я тоже вас обидеть не хочу. Я хочу вам помочь и ИСКРЕННЕ считаю что основы можно и на Си понять и попробовать. У меня в курсе задача 1 тоже мигание светодиодами.

Кроме того в архиве можно ведь и АСМ ПРАВИЛЬНЫЙ от CVAVR посмотреть !

Код: Выделить всёРазвернуть

;CodeVisionAVR C Compiler V1.25.9 Professional
;(C) Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
;http://www.hpinfotech.com

   .CSEG
   .ORG 0

;INTERRUPT VECTORS
   RJMP __RESET
   RJMP _ext_int0_isr
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   RJMP 0x00
   

__GLOBAL_INI_TBL:
   .DW  0
_0x08:


__RESET:
   CLI
   CLR  R30
   OUT  EECR,R30

;INTERRUPT VECTORS ARE PLACED
;AT THE START OF FLASH
   LDI  R31,1
   OUT  GICR,R31
   OUT  GICR,R30
   OUT  MCUCR,R30

;DISABLE WATCHDOG
   LDI  R31,0x18
   OUT  WDTCR,R31
   OUT  WDTCR,R30

;CLEAR R2-R14
   LDI  R24,13
   LDI  R26,2
   CLR  R27
__CLEAR_REG:
   ST   X+,R30
   DEC  R24
   BRNE __CLEAR_REG

;CLEAR SRAM
   LDI  R24,LOW(0x400)
   LDI  R25,HIGH(0x400)
   LDI  R26,0x60
__CLEAR_SRAM:
   ST   X+,R30
   SBIW R24,1
   BRNE __CLEAR_SRAM

;GLOBAL VARIABLES INITIALIZATION
   LDI  R30,LOW(__GLOBAL_INI_TBL*2)
   LDI  R31,HIGH(__GLOBAL_INI_TBL*2)
__GLOBAL_INI_NEXT:
   LPM  R24,Z+
   LPM  R25,Z+
   SBIW R24,0
   BREQ __GLOBAL_INI_END
   LPM  R26,Z+
   LPM  R27,Z+
   LPM  R0,Z+
   LPM  R1,Z+
   MOVW R22,R30
   MOVW R30,R0
__GLOBAL_INI_LOOP:
   LPM  R0,Z+
   ST   X+,R0
   SBIW R24,1
   BRNE __GLOBAL_INI_LOOP
   MOVW R30,R22
   RJMP __GLOBAL_INI_NEXT
__GLOBAL_INI_END:

;STACK POINTER INITIALIZATION
   LDI  R30,LOW(0x45F)
   OUT  SPL,R30
   LDI  R30,HIGH(0x45F)
   OUT  SPH,R30

;DATA STACK POINTER INITIALIZATION
   LDI  R28,LOW(0x160)
   LDI  R29,HIGH(0x160)

   RJMP _main

   .ESEG
   .ORG 0

   .DSEG
   .ORG 0x160

;     103 interrupt [EXT_INT0] void ext_int0_isr(void)
;     104 {

   .CSEG
_ext_int0_isr:
;     105 PORTD |= (1 << 0);  // "1" на PD0
   SBI  0x12,0
;     106 }
   RETI
;     107
;     108 void main(void){
_main:
;     109 DDRD=0x01;       // PD0 выход
   LDI  R30,LOW(1)
   OUT  0x11,R30
;     110 PORTD |= (1<<2); // подтяжка на PD2
   SBI  0x12,2
;     111 GICR|=0x40;  // INT0: On Mode: Falling Edge  INT1: Off
   IN   R30,0x3B
   ORI  R30,0x40
   OUT  0x3B,R30
;     112 MCUCR=0x02;
   LDI  R30,LOW(2)
   OUT  0x35,R30
;     113 GIFR=0x40;
   LDI  R30,LOW(64)
   OUT  0x3A,R30
;     114 #asm("sei")
   sei
;     115 while (1){
_0x3:
;     116 if (PIND.2){
   SBIC 0x10,2
;     117 PORTD &= (~(1 << 0));   // "0" на PD0
   CBI  0x12,0
;     118            }   };
   RJMP _0x3
;     119 }
_0x7:
   RJMP _0x7
;     120


;END OF CODE MARKER
__END_OF_CODE:

Re: Тупость, не работает кнопка :(

Victorovych » 23 июл 2009, 11:50

только в "правильном" асме куча мусора

Re: Тупость, не работает кнопка :(

Yuraskas » 23 июл 2009, 12:00

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

Хотелось бы всё же увидеть мой код который я приводил выше с указанием на мои ошибки.

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 12:11

Victorovych писал(а):только в "правильном" асме куча мусора

CVAVR это не компилятор в АСМ. Такого "мусора" достаточно в листингах и других компиляторах. Просто АСМ созданый CVAVR прекрасно ассемблируется в AVR Studio - ведь в CVAVR тотже ассемблер что и в студии.

И главное РАБОТЕТ хорошо.

Re: Тупость, не работает кнопка :(

Duhas » 23 июл 2009, 12:26

Yuraskas писал(а):[code]
Reset:

LDI R16,low(RAMEND)
OUT SPL,R16
LDI R16,high(RAMEND)
OUT SPH,R16

SEI

CBI DDRD,2 ;конфигурируем PD2 на вход
;SBI PORTD,2

SBI DDRD,0 ;PD0 на выход
CBI PORTD,0 ;зажигаем светодиод при старте МК

LDI R16,0x2 ;по спаду на INT0
OUT MCUCR,R16

LDI R16,1<<INTF0
OUT GICR,R16

Main:
RJMP Main


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

вообще ошибок я воде не вижу...

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

2АВР, было бы более чем странно, если бы студия и другие СЁ-вые компиляторы работали с разными наборами инструкций....

ПС, си язык привыкший к работе с памятью, имхо, и в случае МК, опять же имхо, особенно с богатым набором регистров общего назначения в кол-ве 32 штуки, никогда не будет оптимальнее ассемблера в более или менее прямых руках..
но это увы офф )) просто раздражает многократная агитация на СИ... асм, для понимания, 3-й раз имхо, правильней...

топиктартеру, на счет резистора.. при мощности 0.125Вт меньше 200, а лучше 220 Ом низя, погореть может... верхний предел практически не ограничен... не в курсе сколько там нужно току для входа МК чтобы стабильно держать уровень... но думаю можно взять верхний предел в 100кОм... да и вряд ли у вас в закромах валяются кучки мегаомных резисторов...

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 12:35

Замечание: в PROTEUS есть ассемблер ! Вы можете в PROTEUS разрабатывать прогу и на АСМ
Пример в папке - C:\Program Files\Proteus\SAMPLES\VSM for AVR\AVR Tiny15 Demo

Добавлено спустя 5 минут 45 секунд:
Duhas писал(а):2АВР, было бы более чем странно, если бы студия и другие СЁ-вые компиляторы работали с разными наборами инструкций ...

Кроме инструкций программа содержит и другие элементы синтаксиса которые могут отличаться у других ассемблеров. У IAR свой ассемблер, у VMLAB в АСМ-е тоже есть особенности. Есть еще tavrasm и наверно еще куча малоизвестных.

Re: Тупость, не работает кнопка :(

Duhas » 23 июл 2009, 12:38

ну мб оно и так, но большинство директив новичку: 1 - неизвестно, 2 - не нужно....

Re: Тупость, не работает кнопка :(

avr123.nm.ru » 23 июл 2009, 12:45

Я вам просто ответил что ничего странного нет, что сходу что-то где-то не сассемблится. Все предсказуемо при внимательном чтении документации.


Rambler\'s Top100 Mail.ru counter