Жаль что не засекречен, правда?radio-kot писал(а):Даташит засекречен ?
BASCOM AVR в вопросах и ответах
- Сообщения: 2584
- Зарегистрирован: Вт сен 14, 2010 10:27:19
- Реклама
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 2584
- Зарегистрирован: Вт сен 14, 2010 10:27:19
даташит Семенов Михаил вам бесплатно пришлет, даже на русском есть на некоторые.edm2007 писал(а): можно было бы купить. У известно кого.
Будете проходить мимо- проходите!
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
Разобрался с таймером/счётчиком . Оказывается нельзя напрямую считывать значение из счётчика , вот так var=counter0 а вот так можно var=makeint(th0,tl0). Возможно данное утверждение справедливо только для баскома 51 (в баском авр пока не проверял).
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Нет, в AVR можно содержимое регистра копировать в переменную.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Реклама
- Сообщения: 442
- Зарегистрирован: Пт авг 29, 2008 09:22:37
Так и в 51-ом можно , я-ж не говорю что нельзя его вообще считать , МОЖНО но только как-то через ж.....
edm2007, а про какие регистры ты говориш про РОН ? если про них то тут помоему у баском51 тоже проблем никаких , а я про регистры таймера/счётчика TH0&TL0 в режиме счётчика . А как в авр , с этим дело обстоит ? кто в курсе просветите если не трудно.
edm2007, а про какие регистры ты говориш про РОН ? если про них то тут помоему у баском51 тоже проблем никаких , а я про регистры таймера/счётчика TH0&TL0 в режиме счётчика . А как в авр , с этим дело обстоит ? кто в курсе просветите если не трудно.
Все мы работаем по методу Робинзона Крузо – ждем пятницу.
Да почему про РОН, про РВВ. Я не в том смысле что в 51 вообще нельзя, я говорю о том что в AVR без склейки через makeint пишется. Неправильно выразился, просто.
Ну и все в этом духе.
Код: Выделить всё
Timercounter = Counter1
Timercounter = Capture1
Temp1 = Timer1
Ну и все в этом духе.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 84
- Зарегистрирован: Пт апр 16, 2010 12:30:03
Уважаемые коты! Столкнулся с банальной проблемой - опрос кнопки по прерыванию на Attiny13. Перечитал все, что мог, но работает не так, как ожидалось
После нажатия на кнопку должен увеличиться счетчик N_blink от 1 до 3 и так по кругу. После чего светодиод должен мигнуть столько же раз. Но светодиод почему-то мигает 4-6 раз. В чем проблема - не пойму, хотя написано об этом много. Подскажите, где же собака порылась?
Код: Выделить всё
Dim Tmp As Byte 'временая переменная
Config Portb.1 = Input 'Кнопка
Set Portb.1
Config Int0 = Falling
On Int0 Knopka
Enable Interrupts
Enable Int0
Do
'основной цикл
Loop
End 'end program
Knopka:
Portb.2 = 0 ' выключаем светодиод
Wait 1
N_blink = N_blink + 1 'увеличиваем счетчик на 1
If N_blink > 3 Then 'если счетчик вышел за пределы 3-х, приравнять к 1
N_blink = 1
End If
For Tmp = 1 To N_blink 'поморгали N_blink раз
Portb.2 = 1
Wait 1
Portb.2 = 0
Wait 1
Next
Portb.2 = 1
ReturnФлаг внешнего прерывания при выходе из оного сбрасывать все же нужно. Бит 6 регистра GIFR. GIFR = 64.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 84
- Зарегистрирован: Пт апр 16, 2010 12:30:03
Я программированием занимаюсь недавно, и если честно, не очень понял сказанного.
Не смотря на то, что при обработке внешнего прерывания оно запрещается, флаг его срабатывания все равно выставляется в регистре GIFR. Из-за дребезга контактов оно наверняка отметится не один раз. Потому если не очистить флаг перед выходом из прерывания - оно тут же будет выполнено снова, как только выйдет по return. Очистить флаг можно записью в него единицы. У Attiny13 это INTF0. 6 бит регистра GIFR. Потому, так:
P.S. А еще у Вас пин светодиода не настроен на выход. 
Код: Выделить всё
Knopka:
..................
Portb.2 = 1
GIFR = 64
Return
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 84
- Зарегистрирован: Пт апр 16, 2010 12:30:03
Спасибо, теперь немного понял. А пин диода на выход я случайно задел, когда удалял лишнее для помещения на сайт.
Ну и хорошо. Обнуление флага необходимо еще и потому, что кнопку можно и при мигании нажать еще раз. Получим двойное срабатывание. Недурно бы и ожидание отпускания кнопки добавить, на тот случай если кнопка намеренно удерживается. Иначе, при выходе в основной цикл и последующем отпускании получим срабатывание из-за дребезга.dhouse писал(а):Спасибо, теперь немного понял. А пин диода на выход я случайно задел, когда удалял лишнее для помещения на сайт.
Код: Выделить всё
knopka:
..................
Portb.2 = 1
While Pind.2 = 0 ' если кнопка удерживается.
Waitms 150
Wend ' крутимся здесь
GIFR = 64 ' очищаем флаг прерывания
Return
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- Сообщения: 84
- Зарегистрирован: Пт апр 16, 2010 12:30:03
Еще раз большое спасибо. Уже проверил в железе, все отлично работает. Давно хотел сделать себе светосинхронизатор для второй фотовспышки, но конструкций на МК в инете не нашел. Пришлось скомпилировать из существующих схем, прикрутив МК. Теперь могу выбирать, на какой пых ведущей вспышки (от 1 до 3) должна сработать ведомая.
Вот тут я что-то не пойму (цитата из даташита):edm2007 писал(а):Очистить флаг можно записью в него единицы. У Attiny13 это INTF0. 6 бит регистра GIFR.
Т.е. там написано следующее: при появлении прерывания на INT0 флаг GIFR.6 устанавливается в единицу. А для его сброса предлагается записать туда опять же единицу. Или опечатка, или что-то не стыкуется.When an edge or logic change on the INT0 pin triggers an interrupt request, INTF0 becomes set (one). If the I-bit in SREG and the INT0 bit in GICR are set (one), the MCU will jump to the corresponding Interrupt Vector. The flag is cleared when the interrupt routine is executed. Alternatively, the flag can be cleared by writing a logical one to it.
Даже остановленные часы два раза в сутки показывают правильное время.
Нет, все верно. Именно так, для его сброса необходимо записать туда единицу.Секретный кот писал(а):Т.е. там написано следующее: при появлении прерывания на INT0 флаг GIFR.6 устанавливается в единицу. А для его сброса предлагается записать туда опять же единицу. Или опечатка, или что-то не стыкуется.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
В таком случае как проц определит, что означает эта единица – наличие необработанного прерывания или вручную сброшенный флаг? 
Даже остановленные часы два раза в сутки показывают правильное время.
Дело в том, что несмотря на один и тот же адрес, данные "туда" и "оттуда" идут разными путями. Типичный пример - UDR в UART - когда в него записываем, содержимое уходит "во внешний мир" по TxD, когда читаем - то, что из него пришло по RxD. А адрес один.Секретный кот писал(а):В таком случае как проц определит, что означает эта единица – наличие необработанного прерывания или вручную сброшенный флаг?
Однако если вместо считывания UDR мы запишем в него некий байт, мы всё-таки навсегда потеряем принятую информацию, не так ли?..Jack_A писал(а):Типичный пример - UDR в UART - когда в него записываем, содержимое уходит "во внешний мир" по TxD, когда читаем - то, что из него пришло по RxD. А адрес один.
Даже остановленные часы два раза в сутки показывают правильное время.
Нет. В приемный буфер мы ничего не можем записать, только в передающий, хотя адрес у них один ( приблизительно как на рисунке ) - иначе мы не смогли бы работать в дуплексном режиме.Секретный кот писал(а): Однако если вместо считывания UDR мы запишем в него некий байт, мы всё-таки навсегда потеряем принятую информацию, не так ли?..
http://photo.qip.ru/users/gaev/2123653/ ... ull_image/


