Например TDA7294

Форум РадиоКот • Просмотр темы - Пропорциональное управление на МК (Знание=Сила)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн дек 29, 2025 23:33:28

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 297 ]    , , , 4, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:31:10 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
аа, ну да, согласен, умножение и деление ведь выполняются слева на право :-)

скобки нужны конечно...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:35:17 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
:)

на 15 ноге висит клавиатура у меня - нужно переделать схему подключения!
за одно обрати внимание, что у меня при нажатии генерится "1"
Ты говорил что должен генерится "0" может это тоже стоит переделать ???

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:42:26 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
uwrtey писал(а):
Цитата:
Что у тебя на ней висит?

download/file.php?id=90498
- клавиатура :oops: (надо переделать...)


перекинь с Pb0..Pb3 на Pb4..Pb7...

ну и ждем'c исправленный код чтения клавиатуры... :-)
(заодно посмотрим как ты усвоил прежний урок)

по поводу 0 или 1 - это пофигу..

для твоего решения даже наверное 1 лучше :-)

вообще я не люблю матричные клавиатуры - не получается на них нормально несколько нажатых кнопок отрабатывать :-(

кстати по выходным линиям я бы вместо резюков на 100 ом поставил диоды !! так как в матричной клаве могут быть неприятные сюрпризы при нажатии нескольких кнопок одновременно

а вот если одиночные кнопки (1 кнопка на 1 пин порта) то лучше включать внутренний подтягивающий резистор и все ! никаких внешних больше не нужно, кнопка (ну или выключатель) одной ногой на порт, другой на землю..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:47:13 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
Цитата:
а вот если одиночные кнопки (1 кнопка на 1 пин порта) то лучше включать внутренний подтягивающий резистор и все ! никаких внешних больше не нужно, кнопка (ну или выключатель) одной ногой на порт, другой на землю..
у меня ног не хватит ! :) (надо атмегу 64 тогда юзать)

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:51:21 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
может быть тогда сделать выходным Port D ?

там то все линии свободны !
а входным сделать PORT B

причем PB3 оставить для генерации
PB0 - сделать выходным для передатчика
а PB4..PB7 - это входные линии клавиатуры


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:53:17 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
uwrtey писал(а):
у меня ног не хватит ! :) (надо атмегу 64 тогда юзать)


нее, просто нужно делать интеллектуальный пульт управления.. с дисплеем и навигацией по меню :-)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:55:47 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
кстати, резет у тебя на схеме к земле через резюк 100 ом прижат !!
так точно работать тинька небудет !!

нужно килоом 10 резюк, и к плюсу питания !!!!
исправь обязательно !


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 21:59:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
ок, правлю.

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 22:05:07 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ок, я спать.. а то у нас уже час ночи... :-)

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

2. новый код чтения клавиатуры

3. почитай про таймер T1, регистры TCCR1A и TCCR1B. накидай пока свою конфигурацию, а я завтра утром прокоментирую - и поправлю до верной...

кстати про таймеры неплохо DI HALT писал на easyelectronics.ru (в учебном курсе AVR)

и помоему на microcontroller.ru я видел чтото вроде переведенного даташита по таймерам - тоже хороший справочник.

и вот еще http://eugenemcu.ru/publ/5-1-0-49

в общем ссылок много, задай в яндексе или гугле и вперед !!

еще раз повторю нам нужен режим CTC, top=OCR1A


Последний раз редактировалось ВитГо Ср авг 22, 2012 22:09:52, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 22:07:00 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
У нас тоже час :) Спокойной Ночи, спасибо, ВитГо.

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 22:29:06 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
вот схему накидал
Вложение:
1.jpg [159.54 KiB]
Скачиваний: 587

СпойлерИзображение


Правила читаем?
ploop

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 22:50:59 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
настройка портов естественно изменилась...
Код:

.DSEG
key_buffer:   .byte 5         ; зарезервируем 5 байт в ОЗУ


;************************************************************************


keyboardread:           
   ldi temp,5                          ; количество столбцов клавы = пять
         
   ldi R17,0b00000001                 ; первый столбец

                                   ; загружаем адрес метки (key_buffer) находящейся в ОЗУ в регистровую пару X
   ldi XL,low (key_buffer)      ; младший байт адреса
   ldi XH,high(key_buffer)      ; старший байт адреса

