Atmega162

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Atmega162

Post by Archangel089 »

Доброго времяни суток!
Года 2 назад программировал на 90s2313. Недавно купил себе Atmega162. И не могу написать даже самой простой программы-моргание диода. Подскажите пожалуйста исходный код на ассемблере!
Зы- для компиляции использую avr studio 4 и для прошивки avreal
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Реклама
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Код Вам не напишут хотя бы потому, что неизвестно, к какой ноге прицеплен светодиод, а значит, непонятно, какой ногой нужно дрыгать, чтобы он мигал (а номер ноги зависит ещё и от вида корпуса микросхемы -- вроде 2 варианта существуют). И вообще, в чём проблема-то? Программа ж элементарнее некуда...
Реклама
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

Atmega162-16pu.
Ну пускай будет на первой ножке-pb0.
Знаю что элементарно. Но что то не могу сделать даже этого. Хотя поднимал все старые записи. Может быть все из за того, что другой контролер...
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Что-нибудь в этом роде:

Code: Select all

        .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
Реклама
Эиком - электронные компоненты и радиодетали
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

Большое спасибо!
Ещё буду очень признателен за ссылки на учебники по данному способу программирования, ибо первый раз вижу такое исполнение...
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Реклама
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Ссылки уж точно не ко мне, я программированию учился четверть века назад. Ну а документацию по контроллеру можно (и нужно) найти на сайте Атмел.
Реклама
User avatar
GP1
Поставщик валерьянки для Кота
Posts: 2401
Joined: Fri May 23, 2008 19:32:22
Location: Россия, Волгоград
Contact:

Re: Atmega162

Post by GP1 »

SII wrote:Что-нибудь в этом роде:

Code: Select all

        .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 которая напрочь отказывалась работать пока не подключил на свободных ногах пуллапы.
Чем дальше, тем больше становлюсь занудой...
Image
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Не знаю, какие у Вас возникали проблемы с таким оформлением, а у меня проблем никаких никогда не возникало.
User avatar
GP1
Поставщик валерьянки для Кота
Posts: 2401
Joined: Fri May 23, 2008 19:32:22
Location: Россия, Волгоград
Contact:

Re: Atmega162

Post by GP1 »

У меня проблем не возникало, так как я никогда не писал, но на форуме не реже 1 раза в месяц, просто сейчас мало кого асм-ом заинтересуешь, появляются темы типа:
"HELP! Ничего не работает", при разборе которых оказывается, что вся проблема в таблице векторов прерываний.
Чем дальше, тем больше становлюсь занудой...
Image
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Ну так надо правильно определять эту самую таблицу, что я и сделал. Вот и хотелось бы узнать, какие проблемы при её оформлении в ТАКОМ ВИДЕ могут возникнуть? Где здесь путь к "ошибкам и гемору при отладке программы"? И какой способ оформления таблицы прерываний Вы предпочитаете?
User avatar
GP1
Поставщик валерьянки для Кота
Posts: 2401
Joined: Fri May 23, 2008 19:32:22
Location: Россия, Волгоград
Contact:

Re: Atmega162

Post by GP1 »

я предпочитаю такой стиль написания:
http://radiokot.ru/forum/viewtopic.php?p=543675#p543675
и чуть выше у того же автора есть пара постов с объяснениями, просто я не умею так излагать свои мысли, мне бы чего по-проще, асм например.
Чем дальше, тем больше становлюсь занудой...
Image
SII
Вымогатель припоя
Posts: 635
Joined: Fri Jan 30, 2009 14:50:35
Location: Солнечногорск

Re: Atmega162

Post by SII »

Ну, такой подход имеет право на жизнь, но лично мне он не нравится. Мне кажется куда более простым и, главное, надёжным один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер) и возвращаться к ней только в том случае, если надо указать имя обработчика того или иного прерывания, что у меня, собсно, и сделано. Конечно, можно допустить какую-нибудь ошибку, но точно так же её можно допустить и в альтернативном подходе (указал случайно, например, неверное имя вектора -- ведь некоторые из них имеют почти одинаковые имена, отличающиеся лишь, например, номерами таймеров). Проблем с отладкой тоже никаких: ставишь брякпоинт на нужный вектор, да и всё. Правда, мой подход требует обязательного комментирования, какой jmp к какому вектору относится, поскольку их названия отсутствуют, но лично я не ленюсь снабжать свои программы комментариями.
User avatar
GP1
Поставщик валерьянки для Кота
Posts: 2401
Joined: Fri May 23, 2008 19:32:22
Location: Россия, Волгоград
Contact:

Re: Atmega162

Post by GP1 »

SII wrote: один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер)
Один раз не получится полюбому
1. у tiny нет команды jmp
2. а у младших mega вектора переходов однословные, а jmp занимает 2 слова
так что вот как-то так, плавно перетекаем к правилам написания векторов, описанных в предыдущем посте :tea:
указал случайно, например, неверное имя вектора
как можно указать неправильное имя вектора при копи-пастном методе, необходимые имена тупо копируются из def* файла.
Чем дальше, тем больше становлюсь занудой...
Image
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

А вот подскажите вот такой вот вопрос-решил попробывать пропатчить AVRStudio на C++. скачал патч.... и ничего что то не пропатчилось... патч-WinAVR-20100110-install.exe. установился как отдельна прога. и при меню опен открывает кучу экзешников. но ни один выбрать нельзя. качал отседа-http://cdnetworks-kr-2.dl.sourceforge.net/project/winavr/WinAVR/20100110/WinAVR-20100110-install.exe.
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
User avatar
ARV
Ум, честь и совесть. И скромность.
Posts: 18675
Joined: Thu Dec 28, 2006 08:19:56
Location: Новочеркасск
Contact:

Re: Atmega162

Post by ARV »

Archangel089 wrote:А вот подскажите вот такой вот вопрос-решил попробывать пропатчить 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 (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

ARV wrote:[вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.
А можно поинтересоваться-что это собственно за минимумы???
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
User avatar
ARV
Ум, честь и совесть. И скромность.
Posts: 18675
Joined: Thu Dec 28, 2006 08:19:56
Location: Новочеркасск
Contact:

Re: Atmega162

Post by ARV »

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

Мой уютный бложик... заходите!
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

Что то я в этой жизни определённо не понимаю...
Нашел вот такой код:

Code: Select all

#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? или я опять что то не так понял?
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
User avatar
ARV
Ум, честь и совесть. И скромность.
Posts: 18675
Joined: Thu Dec 28, 2006 08:19:56
Location: Новочеркасск
Contact:

Re: Atmega162

Post by ARV »

во-первых, ща придет злобный дядя-модератор (или красивая тетя-модератор) и прикроет ваши (и мои) словоизлияния, как не имеющие к atmega162 никакого отношения...

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

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

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

Мой уютный бложик... заходите!
Archangel089
Родился
Posts: 12
Joined: Wed Jul 21, 2010 23:04:18
Location: Петропавловск-Камчатский

Re: Atmega162

Post by Archangel089 »

Ну надеюсь не прикроют пока....
Так в том то и дело-в какой именно студии??? Можно по пунктам что и как делать?!
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Locked

Return to “Микроконтроллеры и ПЛИС”