реклама на сайте
подробности

 
 
> Не работает передача состояния линии из одного порта в другой (pic16f72)
loghir
сообщение May 2 2011, 11:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Доброго времени суток!
Написал прогу на С для простейшего тестирования программатора и подключения МК на макетке.
Код
#include <pic.h>
#define knopka RB4
#define diod RA0

void podgot (void)
{
ADCON1 = 0x07;
TRISA = 0b00000000;
TRISB = 0b11111111;
PORTA = 0;
PORTB = 0;
RBPU = 0;
}

void main (void)
{
podgot();
while(1)
{
diod = knopka;
}
}

кварц 4 mHz подключил к выводам 15 и 16. Кондеры - 25 пф. Резистор не ставил. На вывод 1 к питанию резимтор 20 кОм, на землю - кондер 10 мкф.
Не работает...

Сообщение отредактировал loghir - May 2 2011, 11:33
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
loghir
сообщение May 5 2011, 12:28
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 13-03-11
Пользователь №: 63 577



Цитата
Код
TRISB = 0b00000001;
RB4 = RB7;

Попробуйте догадаться, что здесь выглядит странновато.

исходя из нижеизложенного — "прочитать состояние RB7 и установить RB4 в такую же позу" - с диода на кнопку. Действительно, странновато. Спасибо за подсказку.
Цитата
Мил человек, думаете, я от скуки спрашивал, как у Вас кнопка включена? По исходной программе можно было предположить, что кнопка висит между Gnd и пином "knopka", и это при "RBPU = 0;" и кнопке на RBx совершенно нормально и работоспособно.
Кроме того, я полагал, что Вы догадывались, что "RBPU = 0;" включает внутренние подтяжки по пинам PORTB к Vcc. Но, судя по ..., я опять ошибся.

Т.е. если в линию порта ничего не записывать, там через подтягивающий резистор установится ВЛУ? (1)?
А потом кнопкой можно замкнуть на GND. Полученное изменение должно быть передано на RB4.
Или с инверсией (мое предположение):
Код
RB4 = !RB7;

Цитата
Когда гадать надоест, почитайте ДШ что ли.

Вот про подключение кнопок там нет.

Попробовал:
Код
#include <pic.h>

void podgot (void)
{
ADCON1 = 0x07;
TRISB = 0b00000001;
TRISA = 0b11111111;
PORTA = 0;
// PORTB = 0;
RBPU = 0;
}

void main (void)
{
podgot();
while(1)
{
RB4 = RB7;
}
}

Hа RB7 НЛУ. При подаче него VCC загорается светодиод с RB4 на GND. При закорачивании RB7 на GND, на RB4 тоже появляется НЛУ.
И как подключить кнопку к RB7, чтобы при нажатии и отпускании на RB4 были изменения?
Вот ассемблерный листинг:
Код
1:                 #include <pic.h>
2:                
3:                
4:                
5:                 void podgot (void)
6:                 {
7:                 ADCON1 = 0x07;
   7F2    3007     MOVLW 0x7
   7F3    1683     BSF 0x3, 0x5
   7F4    1303     BCF 0x3, 0x6
   7F5    009F     MOVWF 0x1f
8:                 TRISB = 0b00000001;
   7F6    3001     MOVLW 0x1
   7F7    0086     MOVWF 0x6
9:                 TRISA = 0b11111111;
   7F8    30FF     MOVLW 0xff
   7F9    0085     MOVWF 0x5
10:                PORTA = 0;
   7FA    1283     BCF 0x3, 0x5
   7FB    0185     CLRF 0x5
11:            
12:                RBPU = 0;
   7FC    1683     BSF 0x3, 0x5
   7FD    1381     BCF 0x1, 0x7
13:                }
   7FE    1283     BCF 0x3, 0x5
