Вы не вошли.
2 Liv, спасибо за ответ и советы
Отредактировано Vasil (28.07.2006 07:17:17)
Вне форума
2 Liv
Посмотрел шыт на ATmega8. Что ж неплох однако. Но наверно пусть пока подождет свой очереди. Дюже уж крут. Начну все-таки с 2313.
Вы писали " ldi temp,(1<<RXCIE) | (1<<TXCIE) | (1<<RXEN) | (1<<TXEN)". Не могли бы вы объяснить синтаксис написания для подобных случаев (я что-то не нашел)?? Я понимаю, такая штука позволяет записать в регистр какой-то конкретный бит, не трогая все остальные.
......There is someone in my head, but it's not me.......
Вне форума
...Например, на макете сигнал Load_Relay был на порту PB0, а при разводке платы оказалось удобнее подключить его к порту PD2. Что делать? По всей программе искать и исправлять? Лучше для обращения к портам использовать макросы. В файле header.asm пишем:
.equ Load_Relay = PB0 ;управление реле нагрузки
.macro Port_Load_Relay_0 ;устанавливает линию Load_Relay в "0"
cbi PORTB,Load_Relay
.endm.macro Port_Load_Relay_1 ;устанавливает линию Load_Relay в "1"
sbi PORTB,Load_Relay
.endmВезде в программе обращение к этой линии порта делаем так:
Port_Load_Relay_0 ;включение реле
ldi temp,ON_DELAY
rcall Delay_ms ;задержка ON_DELAY
Port_Load_Relay_1 ;выключение реле
Я (но с ПИК-ами) пишу так:
Сначала определяю, "кто есть ху":
#define LCD_DATA_BIT_4 PORTA,2 ;
А в тексте программы уже просто "дергаю" мнемонику:
BCF LCD_DATA_BIT_4
или
BSF LCD_DATA_BIT_4
В итоге чтобы пересыпать ноги в программе достаточно просто порулить строку определения, а не шарить по всему тексту
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
Ну как Вам сказать... Бластер мне подарили бесплатно, а это придется делать за денежку да еще и программатор искать. Так что лучше я пойду своим путем в этом вопросе.
Почему за денежку? Сделайте сами. Или Вы имеете в виду, что для него нужно покупать 2313? Байтбластер Вам тоже пригодится, не отказывайтесь. Хотя бы для того, чтобы зашить 2313 для программатора.
Посмотрел шыт на ATmega8. Что ж неплох однако. Но наверно пусть пока подождет свой очереди. Дюже уж крут. Начну все-таки с 2313.
При стоимости ATmega8 менее 2$ в розницу, по-моему, думать нечего. В 2313 нет BOD, будут проблемы с использованием EEPROM. Нет также некоторых команд (умножения, например). Да и периферия заметно слабее. И ног будет не хватать.
Что касается конструкций вида (1<<BIT1) | (1<<BIT2) | (1<<BIT3), то это типичный сишный синтаксис, который используется препроцессором транслятора. 1<<BIT1 - сдвиг влево BIT1 раз числа "1". Т.е. если BIT1 равно 5, то число "00000001" сдвинется влево 5 раз и получится "00100000". Из номера бита получается маска. А конструкция A | B - это операция OR. Например, 00000001 | 00100000 = 00100001. Так собирается маска из нескольких бит. Все операции, которые умеет делать препроцессор, расписаны в Help-е.
Я (но с ПИК-ами) пишу так:
Сначала определяю, "кто есть ху":
#define LCD_DATA_BIT_4 PORTA,2 ;А в тексте программы уже просто "дергаю" мнемонику:
Ваш вариант тоже хорош, даже лучше моего, если бы не одно "но". В старших AVR некоторые порты размещены не в адресном пространстве IO, а в адресном пространстве данных. Для них приходится применять конструкции типа
.macro Port_LED_F_0 ;LED_F = 0
lds temp,PORTG
clbr temp,LED_F
sts PORTG,temp
.endm
В моем случае внешне обращения к портам выглядят совершенно одинаково. А еще я иногда в макросах "дерганья" портами ставлю nop-ы, когда требуются задержки и не хочется загромождать ими основную программу. Но это дело вкуса. Для младших AVR я даже рекомендовал бы использовать Ваш метод.
Отредактировано Liv (28.07.2006 12:42:01)
Вне форума
... если бы не одно "но". В старших AVR ...
Я сразу написал - я так вытворяю с ПИК-ами...
... А еще я иногда в макросах "дерганья" портами ставлю nop-ы, когда требуются задержки ...
У ПИК-ов, когда сильно быстро, рекомендуют писать не в порт а в его вых. защелку (это два физически разных регистра).
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
2 Liv
Так а в чем проблема-то?? Я так думаю, что писание программ (особенно простых) под мегу8 и под 2313 сильно не различается. Думаю, что в случае необходимости и мегу8 смогу запрограмить.
......There is someone in my head, but it's not me.......
Вне форума
Небольшое уточнение, ATtiny2313 имеет BOD на борту, чего действительно не было в уже снятом с производства AT90S2313, к тому же, последний если еще и есть где то в розн. продаже, то как правило стОит раза в два дороже тини.
Отредактировано Vasil (28.07.2006 15:09:53)
Вне форума
Поход по местный магазинам закончился невесело. AT90S2313 снят с производства и нет в наличии (да и был бы, один фиг 105р. - дороговато)
ATmega8-8PI стоит 90р. тоже но с индексом -16PI стоит всего 58р., но их нет в наличии (кстати, в чем разница между -16PI и -8PI??). Придется наверно взять -8PI т.к. других вариантов нет. Жалко... из пушки по воробьям....
......There is someone in my head, but it's not me.......
Вне форума
Ну дык, наверное и нужно последвать совету Liv, не сошелся же свет клином на этом 2313. 16 или 8 это макс. тактовая частота в МГц, и соответственно диапазон питающих напряжений 4,5-5,5 В или 2,7-5,5 В , Р - это DIP "упаковка", I - индустриальное исполнение - раб.темп. -40 - +85 градусов, вообще то все это есть в даташитах.
ЗЫ, а воробьи и др. пернатые еще поналетят, если охота не пропадет -палить
Вне форума
Тоже верно. Странно тока что 16МГц - МК в полтора раза дешевле 8 мегагерцового.
Кстати, файл описания регистров (*def.inc) на мегу8 есть у кого-нибудь???
......There is someone in my head, but it's not me.......
Вне форума
[ Сгенерировано за 0.083 сек, 7 запросов выполнено - Использовано памяти: 601.68 Кбайт (Пик: 652.05 Кбайт) ]