keyboardread_loop:         ; цикл опроса

   out PortD,R17         ; выводим в порт "Д" значение "R17" для выбора столбца клавиатуры
   in R18,PinB         ; прочитали состояние столбца
         
   st X+,R18         ; сохраним в ОЗУ состояние столбца клавы,
                ; адрес в регстровой паре "X" автоматом увеличится на 1

   lsl R17            ; сдвинули единичку выбора столбца клавиатуры на 1
                ; позицию влево

   dec temp         ; уменьшим счетчик
   brne keyboardread_loop      ; если не все просканировали, то циклимся
       
   ret            ; возврат из подпрограммы

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Ср авг 22, 2012 23:40:52 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
с таймерами и прерываниями вроде все понятно - код будет следующим вечером

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт авг 23, 2012 05:27:11 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
хорошо.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт авг 23, 2012 21:02:25 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
:write: пишу ))), Усердно....

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт авг 23, 2012 23:19:28 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
что то не получается написать цикл обработки прерывания....
вот наработки
Спойлер
Код:
/*
 * _147.asm
 *
 *  Created: 24.08.2012 00:12:55
 *   Author: UWRTEY
 */

 ;.include "d:\avr\avrasm\appnotes\attyny2313def.inc"


   .def   Temp=R16
   .def   Temp1=R17
   .def   Temp2=R18
   .def   Temp3=R19
   .def   Temp4=R20
   .def   Temp5=R21
   .def   Temp6=R22
   .def   Temp7=R23
   .def   Temp8=R24
   .def   Temp9=R25


.dseg      ;оперативка

key_buff: .byte 5   ; зарезервируем 5 байт в ОЗУ


;******************************************************************************
;******************************************************************************

.cseg
.org 0



rjmp RESET   ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
rjmp INT0   ; External Interrupt Request 0
rjmp INT1   ; External Interrupt Request 1
rjmp TIMER1   ; CAPT Timer/Counter1 Capture Event
rjmp TIMER1   ; COMPA Timer/Counter1 Compare Match A
rjmp TIMER1   ; OVF Timer/Counter1 Overflow
rjmp TIMER0   ; OVF Timer/Counter0 Overflow
rjmp USART0   ; RX USART0, Rx Complete
rjmp USART0   ; UDRE USART0 Data Register Empty
rjmp USART0   ; TX USART0, Tx Complete
rjmp ANALOG   ; COMP Analog Comparator
rjmp PCINT   ; Pin Change Interrupt
rjmp TIMER1   ; COMPB Timer/Counter1 Compare Match B
rjmp TIMER0   ; COMPA Timer/Counter0 Compare Match A
rjmp TIMER0   ; COMPB Timer/Counter0 Compare Match B
rjmp USI   ; START USI Start Condition
rjmp USI   ; OVERFLOW USI Overflow
rjmp EE      ; READY EEPROM Ready
rjmp WDT   ; OVERFLOW Watchdog Timer Overflow




;RESET:      ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset////
INT0:      ; External Interrupt Request 0
INT1:      ; External Interrupt Request 1
TIMER1:      ; CAPT Timer/Counter1 Capture Event
;TIMER1:   ; COMPA Timer/Counter1 Compare Match A/////////////////////////////////
TIMER1:      ; OVF Timer/Counter1 Overflow
TIMER0:      ; OVF Timer/Counter0 Overflow
USART0:      ; RX USART0, Rx Complete
USART0:      ; UDRE USART0 Data Register Empty
USART0:      ; TX USART0, Tx Complete
ANALOG:      ; COMP Analog Comparator
PCINT:      ; Pin Change Interrupt
TIMER1:      ; COMPB Timer/Counter1 Compare Match B
TIMER0:      ; COMPA Timer/Counter0 Compare Match A
TIMER0:      ; COMPB Timer/Counter0 Compare Match B
USI:      ; START USI Start Condition
USI:      ; OVERFLOW USI Overflow
EE:      ; READY EEPROM Ready
WDT:      ; OVERFLOW Watchdog Timer Overflow

reti      ; выход из обраьотчика прерываний

