![]() |
|
|
Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Вообщем есть у меня платка с МК pic16f819, код накодил все работает. Но перестало хватать места и нашел pic16f1847 с местом побольше, чтобы платку не переделывать.
Начал вспоминать программирование, что то работает что то нет, вообщем весь день убил на то чтобы заставить работать. Не работает нога на вход. Как вообще работать с даташитом? Куда смотреть? Вот у меня есть проблема, не работает нога на вход, ну логически думаю дай посмотрю PIN ALLOCATION TABLE типо как нога может быть задействована, смотрю в книгу вижу фигу =( PHP код:
![]() ![]() Среда MicroC Даташит Pic16f1847 |
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Если речь идет о RA0, то:
Из PIN ALLOCATION TABLE видно, что ножка имеет еще и функцию аналогового входа. Из раздела PORTA Registers выясняем, какие регистры имеют отношение к PORTA и как оно должны быть сконфигурированы.
__________________
Не знать - не стыдно, стыдно не учиться. |
![]() |
![]() |
![]() |
#3 | |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]() Цитата:
Порты Б сконфигурировал как цифровые а про А забыл ANSELA = 0b00000000; //page 122 //конфигурируем порты А как цифровые PORTA = 0b00000000; //page 120 //сбрасываем значение ног в 0 вот так заработало. |
|
![]() |
![]() |
![]() |
#4 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Вот блин. теперь перестал работать вот этот код:
PHP код:
теперь он тупо моргает дай бог на 0.02 сек еле еле тускло. как будто что то переполняется или хз. Комментирую те две строчки и все ок как было. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Может и не в этом дело, но:
чтобы не было непредсказуемых эффектов от RMW (чтение-модификация-запись) надо читать из PORTx, писать в LATx.
__________________
Не знать - не стыдно, стыдно не учиться. |
![]() |
![]() |
![]() |
#6 | |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]() Цитата:
Если у меня порт RA_0 настроен на вход (TRISA = 0b00000001 ![]() ![]() Если нога настроена на выход то понятное дело я задаю ей низкий уровень. Но если нога настроена на вход то уровень задает ей моя физическая подтяжка на плате резистором либо к земле либо к +5 вольтам. |
|
![]() |
![]() |
![]() |
#7 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Странно как только прописываю это //ANSELA = 0b00000000; //page 122
перестает работать вот этот код как писал выше: Delay_ms(1000); RA2_bit=1; //поджигает светодиод Delay_ms(1000); RA2_bit=0; //тушит светодиод. Светодиод почему то не тушиться. |
![]() |
![]() |
![]() |
#8 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Немного не понимаю вот этой таблички, это приоритет портов.
Тоесть если я хочу чтобы RB2 работал как вход выход мне надо отключить чтобы он не был по умолчанию SDA2, потом TX/CK, потом RX/DT, SDO1 и только тогда когда все отключу он будет как порт ввода вывода? ![]() |
![]() |
![]() |
![]() |
#9 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
почему у меня вот такая запись работает:
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 для записи а не для чтения?=)))) |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Приоритет вступает в силу, когда разрешены альтернативные функции порта. За это отвечают регистры APFCONх, по умолчанию там все 0.
Цитата:
http://www.microchip.com/forums/m478014.aspx
__________________
Не знать - не стыдно, стыдно не учиться. |
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Сиречь, если вывести в LAT высокий уровень и закоротить ножку на землю, то с LAT будет читаться 1, а с PORT той же ноги - 0. Между выходом защелки и пином находится БУФЕР. Потому и такой эффект. Последний раз редактировалось Марк; 21.06.2017 в 16:34. |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#13 | |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#14 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Сейчас столкнулся с тем что не могу включить модуль 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) Последний раз редактировалось Zombie47; 21.06.2017 в 16:47. |
![]() |
![]() |
![]() |
#15 |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#16 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]() |
![]() |
![]() |
![]() |
#17 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Вот блин везде пищут про LATA защелка в гугле а нигде не написать было элементарно что LATA меняет свое положение только програмно а PORTA меняет свое положение и програмно и физически=)
|
![]() |
![]() |
![]() |
#18 |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Нога тактирования называется SCK, а нога SS - это ВХОД слейв селект. То есть управление подключением передатчика слейва к линии и в режиме мастера НЕ ИСПОЛЬЗУЕТСЯ. Вы бы даташит открыли, что ли...
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Почему же, LATx регистры как раз и появились, чтобы снять проблему RMW - что пишем, то и читаем без влияния напряжения на выходном пине.
Цитата:
__________________
Не знать - не стыдно, стыдно не учиться. |
|
![]() |
![]() |
![]() |
#20 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
чет я уже подзабыл видимо про SPI . если нога не используется как микруха поймет что ей передача? мне же надо уровень на ноге поменять на мастере, чтобы шлейв микруха поняла что с ней буду общаться.
|
![]() |
![]() |
![]() |
#21 |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#22 | |
Senior Member
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,393
Вес репутации: 3250/98 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
То есть образуется КОЛЬЦО из двух сдвиговых регистров. Один у мастера, а другой у слейва. Клоки для сдвига генерирует мастер. При этой схеме более ничего не требуется. Единственно что нужно дополнительно, это СТРОБ защелкивания данных ДЛЯ СЛЕЙВА, чтобы фиксировать в нем завершение приема. Но это просто обычный выход, который дергают сообразно протоколу слейва. Последний раз редактировалось Марк; 21.06.2017 в 17:51. |
|
![]() |
![]() |
![]() |
#23 | |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Пустой спор, закрываем.
__________________
Не знать - не стыдно, стыдно не учиться. |
|
![]() |
![]() |
![]() |
#24 |
Member
Регистрация: 05.10.2015
Возраст: 31
Сообщений: 92
Вес репутации: 91/0 ![]() |
![]()
Так как заставить работать аппаратный модуль 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 то поджигаем светодиод } } |
![]() |
![]() |
![]() |
#25 |
Senior Member
Регистрация: 27.02.2007
Адрес: Москва
Возраст: 68
Сообщений: 585
Вес репутации: 1705/66 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Их "Всех" всего-то 2. Для запуска в первом приближении достаточно SSPxCON, и "шерстить" его надо обязательно и внимательно.
Читай про SSPEN и SSPM<3:0>, остальное это диагностика и настройка кучи режимов. С прерываниями пока не связывайся, будут конкретные вопросы - ответим.
__________________
Не знать - не стыдно, стыдно не учиться. |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
наше образование, или будущие ембеддеры - кто они... | Vlad&mir | Общетехнические вопросы | 357 | 13.01.2015 11:34 |
Не работают порты на вход?! | Серега | Вопросы начинающих | 25 | 09.05.2011 00:46 |
проблемка с PIC16F628A | bereg_ok | Продукция MICROCHIP | 72 | 07.09.2007 11:00 |
PIC18F8720 PORTA не работает на вход | Ilyxa | Продукция MICROCHIP | 5 | 29.03.2007 17:37 |