Форум Микро-Чип

Форум Микро-Чип (http://www.microchip.su/index.php)
-   Вопросы начинающих (http://www.microchip.su/forumdisplay.php?f=14)
-   -   Как читать Даташит? Pic16f1847 не работает нога на вход. (http://www.microchip.su/showthread.php?t=18093)

Zombie47 19.06.2017 19:46

Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Вообщем есть у меня платка с МК pic16f819, код накодил все работает. Но перестало хватать места и нашел pic16f1847 с местом побольше, чтобы платку не переделывать.
Начал вспоминать программирование, что то работает что то нет, вообщем весь день убил на то чтобы заставить работать. Не работает нога на вход.
Как вообще работать с даташитом? Куда смотреть? Вот у меня есть проблема, не работает нога на вход, ну логически думаю дай посмотрю PIN ALLOCATION TABLE
типо как нога может быть задействована, смотрю в книгу вижу фигу =(

PHP код:


void init
(void)
 {
//регистры относящиеся к TMR0
CPSCON0 0b00000001//page 323
OPTION_REG 0b10000000//page 175
TMR0 0//сбрасываем таймер в 0  page 173
TRISA 0b00001001//все порты RA на выход. кроме RA0  RA3 они на вход
//

//регистры относящиеся к TMR1
ANSELB 0b00000000;    //page 127 //все порты RB цифровые
CCP1CON 0b00000100//page 226 //выбор режима, захват сравнение или шим
PIE1 0b00000101;//page 89 //разрешение прерываний
PIR1 0b00000000;  //page 93    //interrupt is pending
PORTB 0b00000000//page 126
TMR1L=0;  //обнуляем значение таймера
TMR1H=0;
TRISB 0b00001000// RB3 на вход для модуля захвата CCP
T1CON 0b01011101;   //page 185
T1GCON 0b00000000;  //page 186
//

//регистры которые имеют отношения ко многому
INTCON 0b11101000//page 88
//
}

void main(){

  
init(); //вызывается функция init
  
Delay_ms(1000);
  
RA2_bit=1;
  
Delay_ms(1000);
  
RA2_bit=0;

  while(
1)
  {
  if (
RA0_bit==1){
                 
RA2_bit=1;  //поджигаем светодиод
                 
}
 if (
RA0_bit==0){
                 
RA2_bit=0;
                 }

  } 
//скобка while 1
}// скобка main 

Конфигурация вот такая:
https://pp.userapi.com/c638324/v6383...6LWLWgBiyg.jpg
https://pp.userapi.com/c638324/v6383...PklvyGBdy0.jpg
Среда MicroC
Даташит Pic16f1847

Ученый 19.06.2017 21:49

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Если речь идет о RA0, то:
Из PIN ALLOCATION TABLE видно, что ножка имеет еще и функцию аналогового входа. Из раздела PORTA Registers выясняем, какие регистры
имеют отношение к PORTA и как оно должны быть сконфигурированы.

Zombie47 20.06.2017 00:50

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Ученый (Сообщение 232846)
Если речь идет о RA0, то:
Из PIN ALLOCATION TABLE видно, что ножка имеет еще и функцию аналогового входа. Из раздела PORTA Registers выясняем, какие регистры
имеют отношение к PORTA и как оно должны быть сконфигурированы.

Вот блин спасибо огромное, чую будут еще вопросы, стараюсь вопросы задавать не как сделать, а как думать=)
Порты Б сконфигурировал как цифровые а про А забыл
ANSELA = 0b00000000; //page 122 //конфигурируем порты А как цифровые
PORTA = 0b00000000; //page 120 //сбрасываем значение ног в 0
вот так заработало.

Zombie47 20.06.2017 01:41

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Вот блин. теперь перестал работать вот этот код:
PHP код:

void main(){
  
init();
  
Delay_ms(1000);
  
RA2_bit=1;
  
Delay_ms(1000);
  
RA2_bit=0;
  
  while(
1)
  {........ 

Ну задержка, потом загорается светодиод на RA2 потом горит 1 сек и тухнет.
теперь он тупо моргает дай бог на 0.02 сек еле еле тускло. как будто что то переполняется или хз.
Комментирую те две строчки и все ок как было.

Ученый 20.06.2017 11:58

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Может и не в этом дело, но:
чтобы не было непредсказуемых эффектов от RMW (чтение-модификация-запись) надо читать из PORTx, писать в LATx.

Zombie47 20.06.2017 13:10

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Ученый (Сообщение 232857)
Может и не в этом дело, но:
чтобы не было непредсказуемых эффектов от RMW (чтение-модификация-запись) надо читать из PORTx, писать в LATx.

Да вчера обратил внимание на этот регистр LAT , его в том пике не было.
Если у меня порт RA_0 настроен на вход (TRISA = 0b00000001;) и является цифровым (ANSELA = 0b00000000;), что я делаю записью PORTA = 0b00000000; ?
Если нога настроена на выход то понятное дело я задаю ей низкий уровень.
Но если нога настроена на вход то уровень задает ей моя физическая подтяжка на плате резистором либо к земле либо к +5 вольтам.

Zombie47 20.06.2017 20:28

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Странно как только прописываю это //ANSELA = 0b00000000; //page 122
перестает работать вот этот код как писал выше:
Delay_ms(1000);
RA2_bit=1; //поджигает светодиод
Delay_ms(1000);
RA2_bit=0; //тушит светодиод.
Светодиод почему то не тушиться.

Zombie47 20.06.2017 21:59

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Немного не понимаю вот этой таблички, это приоритет портов.
Тоесть если я хочу чтобы RB2 работал как вход выход мне надо отключить чтобы он не был по умолчанию SDA2, потом TX/CK, потом RX/DT, SDO1 и только тогда когда все отключу он будет как порт ввода вывода?
https://pp.userapi.com/c638325/v6383...zYQ3JVFFuM.jpg

Zombie47 21.06.2017 11:06

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
почему у меня вот такая запись работает:
if (LATA0_bit==1){ RA2_bit=1; }
if (LATA0_bit==0){RA2_bit=0; }

такая работает
if (RA0_bit==1){ RA2_bit=1; }
if (RA0_bit==0){RA2_bit=0; }

такая работает
if (RA0_bit==0 && memEco==0) {RA2_bit=1;memEco=1;}
if (RA0_bit==0 && memEco==1) {RA2_bit=0;memEco=0;}

а такая НЕТ:
if (LATA0_bit==0 && memEco==0) {RA2_bit=1;memEco=1;}
if (LATA0_bit==0 && memEco==1) {RA2_bit=0;memEco=0;}

не понимаю смысла защелок LATA
Или LATA для записи а не для чтения?=))))

Ученый 21.06.2017 11:13

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Приоритет вступает в силу, когда разрешены альтернативные функции порта. За это отвечают регистры APFCONх, по умолчанию там все 0.
Цитата:

Если у меня порт RA_0 настроен на вход (TRISA = 0b00000001 и является цифровым (ANSELA = 0b00000000, что я делаю записью PORTA = 0b00000000; ?
См. раздел 12.0, там все написано и нарисовано. Про RMW - здесь:
http://www.microchip.com/forums/m478014.aspx

Марк 21.06.2017 16:25

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Zombie47 (Сообщение 232882)
не понимаю смысла защелок LATA
Или LATA для записи а не для чтения?=))))

