|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 1:29 pm
| Автор |
Съобщение |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Пикльовци - съвети
Ето два съвета по проблеми които са ми загубили доста време с пикльовците:
1. Тези пикове които има компаратор, след Reset по подразбиране правят прилежащите пинове да обслужват тази функция. Това значи че даже и да бъзикате TRIS/PORT/LAT регистрите тези пинове може и да не работят коректно. Ако няма да ползвате компаратора - изключете го веднага след Reseta. Такъв проблем съм имал с мъниците (12F).
2. Средно големите пикове (напр. 18F452) имат един такъв модул - PSP. Когато е включен тоя модул арбитрира порт D. Аз лично разумно приложение не съм му открил. По подразбиране е спрян (което е добре). Великата тъпотия е че включването/изключването на тоя модул става с бит който е в регистъра ???TRISE???. Много на място нали. Идиотското е че точно тоя процесор физически има само 3 I/O-та на порт Е и пичовете решили че останалите свободни битове в TRISE, могат да служат за друго - т.е за PSP модула. Нищо лошо, ама някой индивиди като мен, имат навика да правят по подразбиране пиновете които физически не съществуват - входове. Т.е RA6,RA7, RE3+ аз по подразбиране им пиша 1 в TRIS-a. Е съответно тъпия модул се включва и порт D ми става недостъпен. Седя аз и се пуля, всички регистри обикалям, ама кой да се сети да гледа в TRIS регистъра на съседния порт.
Да не губите време. Аз хем съм се блъскал в тая стена, днес пак утепах час по втория проблем.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Съб Апр 16, 2005 1:19 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Пон Яну 30, 2012 4:14 am, променена общо 1 път
|
| Съб Апр 16, 2005 1:34 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Нищо ново под слънцето. Особено при пилкльовците се среща често нещата да не са реализирани по интуитивен начин. Аз поне редовно си дописвам пдф-овете на пиковете с които работя. Добре че го има proteus че бързо да се изхващат такива проблеми.
|
| Съб Апр 16, 2005 1:56 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Темата е полезна  .
Абсолютно задължително, защото и аз се въртях на шиш  .
Затова сега си имам три програматора  .
|
| Съб Апр 16, 2005 6:25 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Пон Яну 30, 2012 4:14 am, променена общо 1 път
|
| Съб Апр 16, 2005 10:53 pm |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
По мое скромно мнение е наистина "що годе" - подобно на книгата на "МК". Ако човек се сблъсква за първи път с контролер и не знае що е процесор, ще успее да накара някой светодиод да мига.
Ако обаче иска да направи устройство, което наистина да върши нещо трябва да забрави за тези книги, а да се запознае подробно с асемблера и след няколко работещи програми да премине към С.
В тази връзка, дай някакъв линк към подобно ръководство за С.
|
| Нед Апр 17, 2005 8:48 am |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Много интересна тема...тук ще се изпише доста  Няколко неща които научих от опит...
1. Голяма главоблъсканица със прекъсванията - например в 18F452 на 20MHz съм написал "bcf GIE", обаче проверявам след 2-3 инструкции, тоя флаг пак си е горе!!! Мой колега ( gnm_soft  ) предложи интересна идея  Адски тъпо...обаче работи.
2. Голям проблем с I2C периферията (по-точно с MSSP-тo) - има някаква тъпа хардуерна връзка нейде из пикльото... Като включа I2C шината, RC5 (в моя случай го ползвах за Enable/Disable на RS485) става неизползваем...не мога да пиша и чета от него, независимо какво пиша в TRISC, LATC или PORTC!!!
Имат и още много изцепки, за които ме домързява да пиша... И тва всичкото си е губене на време...
|
| Нед Апр 17, 2005 3:07 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Пон Яну 30, 2012 4:15 am, променена общо 1 път
|
| Нед Апр 17, 2005 3:33 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
Говоря за MSSP на PIC16F877A и PIC18F452 (абсолютно еднакъв АСМ код и за двата). Нямам спомен как точно го бях написал, но при Маster I2C, RC5 ми зависва... Доста време ми отне да разбера че проблема е там. Явно има някакъв гаф с превключването на I2C и SPI 
|
| Нед Апр 17, 2005 4:49 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Пон Яну 30, 2012 4:16 am, променена общо 1 път
|
| Нед Апр 17, 2005 5:29 pm |
|
 |
