Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Начинающий Stage-1.01
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Skovorodka[TEFAL]
Здесь я НЕ буду задавать вопросы типа AVR или PIC а может MCS-51 «С чего начать? Где скачать? Какие сайты для начинающих?» «ASM VS C++» «Где купить?» и тд.

Изучаю работу Микроконтроллеров чисто для себя, так сказать для души. Хочу писать на Assembler.
Так значит, что я имею:
INFO:
Книга: Evstifeev.Atmel.AVR.Tiny_Mega.Family
DataSheet’s: AT90S8535.Full, ATmega8535.Full, Replacing AT90S8535 by ATmega8535
+ разные мелкие доки.
Сразу скажу с английским я так сказать не очень: В школе и в универе было «Отлично», при прочтении DataSheet’ов понимается процентов так 15-20%, в основном по картинкам и по смыслу догоняетя что к чему, (надобны как-нибудь электронный словарь достать lingvo например wink.gif)
Softaware:
AVR Studio 4.11 SP3
Vmlab 3.11 free
AvrReal
PonyProg
Hardware:
ATmega8525, Кр1533ап5, АЛС318, 4MHz & 8MHz кварцы.

Я думаю, что этого достаточно для начала.

Сразу же первый вопрос: так как сначала я думал учиться на примере AT90S8535, заказал я его в магазине, пока ждал когда привезут (обещали 3 недели) узнал что этот МК сняли с производства теперь вместо него ATmega8535, через 2 месяца!!! привезли Atmegu За 185 р. Пришлось брать.
Вопрос: можно ли прошивать (проги сложности типа: сложить два числа и выдать на Семисегментный индикатор результат) написаны для AT90 на Megu ? я так понял изменения коснулись управлением ADC, timer, USART, и чего там еще. Если непокатит то что нужно изменить?
Skovorodka[TEFAL]
Значит стоит такая задача.
1. Организовать сложение двух чисел и индикацию младшей тетрады результата на семисегментном индикаторе HG2. На блоке управления располагаются кнопки и тумблеры. Кнопки SB2 и SB4 представляют собой младшие разряды первого слагаемого, т.е. возможен набор чисел от 0 до 3. Тумблеры SA4, SA5 представляют собой соответственно 3-й и 4-й разряды 2-го слагаемого, т.е. возможен набор десятичных чисел 0,4,8,12. На индикаторе высвечивать результат в шестнадцатеричном формате, т.е. 0...F.

SB2: PINA,1 PORTC-на индикатор.
SB4: PINA,3 PORTb,3 – транзюк на индикатор

SA4:PIND,2
SA5:PIND,3

Вот Source: Скелет программы скопирован с примера, всю математику и вывод на индикатор я понял (сидел в тетрадке изображал из себя МК wink.gif не понял некоторые куски кода только
.include "8535def.inc"
;---------------
.dseg
.equ cod0=$64 ; Выделяю ячейки под коды семисегментов,
.equ cod1=$65 ; а почему именно с этого адреса? И до какого
.equ cod2=$66 ; можно?
………………
.equ codE=$72
.equ codF=$73 :
;---------------
.cseg ; А вот это я не понял в упор как оно работает
.org 0 ; Думаю что-то связанно с сбросом мк
rjmp reset ;?
.org $30 ;?
;---------------
reset:
ldi r16,$00 ;?
out sph,r16 ;?
ldi r16,$ff ;?
out spl,r16 ;?
;---------------
ldi zl,$64 ;?
ldi zh,$00 ;?

;Nastroika portov!
ldi r16,$00 ; А вот интересно неиспользуемые выводы индикатора как лучше определить как входы или выходы что то все по разному говорят?
out ddra,r16

ldi r16,$c
out ddrb,r16

ldi r16,$ff
out ddrc,r16

ldi r16,$00
out ddrd,r16
;-----------------]
Sbi portb,3 ;napruga na anod
;-----------------]

;Seven segmet Code
ldi r16,$3f ; Загоняю коды в память
sts cod0,r16

ldi r16,$06
sts cod1,r16

………………
ldi r16,$71
sts codF,r16
;---------------

m1: Организую вечный цикл
in r17,pina ;считываю состояние кнопок
in r18,pind ;считываю состояние тумблеров