;******************************************************************************





;******************************************************************************
;инициализация стека
;******************************************************************************

reset:         ;включение микроконтроллера


ldi Temp,0b01000000   ;разрешить прерывание компаратора
out TIMSK,Temp


ldi Temp,0b00000001   ;тактовый сигнал = CK (1:1)
out TCCR1B,Temp

         ; инициализация компаратора
ldi Temp,0xC      ; 3кГц,  1/3000=0,00033сек=330мкс,   330/2=165мкс длительность импульса или паузы
out OCR1AH,Temp      ; 0,05мкс*65535=3276,75    3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4      ; 165мкс/0,05мкс=3300 тиков таймера  3300=CE4(hex)   
out OCR1AL,Temp      ;


ldi Temp,0      ;обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp



ldi Temp,RamEnd      ;еще один вариант записи   ldi temp, low(Ramend)
out SPL,Temp      ;инициализации стека      out SPL, temp


cei         ;глобальное разрешение прерываний
       
;******************************************************************************





;*******************************************************************************
;настройка портов
;*******************************************************************************

ldi Temp,0b11110000
out DDRB,Temp           ;настроили порт "В"
         ;х0000000 - вывод на передатчик
         ;00Х00000 - ДЛЯ ГЕНЕРАЦИИ (НЕ ЗНАЮ ЧТО ДЕЛАТЬ - ВЫХОД ИЛИ ВХОД)
         ;0000хххх - для чтения клавиатуры



ldi Temp,0b01111111
out DDRD,Temp       ;настраиваем порт "D" на вывод(запись)(0-ввод, 1-вывод)
         ;но не весь, а только шесть млажших бит (PD0-PD5)
         ;к которым прицеплены четыре столбца клавиатуры
         ;и остальные настроил на вывод, для того что бы
         ;при их чтении получит не чёрте-че, а четкий ноль
         ;*только самый старши бит настроен на ВВОД (потому что в порте "D" отсутсвует эта нога)



;*******************************************************************************
; Чтение клавы и запись данных в ОЗУ
;*******************************************************************************

keyboardreed:            ;метка - опрос клавиатуры

         
   ldi Temp,5         ; количество столбцов клавы = пять
         
   ldi Temp1,0b00000001      ; первый столбец

                      ; загружаем адрес метки (key_buff) находящейся в ОЗУ в регистровую пару X
   ldi XL,low(key_buff)      ; младший байт адреса
   ldi XH,high(key_buff)      ; старший байт адреса

keyboardread_loop:         ; цикл опроса

   out PortD,Temp1         ; выводим в порт "Д" значение "Temp1" для выбора столбца клавиатуры
   in Temp2,PinB         ; прочитали состояние столбца
         
   st X+,Temp2         ; сохраним в ОЗУ состояние столбца клавы,
                ; адрес в регстровой паре "X" автоматом увеличится на 1

   lsl Temp1         ; сдвинули единичку выбора столбца клавиатуры на 1
                ; позицию влево

   dec temp         ; уменьшим счетчик
   brne keyboardread_loop      ; если не все просканировали, то циклимся

       


   rjamp keyboardreed      ; зациклились бесконечно опрашивать клаву и перезаписывать данные




;*********************************************************************************
;ОБРАБОТКА ПРЕРЫВАНИЯ////////
;*********************************************************************************

TIMER1:

   ldi Temp,0         ;обнуление таймера
   out TCNT1H,Temp
   out TCNT1L,Temp


   .......

reti



Вложение:
не могу.asm [5.59 KiB]
Скачиваний: 284


я конечно же попробую довести его до ума......

_________________
не зная броду не лезь к вольтмоду


Последний раз редактировалось uwrtey Пт авг 24, 2012 05:12:31, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Чт авг 23, 2012 23:25:13 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 3
Рейтинг сообщений: 3
Зарегистрирован: Пт июл 17, 2009 07:34:07
Сообщений: 2309
Откуда: Свердловская обл.
Рейтинг сообщения: 0
получается что то вроде
Код:

TIMER1:

   ldi Temp,0         ;обнуление таймера
   out TCNT1H,Temp
   out TCNT1L,Temp