LATх - это защелка выходного порта. Значит читать там можно лишь то, что туда записали. Как в обычном регистре. Прочитать пин через LATх невозможно. Пин читается только через PORTх.
Сиречь, если вывести в LAT высокий уровень и закоротить ножку на землю, то с LAT будет читаться 1, а с PORT той же ноги - 0. Между выходом защелки и пином находится БУФЕР. Потому и такой эффект.

Марк 21.06.2017 16:28

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Ученый (Сообщение 232884)
Про RMW - здесь

В данном случае RMW не причем.

Zombie47 21.06.2017 16:36

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Марк (Сообщение 232887)
LATх - это защелка выходного порта. Значит читать там можно лишь то, что туда записали. Как в обычном регистре. Прочитать пин через LATх невозможно. Пин читается только через PORTх.
Сиречь, если вывести в LAT высокий уровень и закоротить ножку на землю, то с LAT будет читаться 1, а с PORT той же ноги - 0. Между выходом защелки и пином находится БУФЕР. Потому и такой эффект.

Спасибо более менее понятно =) а LAT меняет свое положение токо программно получается?

Zombie47 21.06.2017 16:42

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Сейчас столкнулся с тем что не могу включить модуль SPI на новом проце. Начал разбираться выяснил что проц виснет если включаю разрешение прерываний от перифирийных устройств. Начал разбираться дальше выяснил что виснет проц если включаю разрешения прерываний от TMR1IE и от SSP1IE