add r20,r17 ; Собсно складываю эти два числа
add r20,r18
;------------------
push zl ; Во а это крутая крутотень, когда я понял
add zl,r20 ;как оно работает чуть со стула не упал
ld r20,z ; блин круто получилось
pop zl
out portc,r20 ;Выводим результат на индикатор
ldi r20,$00 ;Очищаем регистр где был результат
Rjmp m1 ;Вечный цикл


Прога работает, тока считает неправильно.
«Кнопки SB2 и SB4 представляют собой младшие разряды первого слагаемого» А у меня по схеме они управляют Первым и Третьим битом то есть получаются цифры 0,2,8,10 Блин часа 2 не мог понять в чем фишка
Есть 0000Х0Х0 =>
Надо 000000XX
Как биты сдвинуть? я что то ваще не понял

Приму любую помощь Заранее благодарен всем кто откликнется

PS У мня еще много вопросов smile.gif по мере изучения буду спрашивать здесь надеюсь есть добрые люди помогут !
Skovorodka[TEFAL]
Один вопрос решился. Копировать любой бит регистра позволяют команды BST, BLD
в бит аккумулятор регистра SREG (и обратно) тем самым можем переместить любой бит рег. на нужное место. Спасибо “nml” за подсказку
Вот что получилось:
bst r17,1 ;копирую первый бит в битовый аккум.
cbr r17,0b00000010 ;сбрасываю в ноль
bld r17,0 ;копирую из аккум. на нужное место
;аналогично только третьи бит ->первый бит
bst r17,3
cbr r17,0b00001000
bld r17,1
*Roma*
Цитата(Skovorodka[TEFAL] @ Jul 30 2005, 12:09)
Значит стоит такая задача.
1. Организовать сложение двух чисел и индикацию младшей тетрады результата на семисегментном индикаторе HG2. На блоке управления располагаются кнопки и тумблеры. Кнопки SB2 и SB4 представляют собой младшие разряды первого слагаемого, т.е. возможен набор чисел от 0 до 3.  Тумблеры SA4, SA5 представляют собой соответственно 3-й и 4-й разряды 2-го слагаемого, т.е. возможен набор десятичных чисел 0,4,8,12. На индикаторе высвечивать результат в шестнадцатеричном формате, т.е. 0...F.

SB2: PINA,1  PORTC-на индикатор.
SB4: PINA,3  PORTb,3 – транзюк на индикатор

SA4:PIND,2
SA5:PIND,3

Вот Source: Скелет программы скопирован с примера, всю математику и вывод на индикатор я понял (сидел в тетрадке изображал из себя МК wink.gif не понял некоторые куски кода только
.include "8535def.inc"
;---------------
.dseg
.equ cod0=$64 ; Выделяю ячейки под коды семисегментов,
.equ cod1=$65  ; а почему именно с этого адреса? И до какого
.equ cod2=$66 ; можно?
………………
.equ codE=$72
.equ codF=$73 :
;---------------
.cseg            ; А вот это я не понял в упор как оно работает
.org 0            ; Думаю что-то связанно с сбросом мк 
rjmp reset    ;?
.org $30        ;?
;---------------
reset:
ldi r16,$00  ;?
out sph,r16  ;?
ldi r16,$ff    ;?
out spl,r16  ;?
;---------------
ldi zl,$64      ;?
ldi zh,$00    ;?

;Nastroika portov!
ldi r16,$00          ; А вот интересно неиспользуемые выводы индикатора  как лучше определить как входы или выходы что то все по разному говорят?
out ddra,r16

ldi r16,$c
out ddrb,r16

ldi r16,$ff
out ddrc,r16

ldi r16,$00
out ddrd,r16
;-----------------]
Sbi portb,3 ;napruga na anod
;-----------------]

;Seven segmet Code
ldi r16,$3f    ; Загоняю коды в память
sts cod0,r16

ldi r16,$06
sts cod1,r16

………………
ldi r16,$71
sts codF,r16
;---------------

m1:  Организую вечный цикл
in r17,pina ;считываю состояние кнопок
in r18,pind ;считываю состояние тумблеров


add r20,r17  ; Собсно складываю эти два числа
add r20,r18
;------------------
push zl      ; Во а это крутая крутотень, когда я понял
add zl,r20  ;как оно работает чуть со стула не упал 
ld r20,z      ; блин круто получилось
pop zl     
out portc,r20 ;Выводим результат на индикатор
ldi r20,$00 ;Очищаем регистр где был результат
Rjmp m1 ;Вечный цикл


