Ассемблер (ASM) для AVR в вопросах и ответах
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
щас ведутся испытания программы. вывод на LCD значение счетчика. на входе генератор (меандр). при частотах ниже 15 кГц, если быть точным ниже 14878 Гц, работает не корректно. что в протеусе, что в реале. значение на индикаторе плавает. МК тактируется временно от внутреннего RC на 8 мГц.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
все логично, поскольку у тебя значение счетчика сильно зависит от значения ICES, попробуй сделать как я описал.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
так я же обнуляю счетчик при переднем фронте, а по заднему беру значение.
логика примерно:
прерывания:
если передний фронт обнуляем счетчик TCNT1L TCNT1H
иначе берем значение из ICR1L ICR1H в r24 r25
выход из прерываний.
в основном цикле программы примерно два раза в секунду вывожу на LCD значение r24 r25 перекодированные в десятеричный формат.
PS. дополнение к предыдущему сообщению. значение плавает от 0 до 65000. плывет примерно по 2000-3000 (зависит от частоты) в порядке возрастания от 0 до 65000.
логика примерно:
прерывания:
если передний фронт обнуляем счетчик TCNT1L TCNT1H
иначе берем значение из ICR1L ICR1H в r24 r25
выход из прерываний.
в основном цикле программы примерно два раза в секунду вывожу на LCD значение r24 r25 перекодированные в десятеричный формат.
PS. дополнение к предыдущему сообщению. значение плавает от 0 до 65000. плывет примерно по 2000-3000 (зависит от частоты) в порядке возрастания от 0 до 65000.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не нашел в проге очистку флагов.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
каких именно флагов? в проге меняется только флаг отвечающий за то по какому фронту вызывается прерывание
***
in tmp,tccr1b ;берем для установки бита
ori tmp,(1<<ices1) ;устанавливаем бит ICES1
out tccr1b,tmp ;устанавливаем
rjmp out_tim ;на выход
onn:
***
in tmp,tccr1b ;очищаем бит ICES1
andi tmp,$ff-(1<<ices1)
out tccr1b,tmp
out_tim:
reti ;выход с прерываний
там же очистка счетчика
***
onn:
clr tmp ;очищаем счетчик
out tcnt1l,tmp ;младший
out tcnt1h,tmp ;старший
***
out_tim:
reti ;выход с прерываний
Спойлер
TIM1_CAPT: ;прерывания***
in tmp,tccr1b ;берем для установки бита
ori tmp,(1<<ices1) ;устанавливаем бит ICES1
out tccr1b,tmp ;устанавливаем
rjmp out_tim ;на выход
onn:
***
in tmp,tccr1b ;очищаем бит ICES1
andi tmp,$ff-(1<<ices1)
out tccr1b,tmp
out_tim:
reti ;выход с прерываний
там же очистка счетчика
Спойлер
TIM1_CAPT: ;прерывания***
onn:
clr tmp ;очищаем счетчик
out tcnt1l,tmp ;младший
out tcnt1h,tmp ;старший
***
out_tim:
reti ;выход с прерываний
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Регистр флагов требования прерываний. Контроллер ведь не знает, что ему на вход шлепает и устанавливает флаги независимо от программы.
Спойлер
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):Не нашел в проге очистку флагов.
тоже не вкурил причем здесь это

- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а вот тут начинается интетресное...
в инициализации поставил
ldi tmp,$41 ;ICES1=1 CS1=1
out tccr1b,tmp
ldi tmp,$20 ;TICIE=1
out timsk,tmp
ldi tmp,$10 ;OCF1A=1
out tifr,tmp
ret
странно но этой командой он обнуляет (!) этот бит (OCF1A). устанавливается же этот бит сам когда устанавливаем timsk.
но что более странно - вроде заработало.
ЗЫ. нет. все таки не работает. если в прерываниях стоит
in tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
***
то значения плавают от 0 до 65000
если поменять младшие со старшими
in tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
***
то выводит только значения до 255, потом начинает с 0.
в инициализации поставил
Спойлер
cap_init: ;инициализация прерыванийldi tmp,$41 ;ICES1=1 CS1=1
out tccr1b,tmp
ldi tmp,$20 ;TICIE=1
out timsk,tmp
ldi tmp,$10 ;OCF1A=1
out tifr,tmp
ret
странно но этой командой он обнуляет (!) этот бит (OCF1A). устанавливается же этот бит сам когда устанавливаем timsk.
но что более странно - вроде заработало.
ЗЫ. нет. все таки не работает. если в прерываниях стоит
Спойлер
TIM1_CAPT: ;прерыванияin tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
***
то значения плавают от 0 до 65000
если поменять младшие со старшими
Спойлер
TIM1_CAPT: ;прерыванияin tmp,tccr1b ;берем для сравнения
sbrc tmp,ices1 ;смотрим бит ICES1
rjmp onn ;если 1 то на метку
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
in tmp,icr1l ;если 0 то запоминаем значения
sts timel,tmp ;из памяти потом выводим на индикацию
***
то выводит только значения до 255, потом начинает с 0.
Последний раз редактировалось xkp Чт окт 18, 2012 11:44:22, всего редактировалось 2 раза.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вообще не понял
каким боком флаг совпадения влияет на работу захвата, кто-нибудь растолкуйте старому маразматику
каким боком флаг совпадения влияет на работу захвата, кто-нибудь растолкуйте старому маразматику
Re: Ассемблер (ASM) для AVR в вопросах и ответах
При чем здесь чистка флага сравнения OCF1A? Нужно чистить ICF1.
Нормальное чтение 16-разрядных регистров периферии отменили?
Код: Выделить всё
in tmp,icr1h
sts timeh,tmp ;из памяти потом выводим на индикацию
in tmp,icr1l ;если 0 то запоминаем значения
Последний раз редактировалось akl Чт окт 18, 2012 11:49:55, всего редактировалось 1 раз.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
для чего?
при выходе по reti он сам очистится
при выходе по reti он сам очистится
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
не знаю при чем тут чистка OCF1A, но работает программа иначе с очисткой, нежели без очистки. флаг ICF1 устанавливается сам при наступлении прерывания и очищается сам при прыжке на подпрограмму прерываний.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Совершенно верно, но при инициализации или после возврата из
входная частота этот флаг установит, т.к. за полсекунды пройдет много периодов.xkp писал(а):в основном цикле программы примерно два раза в секунду вывожу на LCD значение r24 r25 перекодированные в десятеричный формат.
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
весь проект в АВР студии + протеус. на вход можно повесить генератор CLOCK называется в протеусе
так же картинки тестовой платы
так же картинки тестовой платы
Спойлер
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сделал бы, примерно, так
Спойлер
Код: Выделить всё
CLR R0
LDI R20,$40 ; подготовка к CAPT
OUT TCCR1B,R20 ;
LDI R20,$20 ;
OUT TIMSK,R20 ;
OUT TCCR1A,R0
OUT TCNT1H,R0
OUT TCNT1L,R0
; LDI R21,$41
LDI R22,$01
SER R20
OUT TIFR,R20
CLT
SEI
main:
BRTC MAIN
CLI
CLT
; .......
; .......
; .......
; .......
; .......
; .......
; .......
; .......
; .......
RJMP RESET
TIM1_CAPT:
TST R22 ; начало импульса
BREQ CAPT_END ; уже конец
OUT TCCR1B,R22 ; да, начало. Старт таймера Т1 с разрешенным захватом по концу импульса
CLR R22 ; сброс признака начала импульса
RETI
CAPT_END:
OUT TCCR1B,R0 ;
IN R25,ICR1L
IN R24,ICR1H
SET
RETI
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
r22 в прерываниях сбрасывается и больше ни где не устанавливается
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl
у тебя после первого окончания импульса таймер остановится и все...
да и счетчик в таком случае сбрасывать надо.
почему отвергают мой метод -
счетчик крутится непрерывно, просто в определенные моменты считываем значения и все, куда уж проще?
у тебя после первого окончания импульса таймер остановится и все...
да и счетчик в таком случае сбрасывать надо.
почему отвергают мой метод -
счетчик крутится непрерывно, просто в определенные моменты считываем значения и все, куда уж проще?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Как я понял xkp меряет длительность одного импульса, делает преобразования, выводит куда-то и ВОЗВРАЩАЕТСЯ обратно. Тоже самое делает мой кусок кода, правда, он возвращается на RESET (так, на всякий случай). По поводу запущенного таймера. Сам активно пользуюсь этим. Например, в CL_LED2313 все действия разворачиваются на фоне непрерывно работающего таймера Т1, который и измеряет и динамическую индикацию осуществляет.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):Как я понял ...
да трудно понять человека, который сам не знает чего хочет, а все экстрасенсы ушли на ТНТ
- xkp
- Опытный кот
- Сообщения: 781
- Зарегистрирован: Ср ноя 18, 2009 12:50:31
- Откуда: ковров
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
GP1, ваш метод, как я понял, вычитать из старого значения счетчика - новое. завтра попробую. или вечером. сейчас уже голова болит от испытаний.
akl, выход после всего на ресет не есть хорошо. так как в программе после ресета будут стоять кучи инициализаций, чтение eeprom, все вместе по времени займет около 1-2 секунд. нужно замерять постоянно с N-переодичностью, думаю около 30 раз в секунду.
akl, выход после всего на ресет не есть хорошо. так как в программе после ресета будут стоять кучи инициализаций, чтение eeprom, все вместе по времени займет около 1-2 секунд. нужно замерять постоянно с N-переодичностью, думаю около 30 раз в секунду.
R5VCH
Хотелки:
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Хотелки:
Спойлер
Аналоговый осциллограф С1-112, С1-118, другиене/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