Пока не понял как включить SPI модуль.
И еще, чтобы понять включился спи модуль или нет я поставил в коде отслеживание положение ноги SPI SS а именно вот так
Код:

if (RB5==0) {LATA2_bit=1;}
Как только нога поменяет свое положение зажгу светодиод. Эта нога при приеме передаче должна дергаться поэтому хоть как то будет мерцать светодиод. Правильно ли я сделал?

Попытался сконфигурировать SPI модуль вот так:
APFCON0 = 0b00000000; //page 118

А так же судорожно вставляю в инициализации
PORTA = 0b00000000;
PORTB = 0b00000000;
чтобы порты обнулить. хз зачем глюки как то были.

Так же попробывал настроить правильные направления портов
TRISA = 0b00001001;
TRISB = 0b00001010; //RB1 на вход (SDI) , RB2 на выход (SDO), RB5 на выход (SS)

Марк 21.06.2017 16:47

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Zombie47 (Сообщение 232889)
Спасибо более менее понятно =) а LAT меняет свое положение токо программно получается?

Да.
По второму сообщению.
Вы понимаете назначение ноги SS?

Zombie47 21.06.2017 17:04

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Марк (Сообщение 232891)
Да.
По второму сообщению.
Вы понимаете назначение ноги SS?

Назначение понимаю названия не помню =))) знаю есть нога выбора чипа а есть нога тактирования, я хотел отслеживать ногу тактирования видимо ошибся раз вы поправили.

Zombie47 21.06.2017 17:06

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Вот блин везде пищут про LATA защелка в гугле а нигде не написать было элементарно что LATA меняет свое положение только програмно а PORTA меняет свое положение и програмно и физически=)

Марк 21.06.2017 17:18

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Zombie47 (Сообщение 232892)
Назначение понимаю названия не помню =))) знаю есть нога выбора чипа а есть нога тактирования, я хотел отслеживать ногу тактирования видимо ошибся раз вы поправили.

Нога тактирования называется SCK, а нога SS - это ВХОД слейв селект. То есть управление подключением передатчика слейва к линии и в режиме мастера НЕ ИСПОЛЬЗУЕТСЯ. Вы бы даташит открыли, что ли...

Ученый 21.06.2017 17:30

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Марк (Сообщение 232888)
В данном случае RMW ни при чем.

Почему же, LATx регистры как раз и появились, чтобы снять проблему RMW - что пишем, то и читаем без влияния напряжения на выходном пине.
Цитата:

The Data Latch (LATx registers) is useful for
read-modify-write operations on the value that the I/O
pins are driving

Zombie47 21.06.2017 17:35

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Марк (Сообщение 232894)
Нога тактирования называется SCK, а нога SS - это ВХОД слейв селект. То есть управление подключением передатчика слейва к линии и в режиме мастера НЕ ИСПОЛЬЗУЕТСЯ. Вы бы даташит открыли, что ли...

