Страница 1 из 1
подтяжка линии порта
Добавлено: Сб ноя 18, 2017 12:50:42
wws63
Ничего не пойму, Студия 6
программка как на АСМе, так и на Си. Не подключается подтяжка PB0, ни в Протеусе , ни в железе.:unknw:
Код: Выделить всё
ldi r23, (0<<PUD)
out MCUCR, r23
ldi r21, (1<<PB0)
out PORTB,r21
ldi r22, (1<<DDB4)|(1<<DDB1)
out DDRB,r22
;ldi wreg, 0b00000001
;out PORTB, wreg
;ldi wreg, 0b00010010
;out DDRB, wreg
Код: Выделить всё
int main(void)
{
PORTB = 0b00000001;
DDRB = 0b00010010;
while (1)
{
//----------------
}
}
Вроде все делаю по даташиту :blink:
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 13:13:58
AlanDrakes
По Ассемблерному коду:
In addition, the Pull-up Disable – PUD bit in MCUCR disables the pull-up function for all pins in all ports when set.
В дополнении, запрет подтяжки - бит PUD в регистре MCUCR запрещает ВСЕ функции подтяжки пинов вверх.
Таким образом, Ваш ассемблерный код заставит порт перейти в полное Z-состояние без подтяжки пинов вверх или вниз.
Код на Си должен работать, если не используете аналогичный бит.
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 13:20:47
wws63
[uquote="AlanDrakes",url="/forum/viewtopic.php?p=3236106#p3236106"]По Ассемблерному коду:
бит PUD в регистре MCUCR запрещает ВСЕ функции подтяжки пинов вверх.[/uquote]
PUD в регистре MCUCR по умолчанию сброшен в ноль, это я так его написал, подстраховался.
Что есть эта строчка, что нет - подтяжки нет

Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 13:34:43
codenamehawk
Пока здесь
пусто протеус ничего не покажет.
Добавлено after 3 minutes 36 seconds:
(0<<PUD) в "с" так не работает, думаю в ASM тоже.
Добавлено after 3 minutes 55 seconds:
http://easyelectronics.ru/avr-uchebnyj- ... yvoda.html
"то слабый 100кОмный резистор не сможет удерживать напряжение на линии на уровне лог1 и на входе будет нуль."
В железе, чтобы не ловить наводок, нужен дополнительный резистор.
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 14:18:16
wws63
[uquote="codenamehawk",url="/forum/viewtopic.php?p=3236124#p3236124"]Пока здесь[/uquote]
Всё не то...

Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 15:34:05
Z_h_e
Контроллер то какой у Вас?
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 15:43:13
wws63
ATtiny13a. Сейчас попробую с 4-ой Студией. Когда убираю цикл программы, подтяжка появляется.
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 15:46:34
Z_h_e
Явно тут стадия не при чем. Особенно после
wws63 писал(а): Когда убираю цикл программы, подтяжка появляется.
Поставьте паузу в любой точке программы при сумлуяции , как протеусе, так и в студии и поглядите что лежит в PORTB. Почему пренебрегаете пошаговой отладкой?
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 16:59:33
wws63
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3236232#p3236232"]Поставьте паузу в любой точке программы при сумлуяции , как протеусе, так и в студии и поглядите что лежит в PORTB. Почему пренебрегаете пошаговой отладкой?[/uquote]
Вот скрин из 4-й Студии, 1-ка в PORTB0 есть. Но при симуляции и на PIN0 тоже должна быть 1-ка?
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 17:16:52
akl
В студии поддтяжки отродясь не бывало.
Код: Выделить всё
ldi r22, (1<<DDB4)|(1<<DDB1)|1<<DDB0
out DDRB,r22
SBI PORTB,0
CBI DDRB,0
Re: подтяжка линии порта
Добавлено: Сб ноя 18, 2017 18:47:12
Z_h_e
Код: Выделить всё
int main(void)
{
PORTB = 0b00000001;
DDRB = 0b00010010;
while (1)
{
//----------------
}
}
Это Ваш полный проект и нет подтяжки в протеусе? Не верю.
Вы говорили что что-то удаляли из цикла, и все заработало. Что там было удалено?
Добавлено after 4 minutes 50 seconds:
Каким образом было определено отсутствие подтяжки?
Re: подтяжка линии порта
Добавлено: Вс ноя 19, 2017 06:48:53
wws63
Итак, ниже полный вариант в АСМе. Сначала с ним. Подтяжки нет в "железе" и Протеусе
В Протеусе на входе кнопки, неопределённое состояние, но при симуляции отрабатывается правильно, как будто подтяжка есть.
В железе подтяжки нет, программка начинает работать так, как будто кнопка нажата.
Код: Выделить всё
//мк ATtiny13a 9,6MHz
.include "tn13adef.inc"
.list
.def T1 = R16
.def wreg = R17
.def T = R18
.equ KEY = 0 ;
/************************************************************/
;.dseg
;.cseg
;--------------------------------------------
//.org 0
//rjmp RESET
;.org 3
;rjmp TIMER0_OVF
;----
;TIMER_OVF
;--
;reti
;--------
//RESET:
;-------------------------------------------
; инициализация
; ------------------------------------------
;ldi r23, (0<<PUD)
;out MCUCR, r23
;ldi r21, (1<<PB0)
;out PORTB,r21
;ldi r22, (1<<DDB4)|(1<<DDB1)
;out DDRB,r22
ldi wreg, 0b00000001
out PORTB, wreg
ldi wreg, 0b00010010
out DDRB, wreg
;---------- инициализация стека----------------
;ldi wreg, high (RAMEND)
;out sph, wreg
;ldi wreg, low (RAMEND)
;out spl, wreg
;--------------------------------------------
; инициализация АЦП
;--------------------------------------------
;cli ; запретить прерывания
ldi wreg, 0b10000110;0b10000011 ; Вкл. Ацп, Однокр. преобр., Прерывание запрещено, СК/8 (125 kHz)
out ADCSRA, wreg
ldi wreg,0b00000011 ;AVcc, пр.выравн, ADC Channel 3
out ADMUX, wreg
;--------------------------------------------
rcall adc_convert
mov T1, wreg
mov T, T1
Cycle:
sbic PINB, KEY
rjmp m
rcall imp_4
rcall imp_4
rcall imp_4
rcall imp_1
rcall imp_1
rcall imp_1
rjmp Cycle
m:
ldi wreg, 0b00010010
out PORTB, wreg
rjmp Cycle
;*********************DELAY_1****************************
delay_1:
ldi r19, 30
ldi r20, 30
L1: dec r20
brne L1
dec r19
brne L1
ret
;********************** AD CONVERTION *******************
adc_convert:
sbi ADCSRA, ADSC ; Start Convertion
sbic ADCSRA, ADSC
rjmp PC-1
in wreg, ADCL ; просто формальность (первым всегда читается ADCL)
;in wreg, ADCH ; wreg contains result
ret
;********************************************
imp_1:
ldi wreg, 0b00000010
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ldi wreg, 0b00000000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ret
;******************************************
imp_4:
ldi wreg, 0b00010000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ldi wreg, 0b00000000
out PORTB, wreg
rcall delay_1
dec T
brne PC-2
mov T, T1
ret
;******************************************
Re: подтяжка линии порта
Добавлено: Вс ноя 19, 2017 07:45:56
akl
Поменяйте здесь и далее при установке PORTB,0
Код: Выделить всё
rjmp Cycle
m:
ldi wreg, 0b00010011
; ldi wreg, 0b00010010
out PORTB, wreg
Re: подтяжка линии порта
Добавлено: Вс ноя 19, 2017 08:23:17
wws63
ОК, спасибо, ошибку в цикле сделал, поменял и все запустилось.
Как все запутано в АВР-ках. В ПИК-ах все просто до безобразия.
Получается, что если установлена подтяжка на одной линии, то при выводе любого значения в порт надо на этой линии в конце цикла выставлять единичку
Добавлено after 4 minutes 49 seconds:
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3236394#p3236394"]Это Ваш полный проект и нет подтяжки в протеусе? Не верю.[/uquote]
Нет, конечно, сейчас проект на Си выложу, там хуже. Есть ещё проблема с переполнением памяти.
