Страница 1 из 2

Atmega162

Добавлено: Сб авг 28, 2010 13:27:44
Archangel089
Доброго времяни суток!
Года 2 назад программировал на 90s2313. Недавно купил себе Atmega162. И не могу написать даже самой простой программы-моргание диода. Подскажите пожалуйста исходный код на ассемблере!
Зы- для компиляции использую avr studio 4 и для прошивки avreal

Re: Atmega162

Добавлено: Сб авг 28, 2010 13:47:10
SII
Код Вам не напишут хотя бы потому, что неизвестно, к какой ноге прицеплен светодиод, а значит, непонятно, какой ногой нужно дрыгать, чтобы он мигал (а номер ноги зависит ещё и от вида корпуса микросхемы -- вроде 2 варианта существуют). И вообще, в чём проблема-то? Программа ж элементарнее некуда...

Re: Atmega162

Добавлено: Сб авг 28, 2010 14:24:12
Archangel089
Atmega162-16pu.
Ну пускай будет на первой ножке-pb0.
Знаю что элементарно. Но что то не могу сделать даже этого. Хотя поднимал все старые записи. Может быть все из за того, что другой контролер...

Re: Atmega162

Добавлено: Сб авг 28, 2010 15:20:40
SII
Что-нибудь в этом роде:

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

        .CSEG
        .ORG    0

; =======================
;
; Таблица векторов прерываний
;
; =======================

        jmp     Reset           ; Сброс, включение питания, сторожевой таймер
        jmp     _IRQ            ; Внешнее прерывание INT0
        jmp     _IRQ            ; Внешнее прерывание INT1
        jmp     _IRQ            ; Внешнее прерывание INT2
        jmp     _IRQ            ; Pin Change Interrupt Request 0
        jmp     _IRQ            ; Pin Change Interrupt Request 1
        jmp     _IRQ            ; Timer/Counter3 Capture Event
        jmp     _IRQ            ; Timer/Counter3 Compare Match A
        jmp     _IRQ            ; Timer/Counter3 Compare Match B
        jmp     _IRQ            ; Timer/Counter3 Overflow
        jmp     _IRQ            ; Timer/Counter2 Compare Match
        jmp     _IRQ            ; Timer/Counter2 Overflow
        jmp     _IRQ            ; Timer/Counter1 Capture Event
        jmp     _IRQ            ; Timer/Counter1 Compare Match A
        jmp     _IRQ            ; Timer/Counter1 Compare Match B
        jmp     _IRQ            ; Timer/Counter1 Overflow
        jmp     _IRQ            ; Timer/Counter0 Compare Match
        jmp     _IRQ            ; Timer/Counter0 Overflow
        jmp     _IRQ            ; Serial Transfer Complete
        jmp     _IRQ            ; USART0, Rx Complete
        jmp     _IRQ            ; USART1, Rx Complete
        jmp     _IRQ            ; USART0 Data Register Empty
        jmp     _IRQ            ; USART1 Data Register Empty
        jmp     _IRQ            ; USART0, Tx Complete
        jmp     _IRQ            ; USART1, Tx Complete
        jmp     _IRQ            ; EEPROM Ready
        jmp     _IRQ            ; Analog Comparator
        jmp     _IRQ            ; Store Program Memory Ready

_IRQ:   reti



; =======================
;
; Точка входа по сбросу/включению питания
;
; =======================

Reset:
        ; Инициализация указателя стека: вершина по адресу 4FF (конец ОЗУ)
        ldi     R16, 4
        out     SPH, R16
        ldi     R16, 0xFF
        out     SPL, R16

        ; Инициализация порта B (линия 0 работает на выход)
        ldi     R16, 0x01
        out     DDRB, R16

Loop:
        ; Выдача на PB0 единицы
        ldi     R16, 0x01
        out     PORTB, R16

        ; Задержка
        ldi     R31, 0xFF
        ldi     R30, 0xFF
L1:     sbiw    R31:R30, 1
        brne    L1

        ; Выдача на PB0 нуля
        ldi     R16, 0x00
        out     PORTB, R16

        ; Задержка
        ldi     R31, 0xFF
        ldi     R30, 0xFF
L2:     sbiw    R31:R30, 1
        brne    L2

        rjmp    Loop

Re: Atmega162

Добавлено: Сб авг 28, 2010 16:28:11
Archangel089
Большое спасибо!
Ещё буду очень признателен за ссылки на учебники по данному способу программирования, ибо первый раз вижу такое исполнение...

Re: Atmega162

Добавлено: Сб авг 28, 2010 16:37:25
SII
Ссылки уж точно не ко мне, я программированию учился четверть века назад. Ну а документацию по контроллеру можно (и нужно) найти на сайте Атмел.

Re: Atmega162

Добавлено: Сб авг 28, 2010 23:10:36
GP1
SII писал(а):Что-нибудь в этом роде:

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

        .CSEG
        .ORG    0

; =======================
;
; Таблица векторов прерываний
;
; =======================

        jmp     Reset           ; Сброс, включение питания, сторожевой таймер
        jmp     _IRQ            ; Внешнее прерывание INT0
        jmp     _IRQ            ; Внешнее прерывание INT1
        jmp     _IRQ            ; Внешнее прерывание INT2
        jmp     _IRQ            ; Pin Change Interrupt Request 0
        jmp     _IRQ            ; Pin Change Interrupt Request 1
        jmp     _IRQ            ; Timer/Counter3 Capture Event
        jmp     _IRQ            ; Timer/Counter3 Compare Match A
        jmp     _IRQ            ; Timer/Counter3 Compare Match B
        jmp     _IRQ            ; Timer/Counter3 Overflow
        jmp     _IRQ            ; Timer/Counter2 Compare Match
        jmp     _IRQ            ; Timer/Counter2 Overflow
        jmp     _IRQ            ; Timer/Counter1 Capture Event
        jmp     _IRQ            ; Timer/Counter1 Compare Match A
        jmp     _IRQ            ; Timer/Counter1 Compare Match B
        jmp     _IRQ            ; Timer/Counter1 Overflow
        jmp     _IRQ            ; Timer/Counter0 Compare Match
        jmp     _IRQ            ; Timer/Counter0 Overflow
        jmp     _IRQ            ; Serial Transfer Complete
        jmp     _IRQ            ; USART0, Rx Complete
        jmp     _IRQ            ; USART1, Rx Complete
        jmp     _IRQ            ; USART0 Data Register Empty
        jmp     _IRQ            ; USART1 Data Register Empty
        jmp     _IRQ            ; USART0, Tx Complete
        jmp     _IRQ            ; USART1, Tx Complete
        jmp     _IRQ            ; EEPROM Ready
        jmp     _IRQ            ; Analog Comparator
        jmp     _IRQ            ; Store Program Memory Ready

_IRQ:   reti


:shock:
Сколько раз уже повторялось, оформление таблицы векторов в ТАКОМ ВИДЕ :shock: - есть прямой путь к ошибкам и гемору при отладке программы.

по теме:
мне как-то попадалась именно мега162 которая напрочь отказывалась работать пока не подключил на свободных ногах пуллапы.

Re: Atmega162

Добавлено: Вс авг 29, 2010 10:34:32
SII
Не знаю, какие у Вас возникали проблемы с таким оформлением, а у меня проблем никаких никогда не возникало.

Re: Atmega162

Добавлено: Вс авг 29, 2010 19:28:50
GP1
У меня проблем не возникало, так как я никогда не писал, но на форуме не реже 1 раза в месяц, просто сейчас мало кого асм-ом заинтересуешь, появляются темы типа:
"HELP! Ничего не работает", при разборе которых оказывается, что вся проблема в таблице векторов прерываний.

Re: Atmega162

Добавлено: Вс авг 29, 2010 20:17:56
SII
Ну так надо правильно определять эту самую таблицу, что я и сделал. Вот и хотелось бы узнать, какие проблемы при её оформлении в ТАКОМ ВИДЕ могут возникнуть? Где здесь путь к "ошибкам и гемору при отладке программы"? И какой способ оформления таблицы прерываний Вы предпочитаете?

Re: Atmega162

Добавлено: Пн авг 30, 2010 08:40:36
GP1
я предпочитаю такой стиль написания:
http://radiokot.ru/forum/viewtopic.php?p=543675#p543675
и чуть выше у того же автора есть пара постов с объяснениями, просто я не умею так излагать свои мысли, мне бы чего по-проще, асм например.

Re: Atmega162

