| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| 16F716 и много въпроси http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11826 |
Страница 1 от 1 |
| Автор: | Hardest [ Сря Окт 16, 2013 10:38 pm ] |
| Заглавие: | 16F716 и много въпроси |
Здравейте, цял слетобед четох форума а и продължавам защото... днес ми беше първият час по практика в университета - уча в ТУ 4ти курс Електроника специализация ЕСКУ. От 4 години на сам това нещо ми се струва най-интересното и смислено в университета, но това не е тема на темата ми. 1во в лабораторията полазваме PICkit2 със PIC16F716, ili PIC16F84A по избор, до колкото четох по дата шийтс нема голяма разлика. Така, в университета си имаме програматори и все, обаче в къщи имам само 1 MPLAB и съотвения симулатор на лаба... уви от днес след практиката си търся програматор list p=16f716 __config h'fffb' include p16f716.inc Numb equ 20 Flags equ 21 Inds equ 22 PortAm equ 23 Segm equ 24 OffInd equ b'1111' OffSeg equ h'ff' org h'00' Reset call IniPic call ClrRAM Main movlw b'11111110' movwf PORTB movlw b'1110' movwf PORTA call T_us movlw b'11111101' movwf PORTB movlw b'1101' movwf PORTA call T_us movlw b'11111011' movwf PORTB movlw b'1011' movwf PORTA call T_us movlw b'11110111' movwf PORTB movlw b'0111' movwf PORTA call T_us goto Main ;Subroutines IniPic movlw b'10000' tris PORTA movlw OffInd movwf PORTA movlw b'00000000' tris PORTB movlw OffSeg movwf PORTB movlw b'11010010' option return ClrRAM movlw Flags movlw FSR movlw d'20' movwf Numb Clr1 clrf INDF incf FSR decfsz Numb goto Clr1 return T_us movlw 6 movwf Numb T_01 decfsz Numb goto T_01 return END Този код, сега когато го билднахме в лабораторията всичко си беше ок, аз въудушевен да разбера кое какво прави и как го прави го пуснах на MPLAB SIM ии от тогава -> core-e0001 stack overflow error occurred до колкото изрових от микрочип обяснение: your code has a stack overflow. You're either calling a function and not returning from it correctly, or enabling interrupts without returning from the ISR correctly. Гледах гледах и пак гледах и, ако някой може да адвайзне къде бъркам Ази, защото пак ми казва ... stack overflow :/ Офтопик, не съм напълно нов в програимрането, но съм по нов от най-новия в микроконтролерите, от асемблер имам опит от мейнфрейм машините с които работя, но това тук с микрокотролерите е съмвсем друга бира, бира която ми харесва Поизчетох куп работи и мисля че PIC е за мен като за начало, ще видя в асемблерски среди какво мога да направя и да се самонауча на това чудо на технологията Meanwhile ако имате някакви съвети стреляйте всичко приемам! |
|
| Автор: | palavrov [ Сря Окт 16, 2013 11:21 pm ] | |||||||||
| Заглавие: | Re: 16F716 и много въпроси | |||||||||
WTF?! |
||||||||||
| Автор: | Hardest [ Сря Окт 16, 2013 11:31 pm ] | ||||||||||||||||||
| Заглавие: | Re: 16F716 и много въпроси | ||||||||||||||||||
http://en.wikipedia.org/wiki/Mainframe_computer OS360/OS390/zOS - IBM технология Коментара ти ироничен ли е ? По темата, PIC Mикрокотролери на МК част 2 на някой да му се намира ? имам част 1 която почти изчетох.... |
|||||||||||||||||||
| Автор: | palavrov [ Чет Окт 17, 2013 10:57 am ] |
| Заглавие: | Re: 16F716 и много въпроси |
По темата: имай в предвид че ПИКовете са с доста ограничен стек, ако ти е трудно да си разбереш програмата, дебъгвай стъпка по стъпка в симулатора и гледай как се използва стека - в един момент ще ти светне къде е грешката. По оффтопика: да имаш опит с асемблер за мейнфрейм ми идва малко странно ... опит значи да си писал работещи програми, при това доста ... да си чул или чел, че има такова нещо не бих го нарекъл опит |
|
| Автор: | stefan63 [ Чет Окт 17, 2013 11:17 am ] | |||||||||
| Заглавие: | Re: 16F716 и много въпроси | |||||||||
Тоз ПИК не съм го борил, по далеч от 12f509 не съм стигнал, ама ми изглежда нечитаво ,че FSR сякаш остава незареден. IBM 360 ....имам едни книги за асемблера им. Купувах ги по соца, кога бях студент и мислех , че може да ми трябват. Интересно, че в ТУ още се занимават с тях. За Пентагона ли подготвят кадри? Колко такива машини има в БГ? |
||||||||||
| Автор: | stefan63 [ Чет Окт 17, 2013 11:28 am ] |
| Заглавие: | Re: 16F716 и много въпроси |
Тази книга , дето я четеш за ПИК да не те вкара в заблуждения. Ако е за 16/32 бита - ще ти дойде тежка навярно. Ако е за 8 битовите , може да те обърка ,че контролерите трябва да приличат на 12c508. Има и процесори с повечко инструкции - мислени са по друго време от други хора - та тез с многото инструкциите са една идея по-близо до мисленето на човека,особено студент. Има си книги с по-общ профил. От една руска книжка съм запомнил, че процесорите могат 3 неща - да четат, да пишат и да прекъсват ...останалото е от тебе. Това в книжката за ПИК пише ли го? |
|
| Автор: | CarBeta [ Чет Окт 17, 2013 11:40 am ] |
| Заглавие: | Re: 16F716 и много въпроси |
Проблема е в подпрограмата ClrRAM и по-точно в movlw FSR, вместо movWF FSR. По тоя начин в FSR не се зарежда адрес за нулиране и стойността му си остава 0х00. С първия цикъл на подпрограмата се нулира адрес 0х0000(INDF), с втория цикъл се нулира адрес 0х0001(TMR0) и с третия цикъл се нулира адрес 0х0002(PCL), което връща изпълнението на програмата на ORG 0х00000 т.е. в началото. След 8 връщания стека се препълва. По принцип това не е много правилен начин за изчистване на рама. Не е нужно да се заема регистър за да се следи до къде е стигнал брояча. |
|
| Автор: | Hardest [ Чет Окт 17, 2013 1:45 pm ] | |||||||||||||||||||||||||||
| Заглавие: | Re: 16F716 и много въпроси | |||||||||||||||||||||||||||
С 'разбирането' като четене на програмата почти нямам проблем, като проблем ми прави точно това чистене на РАМ не съм свикнал с такова чудо конкретно, а колко е да се научат ~40 инструкцийки за Pic-че. До опита с MF асемблера - работещи STC-та, automation макрота, и конкретни дефиниции на сторидж към процесор от системата, не е много (като се има в предвид системните програмъри какво правят) но е доста и е бая различно от микроконтрелер
В ТУ не се занимават с това, такова работя, пентагона таман си изхвърлиха всички такива подобни системи
тук УЖ пробвах индиректна адресация ама май не съм го доизкусорил. Книгата е PIC16 Микроконтролер, на млад конструктор 1ва и 2ра част, взех ги от библиотеката на университета. 8битова трябва да Благодаря за отговорите и имам и следващ въпрос. Искам да пробвам да променя периода на обновяване на индикацията. Не искам да пипам WDT затова пробвах така: CountInt equ 2c ** bcf IntCon,2 decfsz CountInt goto EndInt movlw, 5 movwf CountInt movlw OffInd movwf PortA movwf Dig1 *** "Идеята' ми е - променя се стойността на CountInt -> променя се честотата на смяната на индикация, но може ли да стане 'програмно' примерно да добавя един регистър който да задава честотата за смяна ? Този регистър да се променя в мейна или при натискане на бутон. Та идейка можете ли да додадете |
||||||||||||||||||||||||||||
| Автор: | stefan63 [ Чет Окт 17, 2013 2:01 pm ] |
| Заглавие: | Re: 16F716 и много въпроси |
Всичко може... Не ми е ясно за каква индикация пишеш, но това няма значение. И Уйндоус така работи - процесора чете от едно място , пише на друго място, прекъсва като стане нещо - например мръднеш мишката - И задължително прекъсва на всеки няколко милисекунди. Е - и на тебе първата ти работа е да имплементираш концепцията за системен таймер. От там нататък - кеф ти индикация, кеф ти бутони, кеф ти музика - ако прекъсваш на всеки 100..200 микросекунди и между две такива прекъсвания успяваш да изработиш следващото от мелодията ниво към слушалките. |
|
| Автор: | Hardest [ Чет Окт 17, 2013 2:13 pm ] | |||||||||
| Заглавие: | Re: 16F716 и много въпроси | |||||||||
Индикация - само в лабораторията, аз ще си имам когато ми дойде всичко бредборда със сите диоди / жици и чипа който поръчах днес Сега го карам на watch - registers и SFRs през МПЛАБ-а та така май го направих |
||||||||||
| Автор: | stefan63 [ Чет Окт 17, 2013 3:21 pm ] |
| Заглавие: | Re: 16F716 и много въпроси |
системен таймер направи ли? |
|
| Автор: | Hardest [ Чет Окт 17, 2013 3:51 pm ] |
| Заглавие: | Re: 16F716 и много въпроси |
Не, доста се пооплетох в това нящо |
|
| Автор: | stefan63 [ Чет Окт 17, 2013 4:07 pm ] |
| Заглавие: | Re: 16F716 и много въпроси |
Имаш 2-3 апаратни таймера в твоя процесор. Единият го заделяш за системен таймер- ще ти цъка (ПРЕКЪСВА) на период , какъвто му програмираш ТИ при инициализацията на чипа. Щом ще те прекъсва - трябва да имаш ISR (прекъсване обслужваща подпрограма). Тя евентуално презарежда таймера ( ако няма подходящ режим с автоматично презареждане), изчиства хардуерния флаг за прекъсване - ако е необходимо за конкретния таймер и конкретния процесор, вдига ТВОЙ флаг "Hardest_току_що_пак_имаше_прекъсване_от_таймера" и излиза от прекъсване. В главния цикъл следиш тоя флаг. Като го видиш светнат - гасиш го и си правиш сметка колко време е изтекло. Например ако нагласиш таймера да прекъсва 100 пъти в секунда и на всяко светване на флага увеличаваш брояч - когато стигне стойност 100 - значи е минал една секунда и можеш да си запалиш следващото светодиодче. Броячът ще го нулираш де... Значи - хардуер(таймер). прекъсване , флаг, проверка на флага,вземане на решение. Долу горе това правят повечето програми |
|
| Автор: | Hardest [ Чет Окт 17, 2013 4:18 pm ] |
| Заглавие: | Re: 16F716 и много въпроси |
Хохо колко играчка ще има |
|
| Автор: | didofen [ Пет Окт 18, 2013 8:58 am ] |
| Заглавие: | Re: 16F716 и много въпроси |
ако е динамична индикацийката, 1 секунда си е множко |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|