|
Lino
Ранг: Минаващ
Регистриран на: Чет Мар 10, 2005 11:43 am Мнения: 58
|
 PIC advice
Накои неща които описвате не са бъгове, а са следствие от организацията на самия чип и са добре описани от Microchip.
Липсата на реакция при bcf GIE не е BUG .
Просто нулирането на този бит не може да спре веднага активирано прекъсване след тази инструкция. Бита се нулира но за да блокира
прекъсването е необходимо още време за реакция на процесора след инструкцията.Ако следващия цикъл (след bcf GIE) е преход към прекъсване то не може да бъде спряно. Прекъсването завършва с
RETFIE, което връща GIE в 1. Затова bcf GIE остава без
реакция и е необходимо да се използва:
do{GIE = 0}while{GIE=1}
Блокирането на премането при USART при препълване също не е BUG . Просто трябва да се проверява наличие на препълване,( което се прави нормално при всички други системи) и ако има препилване е необходимо да се нулира хардуера.
btfss RCSTA,OERR ; RC_OVERFLOW
goto GETCHAR
bcf RCSTA,CREN ; CLR HARDWARE
NOP
bsf RCSTA,CREN
Всичко това е описано и е особеност на хардуерната организация на чиповете им и според мен не трябва да ги квалифицираме като бъгове, а като специфични особености. 
|
| Пон Апр 18, 2005 8:13 am |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
...
Последна промяна ¶ на Пон Яну 30, 2012 4:17 am, променена общо 1 път
|
| Пон Апр 18, 2005 8:39 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Абе това с забраната на прекъсванията направо ме уби. Никога не съм забелязал подобен ефект. Веднага го пробвах и не мога да възпройзведа проблема (ICD2, код генериран от C18, 18F452). Значи имам си инструкция BCF 0xFF2, 0x7, ACCESS - работи си абсолютно коректно. Поне бита със сигурност се нулира веднага. Опитах и с точка на прекъсване в следващата инструкция - когато спра там, бита вече е нула. 20 инструкции след това не е мръднал. Как го правите това, да не се нулира коректно? Бита със сигурност мърда коректно според мен. А единствения начин след това да има некоректен резултат би бил ако прекъсването е започнало преди инструкцията за нулиране на бита. Заради латентноста на прекъсването то се активира 2 инструкции след настъпването му. Ако една от тези две инструкции е въпросното нулиране на бита, най-вероятно ще се активира прекъсване въпреки това. Тогава теоретично може и да възникне въпросния проблем - тъй като пика ще вдигне бита на излизане от прекъсването. Но тогава и вашия while цикъл не е 100% решение.
P.S. Сега се порових в документацията. Излиза че и предположението ми за възникнало прекъсване непосредствено преди забраната не би следвало да е проблем, тъй като при възникване на прекъсване, ядрото наистина изпълнява още две инструкции, но те са симулирани Nop(), следователно след излизане от прекъсването бита би следвало да се нулира от инструкцията за нулиране която ще се изпълни коректно след прекъсването.
Вие говорите че все пак въпросния проблем е упоменат някъде в документацията на Микрочип. Насочете ме.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Апр 18, 2005 10:42 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
А за препълването на UART-a, също не мога да ти възпройзведа проблема - за да го пробвам - препълвам UART-a. Детектирам грешката - изчитам буферите, рисетвам модула през CREN бита и след това пак започвам да приемам данни. Няма проблем. Е не ползвам 9 бит. И процесора е 18F452. Но проблем с успиване на UART-a, нямам. В интерес на истината съм правил доста устройства със RS232 комуникация, препълването на UART-а съм го виждал много пъти при разработката, но никога не съм имал случай процесора да ми умира след това, и да не мога да възобновя комуникацията. Може би не попадам в точно същите условия като теб.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Апр 18, 2005 11:15 am |
|
 |
|
elektronchika
Ранг: Популярен
Регистриран на: Пет Ное 26, 2004 9:50 pm Мнения: 374
|
|
| Пон Апр 18, 2005 11:23 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|