Добавлено: Пн авг 30, 2010 09:55:22
SII
Ну, такой подход имеет право на жизнь, но лично мне он не нравится. Мне кажется куда более простым и, главное, надёжным один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер) и возвращаться к ней только в том случае, если надо указать имя обработчика того или иного прерывания, что у меня, собсно, и сделано. Конечно, можно допустить какую-нибудь ошибку, но точно так же её можно допустить и в альтернативном подходе (указал случайно, например, неверное имя вектора -- ведь некоторые из них имеют почти одинаковые имена, отличающиеся лишь, например, номерами таймеров). Проблем с отладкой тоже никаких: ставишь брякпоинт на нужный вектор, да и всё. Правда, мой подход требует обязательного комментирования, какой jmp к какому вектору относится, поскольку их названия отсутствуют, но лично я не ленюсь снабжать свои программы комментариями.

Re: Atmega162

Добавлено: Пн авг 30, 2010 10:18:23
GP1
SII писал(а): один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер)
Один раз не получится полюбому
1. у tiny нет команды jmp
2. а у младших mega вектора переходов однословные, а jmp занимает 2 слова
так что вот как-то так, плавно перетекаем к правилам написания векторов, описанных в предыдущем посте :tea:
указал случайно, например, неверное имя вектора
как можно указать неправильное имя вектора при копи-пастном методе, необходимые имена тупо копируются из def* файла.

Re: Atmega162

Добавлено: Пн авг 30, 2010 10:36:03
Archangel089
А вот подскажите вот такой вот вопрос-решил попробывать пропатчить AVRStudio на C++. скачал патч.... и ничего что то не пропатчилось... патч-WinAVR-20100110-install.exe. установился как отдельна прога. и при меню опен открывает кучу экзешников. но ни один выбрать нельзя. качал отседа-http://cdnetworks-kr-2.dl.sourceforge.net/project/winavr/WinAVR/20100110/WinAVR-20100110-install.exe.

Re: Atmega162

Добавлено: Пн авг 30, 2010 11:14:28
ARV
Archangel089 писал(а):А вот подскажите вот такой вот вопрос-решил попробывать пропатчить AVRStudio на C++. скачал патч.... и ничего что то не пропатчилось... патч-WinAVR-20100110-install.exe. установился как отдельна прога. и при меню опен открывает кучу экзешников. но ни один выбрать нельзя. качал отседа-http://cdnetworks-kr-2.dl.sourceforge.net/project/winavr/WinAVR/20100110/WinAVR-20100110-install.exe.
вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.

Re: Atmega162

Добавлено: Пн авг 30, 2010 11:19:25
Archangel089
ARV писал(а):[вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.
А можно поинтересоваться-что это собственно за минимумы???

Re: Atmega162

Добавлено: Пн авг 30, 2010 11:24:49
ARV
минимумы? ну, как минимум, использовать правильные расширения файлов, чтобы avr-gcc правильно компилировал С++ исходники. может быть придется отказаться от настроек параметров компиляции в мастере - придется использовать вручную сделанный makefile... ну и в чем тогда польза студии, скажите мне? ;)

Re: Atmega162

Добавлено: Пн авг 30, 2010 11:35:58
Archangel089
Что то я в этой жизни определённо не понимаю...
Нашел вот такой код:

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

#include <avr/io.h> 
#include <avr/interrupt.h> 

int N=0; 

ISR(TIMER0_COMP_vect) 
{ 
N=TCNT1; 
TCNT0=0; 
N=0; 
} 


int main(void) 
{ 
DDRA=0xFF; 
PORTA=0xFF; 
TCCR0=0x01;//Set timer0 
OCR0=0x5F; 
TIMSK=0x01; 
sei(); 
while(1) 
{ 
asm volatile ("nop"); 
volatile N=N+1; 
asm volatile ("nop"); 
asm volatile ("nop"); 
} 
}
Programmer's Notepad,создал новый проэкт C/C++, встывил и выбрал Tools-> Make All. Вылазит окно "сохранить как"...
как я понял-надо сохранить под каким либо именем и расширением .HEX? или я опять что то не так понял?

Re: Atmega162

Добавлено: Пн авг 30, 2010 11:41:09
ARV
во-первых, ща придет злобный дядя-модератор (или красивая тетя-модератор) и прикроет ваши (и мои) словоизлияния, как не имеющие к atmega162 никакого отношения...

во-вторых, такие "примеры" я бы выбрасывал сразу, не пытаясь скомпилировать

в-третьих, где в вашем примере С++ ??? им и не пахнет. А Сишные проекты собираются без всякого нотепада - прямиком в студии.

с нотепадами не работал, ничего не скажу...

Re: Atmega162

Добавлено: Пн авг 30, 2010 12:05:17
Archangel089
Ну надеюсь не прикроют пока....
Так в том то и дело-в какой именно студии??? Можно по пунктам что и как делать?!