Atmega162

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Archangel089
Родился
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 23:04:18
Откуда: Петропавловск-Камчатский

Atmega162

Сообщение Archangel089 »

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

Re: Atmega162

Сообщение SII »

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

Re: Atmega162

Сообщение Archangel089 »

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

Re: Atmega162

Сообщение 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
Реклама
Эиком - электронные компоненты и радиодетали
Archangel089
Родился
Сообщения: 12
Зарегистрирован: Ср июл 21, 2010 23:04:18
Откуда: Петропавловск-Камчатский

Re: Atmega162

Сообщение Archangel089 »

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

Re: Atmega162

Сообщение SII »

Ссылки уж точно не ко мне, я программированию учился четверть века назад. Ну а документацию по контроллеру можно (и нужно) найти на сайте Атмел.
Реклама
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Atmega162

Сообщение 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 которая напрочь отказывалась работать пока не подключил на свободных ногах пуллапы.
Чем дальше, тем больше становлюсь занудой...
Изображение
SII
Вымогатель припоя
Сообщения: 635
Зарегистрирован: Пт янв 30, 2009 14:50:35
Откуда: Солнечногорск

Re: Atmega162

Сообщение SII »

Не знаю, какие у Вас возникали проблемы с таким оформлением, а у меня проблем никаких никогда не возникало.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Atmega162

Сообщение GP1 »

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

Re: Atmega162

Сообщение SII »

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

Re: Atmega162

Сообщение GP1 »

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

Re: Atmega162

Сообщение SII »

Ну, такой подход имеет право на жизнь, но лично мне он не нравится. Мне кажется куда более простым и, главное, надёжным один раз написать таблицу переходов с командами jmp (именно ими -- rjmp имеет меньший размер) и возвращаться к ней только в том случае, если надо указать имя обработчика того или иного прерывания, что у меня, собсно, и сделано. Конечно, можно допустить какую-нибудь ошибку, но точно так же её можно допустить и в альтернативном подходе (указал случайно, например, неверное имя вектора -- ведь некоторые из них имеют почти одинаковые имена, отличающиеся лишь, например, номерами таймеров). Проблем с отладкой тоже никаких: ставишь брякпоинт на нужный вектор, да и всё. Правда, мой подход требует обязательного комментирования, какой jmp к какому вектору относится, поскольку их названия отсутствуют, но лично я не ленюсь снабжать свои программы комментариями.
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Re: Atmega162

Сообщение GP1 »

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

Re: Atmega162

Сообщение Archangel089 »

А вот подскажите вот такой вот вопрос-решил попробывать пропатчить AVRStudio на C++. скачал патч.... и ничего что то не пропатчилось... патч-WinAVR-20100110-install.exe. установился как отдельна прога. и при меню опен открывает кучу экзешников. но ни один выбрать нельзя. качал отседа-http://cdnetworks-kr-2.dl.sourceforge.net/project/winavr/WinAVR/20100110/WinAVR-20100110-install.exe.
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Atmega162

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

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

Re: Atmega162

Сообщение Archangel089 »

ARV писал(а):[вы что-то ересь какую-то пишите... скачали WinAVR - но называете это патчем... какой патч? AVR Studio не значет про С++ ничего (не поддерживает подсветку синтаксиса, не умеет показывать в отладчике и т.п.) - и патча, как я понимаю, нет для лечения этой проблемы. а вот Си прекрасно понимает, и WinAVR в том числе. можно писать в студии и на С++ и компилировать при помощи WinAVR (при соблюдении минимума условий) - однако отлаживать в симуляторе не выйдет.
А можно поинтересоваться-что это собственно за минимумы???
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Atmega162

Сообщение ARV »

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

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

Re: Atmega162

Сообщение 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? или я опять что то не так понял?
Приветствую прямые ссылки. Ибо Internet на камчатке не из дешевых....
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Atmega162

Сообщение ARV »

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

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

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

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

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

Re: Atmega162

Сообщение Archangel089 »

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

Вернуться в «Микроконтроллеры и ПЛИС»