out_dat:

   Ldi ZL,Low(key_buff)      ; загрузили в регистровую пару "Z" адресс метки "key_buff" (массива из ОЗУ)
   Ldi ZH,High(key_buff)


   Ld Temp1,Z+         ; загрузили в регистр "Temp1" данные из ОЗУ, по адресу из регистровой пары "Z"
               ; адресс автоматически увеличился на еденицу

а дальше...... :dont_know:

_________________
не зная броду не лезь к вольтмоду


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пт авг 24, 2012 06:25:45 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
не спеши!

для начала нужно проинитить счетчик!

оо, кстати по написанию кода:
на всех форумах программистов что я видел не приветствуется код вида

Код:
ldi Temp,0b01000000   ;разрешить прерывание компаратора
out TIMSK,Temp


потому что без даташита нифига не понятно что за бит ты установил в TIMSK
и могут даже не помочь (потому как лазать по даташиту с нуля как то геморойно)

нужно: посмотреть в даташите как называется пин разрешения прерывания (в нашем случае это OCIE1A), в .inc файле что ты вначале инклудишь он будет описан как:
Цитата:
.equ OCIE1A = 6 ; Timer/Counter1 Output CompareA Match Interrupt Enable

то есть константе OCIE1A ему уже присвоен номер бита который нужно установить в порту

чтобы получить "1" в нужном разряде применяется левый сдвиг выполняемый компилятором

1 (единица =0b00000001) << (сдвинуть влево) OCIE1A (6 раз)
то есть (1<<OCIE1A)

написать нужно вот так :
Код:
ldi Temp, (1<<OCIE1A)  ;разрешить прерывание компаратора
out TIMSK,Temp


если нужно несколько бит установить то применяется "|" то есть так: (1<<OCIE1A)|(1<<OCIE1B)

естественно это касается только установки в "1", в "0" ничего не устанавливаем

зачем это нужно ?

причину 1 я уже указал: банально код лучше читается - сразу понятно какое прерывание разрешили (без залезания в даташит)

причина 2 в меге32 например бит OCIE1A = 4 :-) следовательно захотим мы перенести наш код на другой контроллер - работы будет в разы меньше (фактически в
даташите мы только проверим чтобы бит OCIE1A был в том же регистре TIMSK, а все остальное будет компилироваться правильно)

подпричина 2 причины 2: у меня есть отладочная плата (pinboard) и я на меге16 чаще всего пишу код, и потом изменив только определение контроллера компилирую рабочий протестированный на меге16 код в туже тиньку2313 или мегу 8 (была у меня парочка маленьких проектов)


по тому что ты ночью написал:
я просил проинициализировать таймер Т1
это регистры TCCR1A TCCR1B TCNT1 OCR1A TIMSK
их все нужно инитить!

еще одно замечание:
сначала мы инитим все регистры, а потом разрешаем прерывания

и вопрос: после какого действия инициализации счетчик Т1 начинает считать?

p.s. прерывание писать еще рано :-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пт авг 24, 2012 06:33:24 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
по таблице прерываний:

как то у тебя длинно, и сложно она написана

проще будет так
Спойлер
Код:
 ;.include "d:\avr\avrasm\appnotes\attyny2313def.inc"

   .def   Temp=R16
   .def   Temp1=R17
   .def   Temp2=R18
   .def   Temp3=R19
   .def   Temp4=R20
   .def   Temp5=R21
   .def   Temp6=R22
   .def   Temp7=R23
   .def   Temp8=R24
   .def   Temp9=R25


.dseg      ;оперативка

key_buff: .byte 5   ; зарезервируем 5 байт в ОЗУ


;******************************************************************************
;******************************************************************************

.cseg
.org 0
rjmp RESET ; ну или START - как тебе приятнее :-)