Прога работает, тока считает неправильно.
«Кнопки SB2 и SB4 представляют собой младшие разряды первого слагаемого» А у меня по схеме они управляют Первым и Третьим битом то есть получаются цифры 0,2,8,10  Блин часа 2 не мог понять в чем фишка
Есть  0000Х0Х0 =>
Надо 000000XX
Как биты сдвинуть? я что то ваще не понял

Приму любую помощь Заранее благодарен всем кто откликнется

PS У мня еще много вопросов  smile.gif по мере изучения буду спрашивать здесь надеюсь есть добрые люди помогут !
*



reset:
ldi r16,$00 ;?
out sph,r16 ;?
ldi r16,$ff ;?
out spl,r16 ;?

данный кусок кода не более чем настройка указателя стека на ячейку памяти в озу с адресом 0х255, не помню скока в АТ90S8535 памяти но обычно стек настраивают на самую последнюю ячейки т.к. он в AVR-ках падающий.

.org $30 ;? - можна не писать просто расположение кода пометке reset по данному адресу. Повидимому освобождает первые 30 адресов под вектора прерываний.

Успеховsmile.gif
Skovorodka[TEFAL]
.....Otdix konchilsya, Skoro budu zadavat voprosi.
Programmator spayal (АП5) toka prochivat boyus, nefiga ne ponyal pro "FUSE's", chas budu chitat Doki....
andrvisht
Вот Вам ссылочка. Там для начинающих как раз то.
http://avr.nikolaew.org/
А с фузам нужно быть осторожнее. Это настройки тактового генератора, детектора питания, интерфейсов программирования ... Если что не так зальете - будет не весело.
BVU
Лучше всего начинать изучение микропроцессоров/микроконтроллеров с базовой литературы, где рассматриваются 'гипотетические' устройства обладающие всеми свойствами современных 'встроенных систем'. Во первых это разовьет полное понимание о предмете. А во вторых появится базовые знания необходимые для расширения кругозора и становления как специалиста по данной тематике. Что не ограничит Вас использованием какого то конкретрого контроллера, а даст возможность рассматривать их как класс цифровых устройств.
Но только этими знаниями не обойдешся, необходимы и другие дисциплины по аналого-цифровой схемотехнике, программированию и хотябы основные знания ТРЦС и импульсной техники.

Желаю творческих успехов,
BVU
Antilogic
Ага, начинайте изучать прямо сo строения атома, полупроводников, pnp npn переходов, транзистора, в конце концов :D
Petka
Цитата(Skovorodka[TEFAL] @ Jul 30 2005, 11:09)
Значит стоит такая задача.
........

.cseg            ; А вот это я не понял в упор как оно работает
.org 0            ; Думаю что-то связанно с сбросом мк 
.........

надеюсь есть добрые люди помогут !
*


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

.cseg <- это обозначает что то, что ты дальше пишешь относится к сегменту кода, т.е. к памяти программ.
.org 0 <- обозначает что то что ты дальше напишешь располагается со смещением 0 (т.е. в начале сегмента) соответственно ".org 30" это непосредственное указание что код дальше расположен по адресу 30.
Skovorodka[TEFAL]
Все приехал блин, дошло дело до паяльника, спаял макетку, подрубил питание и встал.
Программа avreal программатор Аля 5 проводков с резисторами (чета stk200\300 не заработал, надо будет потыкать его еще ) Atemga8535 кварц 4 МГц.
Так вот прога говорит что все ок mega8535 detected список фузов мне выдает
Osccal = a4,a6,9b,9d
Bodlevel=1
Boden =1
Sut =2
Sksel =1
Blb1 =3
Blb0 =3
S8535 =1
Wdton = 1
Ckopt = 1
Eesave = 1
Bootsz = 0
BootRst = 1
Вроде пишет, стирает FLASH (vse ok говорит)