14:                
15:                void main (void)
16:                {
17:                podgot();
   7E9    27F2     CALL 0x7f2
18:                while(1)
   7F1    2FEA     GOTO 0x7ea
19:                {
20:                RB4 = RB7;
   7EA    1283     BCF 0x3, 0x5
Go to the top of the page
 
+Quote Post
xemul
сообщение May 5 2011, 13:11
Сообщение #3



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(loghir @ May 5 2011, 16:28) *
Т.е. если в линию порта ничего не записывать, там через подтягивающий резистор установится ВЛУ? (1)?

И одноцветно, и фиолетово, будете ли Вы что-то записывать в линию порта, т.к. WPU (weak pull-ups) распространяется только на входы (в случае 16F72 - сразу всего PORTB, и только PORTB).
Цитата
А потом кнопкой можно замкнуть на GND. Полученное изменение должно быть передано на RB4.

Ваша программа (предполагается) транслирует состояние одного пина в состояние другого. Если состояние входного пина изменилось, то должно измениться и состояние выходного.
Цитата
Или с инверсией (мое предположение):
Код
RB4 = !RB7;

Ну а это-то как Вам удалось предположить? По тому факту, что светодиод гаснет при нажатии на кнопку? Включите светодиод не на землю, а на питание, и он будет загораться. Но на выходе точно также будет 0 при нажатой кнопке, и 1 при отпущенной.
Цитата
Вот про подключение кнопок там нет.

Зато есть про TRIS, WPU, и смехотехнику входов/выходов.
Цитата
Вот ассемблерный листинг:
Код
   7F3    1683     BSF 0x3, 0x5; 0x03 - регистр STATUS, в нём 5-й и 6-й биты - RP0 и RP1
   7F3    1683     BCF 0x3, 0x6; эти две команды выбирают активным Bank1 - в нём живут TRISx
...
8:                 TRISB = 0b00000001;
   7F6    3001     MOVLW 0x1; загрузить в W 0x01
   7F7    0086     MOVWF 0x6; и отправить W в TRISB

0b00000001 == 0x01 == 1. Вы упорно назначаете входом RB0, а не RB7.
Вас спасёт "TRISB = 0b10000000;" (или 0x80, 128, 0200 - выбирайте. При случае почитайте и о представлении констант в С).

В Вашем огрызке листинга нет куска собственно "RB4 = RB7;". Если снизойдёте до посмотреть в ассемблере, смотрите во View->Program Memory.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- loghir   Не работает передача состояния линии из одного порта в другой (pic16f72)   May 2 2011, 11:32
- - sargein   в конфигурации стоит LVPDIS? даташит качать лень, ...   May 2 2011, 12:40
- - xemul   Цитата(loghir @ May 2 2011, 15:32) Не раб...   May 2 2011, 17:24
|- - ar__systems   Цитата(xemul @ May 2 2011, 12:24) Полагаю...   May 3 2011, 13:33
- - loghir   Цитатав конфигурации стоит LVPDIS? такого бита кон...   May 3 2011, 13:46
|- - ar__systems   Цитата(loghir @ May 3 2011, 08:46) такого...   May 3 2011, 14:49
- - sargein   Цитата(loghir @ May 2 2011, 14:32) (Прогр...   May 3 2011, 15:09
- - loghir   ЦитатаОткройте disassembly listing в MPLAB IDE. Во...   May 3 2011, 15:45
|- - ar__systems   Цитата(loghir @ May 3 2011, 10:45) 15: ...   May 3 2011, 15:54
|- - xemul   Цитата(loghir @ May 3 2011, 19:45) Похоже...   May 3 2011, 18:14
- - sargein   ошибся по поводу компилятора, сообщение можно удал...   May 3 2011, 16:45
- - loghir   ЦитатаНе понял - это что, все? Еще 6 строк потерян...   May 3 2011, 18:54
|- - xemul   Цитата(loghir @ May 3 2011, 22:54) а поче...   May 3 2011, 19:08
|- - loghir   Цитата(xemul @ May 3 2011, 22:08) Проверя...   May 4 2011, 08:38
|- - xemul   Цитата(loghir @ May 4 2011, 12:38) Записа...   May 4 2011, 08:44
- - sargein   Цитата(xemul @ May 3 2011, 22:08) В симул...   May 3 2011, 19:45
|- - xemul   Цитата(sargein @ May 3 2011, 23:45) тольк...   May 3 2011, 20:12
- - loghir   ЦитатаОдноцветно. Если бы все было так "одноц...   May 4 2011, 15:52
|- - xemul   Цитата(loghir @ May 4 2011, 19:52) Если б...   May 4 2011, 18:08
- - loghir   xemul КодRB4 = !RB7; действительно передает со...   May 5 2011, 14:41
|- - xemul   Цитата(loghir @ May 5 2011, 18:41) xemul ...   May 5 2011, 15:18
- - loghir   ЦитатаСпасибо, но надеюсь, что меня так не угоразд...   May 9 2011, 05:36
|- - xemul   Цитата(loghir @ May 9 2011, 09:36) насчет...   May 9 2011, 10:44
- - loghir   ЦитатаBrownOutReset Disabled у меня просто нет так...   May 9 2011, 13:55


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 06:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016