.org   INT0addr   ; 0x0001   ; External Interrupt Request 0
reti
.org   INT1addr   ; 0x0002   ; External Interrupt Request 1
reti
.org   ICP1addr   ; 0x0003   ; Timer/Counter1 Capture Event
reti
.org   OC1Aaddr   ; 0x0004   ; Timer/Counter1 Compare Match A
reti
.org   OC1addr   ; 0x0004   ; For compatibility
reti
.org   OVF1addr   ; 0x0005   ; Timer/Counter1 Overflow
reti
.org   OVF0addr   ; 0x0006   ; Timer/Counter0 Overflow
reti
.org   URXCaddr   ; 0x0007   ; USART, Rx Complete
reti
.org   URXC0addr ; 0x0007   ; For compatibility
reti
.org   UDREaddr   ; 0x0008   ; USART Data Register Empty
reti
.org   UDRE0addr   ; 0x0008   ; For compatibility
reti
.org   UTXCaddr ; 0x0009   ; USART, Tx Complete
reti
.org   UTXC0addr   ; 0x0009   ; For compatibility
reti
.org   ACIaddr   ; 0x000a   ; Analog Comparator
reti
.org   PCIBaddr   ;  0x000b   ; Pin Change Interrupt Request B
reti
.org   PCIaddr   ; 0x000b   ; For compatibility
reti
.org   OC1Baddr   ;  0x000c   ;
reti
.org   OC0Aaddr   ;  0x000d   ;
reti
.org   OC0Baddr   ;  0x000e   ;
reti
.org   USI_STARTaddr   ; 0x000f   ; USI Start Condition
reti
.org   USI_OVFaddr   ; 0x0010   ; USI Overflow
reti
.org   ERDYaddr   ; 0x0011   ;
reti
.org   WDTaddr   ; 0x0012   ; Watchdog Timer Overflow
reti
.org   PCIAaddr   ; 0x0013   ; Pin Change Interrupt Request A
reti
.org   PCIDaddr   ; 0x0014   ; Pin Change Interrupt Request D
reti

команда компилятора .org помещает следующий за ней код по адресу
метки адресов (типа PCIDaddr, OC1Aaddr ну в общем всех) указаны в inс файле
по адресу если прерывание не используется сразу ставим RETI (возврат из прерывания)
если прерывание используется то ставим RJMP и нужную нам метку процедуры обработчика прерываний

далее,
задавать все регистры как temp1, temp2, temp3... тоже смысла не имеет, тогда уж оставь R16 R17 R18 .. - меньше кнопочек на клавиатуре нажимать придется :-)
если же хочешь сделать читабельно и красиво то называть нужно по функциям каждый регистр:
Код:
   .def   Temp=R16    ; это временный регистр для операций
   .def   loopCount=R17   ; счетчик циклов
   .def   bitPointer=R18      ; битовый указатель

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

кстати в какой программе собираешься писать ?
inc файла attiny2313.inc например в avr studio нет, есть tn2313Adef.inc


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пропорциональное управление на МК (Знание=Сила)
СообщениеДобавлено: Пт авг 24, 2012 07:15:25 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
по инициализации:

давай так:

первым делом после сброса мы запрещаем прерывания контроллера, почему то в примерах по avr так не пишут, хотя в давние времена когда правили бал i8080 и z80 программа всегда начиналась с запрещения прерываний (ну причина конечно есть, сейчас после сброса в avr сбрасываются все включенные прерывания, но вот на случай если выполнен не аппаратный сброс а переход на адрес 0 - прерывания лучше все таки выключить вручную)
Код:
RESET:
                     cli    ; запретили прерывания


далее, мы инитим стек !! не стоит это откладывать на долго, потому как до инициализации стека ты не можешь использовать RCALL и прерывания
Код:
             LDI temp, low(ramend)
             out spl, temp


причем помним что SP обычно двубайтовый регистр, и только в контроллерах с памятью 256 или меньше байт однобайтовый ! (это если вдруг захочешь перейти на что нить типа мег - у них памяти от 512 байт, следовательно нужно будет инитить и SPL и SPH)

потом инитим ВСЕ линии портов
Код:
ldi Temp,0b10000000
out DDRB,Temp           ;настроили порт "В"
         ;х0000000 - выход  на передатчик
         ;0000хххх - вход    чтения клавиатуры



ldi Temp,0b00011111
out DDRD,Temp       ;настраиваем порт "D" на вывод(запись)(0-ввод, 1-вывод), 5 младших линий на выход (линии клавиатуры)



и только потом настраиваем встроенные устройства контроллера: счетчики, компараторы, АЦП и так далее


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 297 ]    , , , 4, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y