Вот только когда снимаешь дамп в нем полная каша
Кусок:
Код
:10000000FFFFFFFF02FFFFFFFFFFFFFFFFFFFFFFFD
:10001000FFFFFFE11AFFFFFFFFFF0DE10E0E0FE1F3
:1000200010E1FFFFFFFFFFE114E115FFFFFFFFE11C
:10003000FFFFFFFFFFFF36FFFFFFFFFFFFFF3FE177
:1000400040FFFFFFFFFF23E124E1FFFFFF4CFFFF25
:10005000FFFFFFE12AE12BE12CE12DE1FFFFFFE1B2
:1000600030E131E1646467E134E135E136E137E103
:1000700038FFFFFFFFE1FFFF7CE1FFFFFFFFFFE134
:1000800040E1FFFFFFFF83E1FFFFFFE146E147E1C2
:10009000FFFFFFFF9AE18BE14CFFFFFFFFFF9FE1B6
:1000A000D0E1B1E150FFFFFFFFFFFFE156FFAFE1FD
:1000B000B8E159E1FFFFDBE15CE15D5DFFE15EFF7F
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFE1FFFF5E
:1000D00068E169E16AFFD6EB6CE16DE16EE16FE129
:1000E00070FFFFFFFFFFFFFFFFFFFFFFEC17EFE1D8
:1000F000F8FF79E17AE17BE17CE17DE17EE17FFF60
:10010000FFFF82FFFFFFFFFFFFFFFFFFFFFFFFFF7C
:1001100010E111E1FF14FFE10CE18DE18EE18FE1CF
:1001200090E191E192FF93E19494FFFFFFFF2EFF96
:10013000FFFFFFE13AE19BE13CE13A3D1EE19F9F79
:1001400040E1A1E1A2E1A3FFFFE1A5A2FFFFFFFFC4
:10015000A8E1FF52FFFF5BE1ACFFADE1AEAEFFFFF8
:10016000FF60FFE1B2B0FFFFFFFF75E1FFFFFFE1BE
:1001700078E1B9E1FFE1BBE1BCE1FFFFFFFFFFFF79
:10018000FFFFFFFF82E186FFFFFFFFFFFFE1C7E107
:1001900090E1C9E1CAFFFFFF8CE1CDE1CEE1CFFFE5
:1001A000FFE1D1FFFFFFFFFFA8FFFFFFFFFFFFE120
:1001B000D8E1F2FFFFFFFFFFDCE1DDE1FFFFBFE180
:1001C000E0FFFFFFFFFFFFFFFFE1E5E1E6FFFF13B9
:1001D000D0E1E9E1EAFFEBE1ECE1FFFFDCE1FFFF69
:1001E000FFFFFFE1E2E1F3FFFFE1EAFFFFFFFFFFB7

Причем снимаешь дамп несколько раз, делаешь сравнение файлов они всегда разные, процентов 80 различий

Кабель от LPT до платы 20см длиной
Люди помогите, скажите в каком направлении рыть, а то ваще звиздец полный.
А еще хотел спросить, hex фаил весит 23 053 байт (22,5кб)
Тогда на борту всего 8 кб – так должно быть или это Трабла???
Petka
Цитата
' date='Nov 7 2005, 16:54' post='62158']
Все приехал блин, дошло дело до паяльника, спаял макетку, подрубил питание и встал.
Программа avreal программатор Аля 5 проводков с резисторами (чета stk200\300 не заработал, надо
......................
Кабель от LPT до платы 20см длиной
Люди помогите, скажите в каком направлении рыть, а то ваще звиздец полный.
А еще хотел спросить, hex фаил весит 23 053 байт (22,5кб)
Тогда на борту всего 8 кб – так должно быть или это Трабла???

1. Скорее всего в "5 проводках" причина несовпадения прочитанных данных. решить проблемму можно попробовав уменьшить скорость программирования (см. ключи AVREALа). или спаяв нормальный программатор.
2. Хекс файл содержит информайию в ХЕКС представлении,т.е. на один байт МИНИМУМ 2 символа, не считая контрольных сумм, адресов. переносов строк, и т.п.
Skovorodka[TEFAL]
ZARABOTALO!!!!
fishka bila s fuzami !
po umolchaniyu bilo
Sksel = 1
Sut = 2
to est kak ya ponel vnutrenie kvarz, cho ne est good
AVREAL -fCKSEL=f,sut=0
I vse poexalo kak nado !

Spasibo vsem kto otkliknulsya!
Otdelnoe spasibo za pomoch Serega (radiokot.ru)

To Petka:

Obyazatelno dodelayu STK kak tolko v nach radiomagazin (on u nas odin v gorode) postupyat xxxxАП5
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.