чет я уже подзабыл видимо про SPI . если нога не используется как микруха поймет что ей передача? мне же надо уровень на ноге поменять на мастере, чтобы шлейв микруха поняла что с ней буду общаться.

Марк 21.06.2017 17:35

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Ученый (Сообщение 232895)
LATx регистры как раз и появились, чтобы снять проблему RMW

Только вопрос появления LAT не обсуждался. Поэтому и ни причем.
ТС пытался читать вход с LAT. Причем же тут RMW?

Марк 21.06.2017 17:45

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Zombie47 (Сообщение 232896)
чет я уже подзабыл видимо про SPI . если нога не используется как микруха поймет что ей передача? мне же надо уровень на ноге поменять на мастере, чтобы шлейв микруха поняла что с ней буду общаться.

Вообще то при соединении точка-точка слейву не требуется ничего узнавать. SS используется для управления соединением звездой.
То есть образуется КОЛЬЦО из двух сдвиговых регистров. Один у мастера, а другой у слейва. Клоки для сдвига генерирует мастер. При этой схеме более ничего не требуется.
Единственно что нужно дополнительно, это СТРОБ защелкивания данных ДЛЯ СЛЕЙВА, чтобы фиксировать в нем завершение приема. Но это просто обычный выход, который дергают сообразно протоколу слейва.

Ученый 21.06.2017 18:07

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Марк (Сообщение 232897)
Только вопрос появления LAT не обсуждался. Поэтому и ни при чем.
ТС пытался читать вход с LAT. При чем же тут RMW?

В разделе 12.0, который я рекомендовал почитать, написано про LAT и упоминается RMW. Для облегчения жизни ТС дал ссылку. Не вижу криминала.
Пустой спор, закрываем.

Zombie47 21.06.2017 18:32

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Так как заставить работать аппаратный модуль SPI на МК pic16f1847
для того чтобы понять работает он или нет поставил слежение за ногой SCK SCL
если будет 0 то зажгет светодиод.
Для того чтобы понять что МК стартует, поставил моргание светодиодом в начале.
Как настроить SPI? Все регистры по нему шерстить или что?
Среда MicroC
Код:

void InitMain() {

  ANSELB = 0b00000000;    //page 127 //все порты RB цифровые
  ANSELA = 0b00000000;
  TRISA = 0b00111001;
  TRISB = 0b00001010;
  APFCON0 = 0b00000000; //page 118
  INTCON = 0b11000000; //page 88
  PIE1 = 0b00001010;//page 89 //разрешение прерываний
  SPI1_Init();    //инициализация SPI по дефолту

}

void main() {
  InitMain();                            // инициализация МК ног и тд
  Delay_ms(100);
  LATA2_bit=1;
  Delay_ms(100);
  LATA2_bit=0;
  Delay_ms(100);
  LATA2_bit=1;
  Delay_ms(100);
  LATA2_bit=0;
  Delay_ms(100);
  LATA2_bit=1;
  Delay_ms(100);
  LATA2_bit=0;
 
 while (1) {
SPI1_Write(10);
 if (RB4==0) {LATA2_bit=1;} //если на аппаратной ноге SCK/SCL появится 0 то поджигаем светодиод
 }
}


Ученый 21.06.2017 19:21

Re: Как читать Даташит? Pic16f1847 не работает нога на вход.
 
Цитата:

Сообщение от Zombie47 (Сообщение 232900)
Как настроить SPI? Все регистры по нему шерстить или что?

Их "Всех" всего-то 2. Для запуска в первом приближении достаточно SSPxCON, и "шерстить" его надо обязательно и внимательно.
Читай про SSPEN и SSPM<3:0>, остальное это диагностика и настройка кучи режимов.
С прерываниями пока не связывайся, будут конкретные вопросы - ответим.


Часовой пояс GMT +3, время: 09:23.

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot