![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
pettimm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 24.9.2005 Репутация: 1 Всего: 1 |
Привет всем!
Настроил АЦП Изменяю напряжение на ноге ATtiny13 Если не прыгнуть на паузу pausa1s (RCALL pausa1s) после метки "PEREVIRJAEMO_NAPRUGU:" то реагирует на изменение напряжения только после выключения и включения питания как бы одноразово, а когда выполняет прыжок на паузу (RCALL pausa1s), то тогда нормально,крутим переменник и видим что при изменении напряжения светодиод включается и выключается. В чем причина? частота задающего генератора 4,8Мгц/8=600 Кгц Код на асме: ;NASTROJKA ADC\ АЦП ;ldi temp,0b11101010 ; 150 Khz : частота ck= 0.6 KHz/4=150 khz ;out ADCSRA,temp ;;" бит 7 ADEN - (выставляем в 1) - единица включает ADC ноль-отключает ADC ;" бит 6 ADSC- (выставляем в 1) - запустить измерения ;" бит 5 ADATE- (выставляем в 0) - единица включает автоматический старт измерения. ;" бит 4 ADIF- (выставляем в 0) - при включенном прерывании ADC - бит будет выставлятся в единицу ;после завершения конвертации, и возвращатся в 0 после обработки прерывания. При выключеном ;прерывании этот бит нужно сбрасывать "вручную" ;" бит 3 ADIE- (выставляем в 1) - Разрешать прерывание от ADC ;" биты 0-2 ADPS2,ADPS1,ADPS0- управляет временем измерения,Коефициент деления тактовой частоты в идеальных условиях симуляции на результат; не влияет. ;Выбрать нужно такой коефициент деления чтоб частота преобразования была 50-200 Кгц ;000 -2 ;001 -2 ;010 -4 ;011 -8 ;100 -16 ;101 -32 ;110 -64 ;111 -128 ldi temp,0b01100001 out ADMUX,temp ;BIT_6 :: istocnik opornogo naprjagenija 0- Up 1- 1,1v vnutrennij istochnik ;BIT_5:::Но порядок следования битов на левое ориентирование можно сменить ;установив бит ADLAR в регистре ADMUX. Это удобно, если требуется получить 8-битовый результат. ;В таком случае требуется прочитать только регистр ADCH ; BIT_0= 1 ; BIT_1=0 - vubran vhod ADC1 ldi temp,0b00000100 out DIDR0,temp ; Отключение функции цифрового ;входа на ADC1 ;VUBOR ISTOCHNIKA ZAPUSKA PROCTSA PREOBRAZOVANIJA: ldi temp,0b00000000 out ADCSRB,temp ; AVTONOMNUJ REGIM RABOTU=00000000 ;******************************************8 PEREVIRJAEMO_NAPRUGU: RCALL pausa1s ldi temp,0b00000000 ; OBNULJAEMO out ADCSRA,TEMP OUT ADCH,TEMP OUT TCNT0,TEMP ldi temp,0b11000010 out ADCSRA,temp ; 150 Khz : частота ;ck= 0.6 KHz/4=150 khz ; ZAPUCK VRYCHNY CHEKAEMO_KINTSJA_VUMIRU: WDR IN TEMP,ADCSRA SBRS TEMP,ADIF RJMP CHEKAEMO_KINTSJA_VUMIRU IN TEMP,ADCH CPI temp,204; BRSH VUMUKAEMO_SIGNAL; ESLI ROVNO ILI BOLSHE ;BRLO VMUKAEMO_SIGNAL VMUKAEMO_SIGNAL: SBI PORTB,SVITLO RJMP PEREVIRJAEMO_NAPRUGU VUMUKAEMO_SIGNAL: CBI PORTB,SVITLO RJMP PEREVIRJAEMO_NAPRUGU |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
это не полный код, и почему не писать си?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
pettimm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 24.9.2005 Репутация: 1 Всего: 1 |
Спасибо за ответ, вот полный код на асме, асм- люблю, си- не знаю :
.nolist .include "tn13def.inc" .list ;* ********************************** ; Описание собственных переменных .equ ;Port B .equ KLUCH_vuh =0 ;noga5 vuhid 1 ;.equ *** =1 ;noga6 vhod 0 ;.equ **** =2 ;noga7 vhid 0 ;.equ ** =3 ;noga2 vhod 0 ;.equ ** ;noga3 vhod 0 .equ SVITLO_14_4v_vukl =5 ;noga1 vhod 0 ;.equ ***=6 ; ;* ********************************** ;prusvoennja registram imeni .def TEMP = r16; v pauzah .def TEMP_INTERUPT =R17 ; ;************************************ ;* ************************************** .def TEMP2 = r21 ; v pauzah .def TEMP3 = r24 .def TEMP4 = r25 .def TEMP_zvuk = r22 ;* ********************************** ;Obrabotka prerivanij .cseg .org 0x0000 rjmp start .org 0x0001 rjmp zovni_int0; .org 0x0002 rjmp NEZADIJANI .org 0x0003 rjmp NEZADIJANI .org 0x0004 rjmp NEZADIJANI .org 0x0005 rjmp NEZADIJANI .org 0x0006 rjmp NEZADIJANI .org 0x0007 rjmp NEZADIJANI .org 0x0008 rjmp NEZADIJANI .org 0x0009 rjmp preruv_ADC ;/ /////////////////////////////////// preruv_ADC: reti;0x0009 ;/ //////////////////////////////////// NEZADIJANI: reti ;/ //////////////////////////////////// zovni_int0: reti ;0x0001 ;* ************************* ;* ************************* start: ; ;NASTROJKA_PORTIV: ;конфигурация порта B Ldi temp , 0b00111011 Out DDRB , temp Ldi temp , 0b00011011 Out PORTB , temp ; ************************* ;STEK_NASTROJKA: ;инициализация стека ldi temp,low (RAMEND) out SPL,temp ;* ************************* ;Vkluchenie storogevogo tajmera WATCHDOG_ON: ldi temp,0b00011111 ; 0- 1- 2- 3- 4- out WDTCR,temp;Storogevoj tajmer vkl ;* ********************************************* cli Priznak_reset: ldi TEMP3,3 pr_res1: sbi PORTB,5 Rcall pausa1s cbi PORTB,5 rcall pausa1s dec TEMP3 cpi TEMP3,0 brne pr_res1 ;********************************************** ldi temp,0b01100001 out ADMUX,temp ldi temp,0b00000100 out DIDR0,temp ; Отключение функции цифрового входа на ADC1 ;VUBOR ISTOCHNIKA ZAPUSKA PROCTSA PREOBRAZOVANIJA: ldi temp,0b00000000 out ADCSRB,temp ; AVTONOMNUJ REGIM RABOTU=00000000 ;******************************************8 PEREVIRJAEMO_NAPRUGU: RCALL pausa250Ms;pausa1s ldi temp,0b00000000 ; OBNULJAEMO out ADCSRA,TEMP OUT ADCH,TEMP OUT TCNT0,TEMP ldi temp,0b11000010 out ADCSRA,temp ; 150 Khz : частота ck= 0.6 KHz/4=150 khz ; ZAPUCK VRYCHNY CHEKAEMO_KINTSJA_VUMIRU: WDR IN TEMP,ADCSRA SBRS TEMP,ADIF RJMP CHEKAEMO_KINTSJA_VUMIRU IN TEMP,ADCH CPI temp,204; BRSH VUMUKAEMO_SIGNAL; ESLI ROVNO ILI BOLSHE ; BRLO VMUKAEMO_SIGNAL ;******************************* VMUKAEMO_SIGNAL: SBI PORTB,SVITLO_14_4v_vukl RJMP PEREVIRJAEMO_NAPRUGU VUMUKAEMO_SIGNAL: CBI PORTB,SVITLO_14_4v_vukl RJMP PEREVIRJAEMO_NAPRUGU ;*************************** pausa1s: ldi TEMP,250 p1s: ldi TEMP2,250 p1_1s: WDR dec TEMP2 cpi TEMP2,0 brne p1_1s p2_1s: dec TEMP cpi TEMP,0 brne p1s ret ;********************** pausa250Ms: ldi TEMP,64 p250Ms: ldi TEMP2,130 p250_1s: WDR dec TEMP2 cpi TEMP2,0 brne p250_1s dec TEMP cpi TEMP,0 brne p250Ms ret Это сообщение отредактировал(а) pettimm - 23.11.2013, 15:27 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
есть кнопочка код, что бы понятно было читать ваш код (смотреть буду позже)
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
возможно вместо паузы надо прочитать ADCSRA -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
pettimm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 24.9.2005 Репутация: 1 Всего: 1 |
проверил вместо паузы поставил in temp, ADCSRA(ДУМАЮ ДОСТАТОЧНО ЧТО БЫ ПРОЧИТАТЬ?) -- НЕ ПОМОГЛО,
А ЕЩЕ ТАКУЮ ПРОВЕРКУ ДЕЛАЛ: В ПАУЗЕ СТАВИЛ ЗНАЧЕНИЕ РЕГИСТРОВ=1 КАК БЫ СДЕЛАТЬ ПАУЗУ МИНИМАЛЬНОЙ ПО ВРЕМЕНИ И ТО ЖЕ ПРИ ЭТОМ НЕ РАБОТАЛО, ТО ЕСТЬ ОНО ХОЧЕТ ПАУЗУ И НЕ МЕНЬШЕ КАКОЙ ТО ДЛИНЫ, НО ЗАЧЕМ? |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 3 Всего: 146 |
накидать схему в протеусе можете?
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
pettimm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 24.9.2005 Репутация: 1 Всего: 1 |
к сожалению не работал в протеусе, схема есть в лайоут5 и прошивку заливаю в реальное устройство, а протеус интересно будет освоить, скачаю попробую с ним поиграться
|
|||
|
||||
kolobok0 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 24.12.2008 Репутация: нет Всего: 2 |
логику работы с АЦП проговорите просто тупо словами. Пока я вижу такую схему: включение, ожидание, начало цикла работы с ацп, <пауза>, инициализация ацп, ожидание, работа с ацп, конец цикла. Вопрос, Вы наверное в курсе, что для оцифровки аналогового сигнала как и для обратного действия (ЦАП) необходимо время? И наверное Вы в курсе, что необходимо холостое преобразование, после инициализации? Отсюда и влияние вашей паузы в коде. Вообще-то научитесь сразу правильно писать. Загрузка регистров не ноликами единичками, а осмысленными преддефайнами из хедера на данный МК. Пишите в одном стиле. Меткам давайте локаничные но понятные имена. Сразу пишите оптимально(с прерываниями от переферии МК), а не в рукопашную. Старайтесь использовать опыт ранее до Вас накопленный(а то будете постоянно на уровне обезъяны) - в инете примеров куча по работе в том числе и с АЦП. удачи вам (круглый) Это сообщение отредактировал(а) kolobok0 - 4.12.2013, 23:43 |
|||
|
||||
pettimm |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 24.9.2005 Репутация: 1 Всего: 1 |
Спасибо за ответ... но выявил что если не обнулять ADCSRA
по метке "ne_obnul", то работает и без паузы по метке "Esli_ne_obnul_to_pauso_no" PEREVIRJAEMO_NAPRUGU: Esli_ne_obnul_to_pauso_no: RCALL pausa250Ms;pausa1s ldi temp,0b00000000 ; OBNULJAEMO out ADCSRA,TEMP ne_obnul: OUT ADCH,TEMP OUT TCNT0,TEMP ldi temp,0b11000010 out ADCSRA,temp ; CHEKAEMO_KINTSJA_VUMIRU: WDR IN TEMP,ADCSRA SBRS TEMP,ADIF RJMP CHEKAEMO_KINTSJA_VUMIRU IN TEMP, ADCH CPI temp,204; BRSH VUMUKAEMO_SIGNAL; ; BRLO VMUKAEMO_SIGNAL А так же этот ефект проявляется при десятибитном режиме если прочитывать неправильно регистры ADCL , ADCH . в таком ком режиме их нужно читать обязательно в порядке, первым ADCL, вторым ADCH. Всем спасибо-все работает. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |