Отговори на тема  [ 15 мнения ] 
16F716 и много въпроси 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение 16F716 и много въпроси
Здравейте, цял слетобед четох форума а и продължавам защото... днес ми беше първият час по практика в университета - уча в ТУ 4ти курс Електроника специализация ЕСКУ.

От 4 години на сам това нещо ми се струва най-интересното и смислено в университета, но това не е тема на темата ми. 1во в лабораторията полазваме PICkit2 със PIC16F716, ili PIC16F84A по избор, до колкото четох по дата шийтс нема голяма разлика. Така, в университета си имаме програматори и все, обаче в къщи имам само 1 MPLAB и съотвения симулатор на лаба... уви от днес след практиката си търся програматор :mrgreen: изкопах схемите от сайт-а на микрочип и до преди 3 часа бях надъхан сам да запоявам - уви не ми е в природата запояването :? . Основното което правихме в часа е да 'изследваме'

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 е за мен като за начало, ще видя в асемблерски среди какво мога да направя и да се самонауча на това чудо на технологията :D

Meanwhile ако имате някакви съвети стреляйте всичко приемам!


Сря Окт 16, 2013 10:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: 16F716 и много въпроси
Hardest написа:
... мейнфрейм машините ...

WTF?!

_________________
Мразя да мразя ...


Сря Окт 16, 2013 11:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: 16F716 и много въпроси
palavrov написа:
Hardest написа:
... мейнфрейм машините ...

WTF?!



http://en.wikipedia.org/wiki/Mainframe_computer


OS360/OS390/zOS - IBM технология

Коментара ти ироничен ли е ?

По темата, PIC Mикрокотролери на МК част 2 на някой да му се намира ? имам част 1 която почти изчетох....


Сря Окт 16, 2013 11:31 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Окт 11, 2011 11:53 pm
Мнения: 4582
Местоположение: Brussels / Пловдив
Мнение Re: 16F716 и много въпроси
По темата: имай в предвид че ПИКовете са с доста ограничен стек, ако ти е трудно да си разбереш програмата, дебъгвай стъпка по стъпка в симулатора и гледай как се използва стека - в един момент ще ти светне къде е грешката.

По оффтопика: да имаш опит с асемблер за мейнфрейм ми идва малко странно ... опит значи да си писал работещи програми, при това доста ... да си чул или чел, че има такова нещо не бих го нарекъл опит

_________________
Мразя да мразя ...


Чет Окт 17, 2013 10:57 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: 16F716 и много въпроси
Цитат:
ClrRAM
movlw Flags

movlw FSR

movlw d'20'
movwf Numb


Тоз ПИК не съм го борил, по далеч от 12f509 не съм стигнал, ама ми изглежда нечитаво ,че
FSR сякаш остава незареден.

IBM 360 ....имам едни книги за асемблера им. Купувах ги по соца, кога бях студент и мислех ,
че може да ми трябват. Интересно, че в ТУ още се занимават с тях. За Пентагона ли подготвят кадри? Колко такива машини има в БГ?


Чет Окт 17, 2013 11:17 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: 16F716 и много въпроси
Тази книга , дето я четеш за ПИК да не те вкара в заблуждения. Ако е за 16/32 бита - ще ти дойде тежка навярно. Ако е за 8 битовите , може да те обърка ,че контролерите трябва да приличат на 12c508. Има и процесори с повечко инструкции - мислени са по друго време от други хора - та тез с многото инструкциите са една идея по-близо до мисленето на човека,особено студент.
Има си книги с по-общ профил. От една руска книжка съм запомнил, че процесорите могат 3 неща - да четат, да пишат и да прекъсват ...останалото е от тебе. Това в книжката за ПИК пише ли го?


Чет Окт 17, 2013 11:28 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение Re: 16F716 и много въпроси
Проблема е в подпрограмата ClrRAM и по-точно в movlw FSR, вместо movWF FSR. По тоя начин в FSR не се зарежда адрес за нулиране и стойността му си остава 0х00. С първия цикъл на подпрограмата се нулира адрес 0х0000(INDF), с втория цикъл се нулира адрес 0х0001(TMR0) и с третия цикъл се нулира адрес 0х0002(PCL), което връща изпълнението на програмата на ORG 0х00000 т.е. в началото. След 8 връщания стека се препълва. По принцип това не е много правилен начин за изчистване на рама. Не е нужно да се заема регистър за да се следи до къде е стигнал брояча.


Чет Окт 17, 2013 11:40 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: 16F716 и много въпроси
palavrov написа:
По темата: имай в предвид че ПИКовете са с доста ограничен стек, ако ти е трудно да си разбереш програмата, дебъгвай стъпка по стъпка в симулатора и гледай как се използва стека - в един момент ще ти светне къде е грешката.

По оффтопика: да имаш опит с асемблер за мейнфрейм ми идва малко странно ... опит значи да си писал работещи програми, при това доста ... да си чул или чел, че има такова нещо не бих го нарекъл опит



С 'разбирането' като четене на програмата почти нямам проблем, като проблем ми прави точно това чистене на РАМ не съм свикнал с такова чудо конкретно, а колко е да се научат ~40 инструкцийки за Pic-че.

До опита с MF асемблера - работещи STC-та, automation макрота, и конкретни дефиниции на сторидж към процесор от системата, не е много (като се има в предвид системните програмъри какво правят) но е доста и е бая различно от микроконтрелер

stefan63 написа:
IBM 360 ....имам едни книги за асемблера им. Купувах ги по соца, кога бях студент и мислех ,
че може да ми трябват. Интересно, че в ТУ още се занимават с тях. За Пентагона ли подготвят кадри? Колко такива машини има в БГ?


В ТУ не се занимават с това, такова работя, пентагона таман си изхвърлиха всички такива подобни системи :) в БГ няма такива системи защото няма нужда от тях, няма институция която да има толкова нужда от толкова computing power, която 1 такава машина доставя. В линка който дадох към уикипедия ако сте го прочели до долу го казват. Такъв вид системи са разпространени там където се въртят пари (груб превод), банки министерства болници и все, от наще банки - DSK ползва такова но целия тийм който я съпортва обслужва и все е IBMски и е извън БГ.

CarBeta написа:
Проблема е в подпрограмата ClrRAM и по-точно в movlw FSR, вместо movWF FSR. По тоя начин в FSR не се зарежда адрес за нулиране и стойността му си остава 0х00. С първия цикъл на подпрограмата се нулира адрес 0х0000(INDF), с втория цикъл се нулира адрес 0х0001(TMR0) и с третия цикъл се нулира адрес 0х0002(PCL), което връща изпълнението на програмата на ORG 0х00000 т.е. в началото. След 8 връщания стека се препълва. По принцип това не е много правилен начин за изчистване на рама. Не е нужно да се заема регистър за да се следи до къде е стигнал брояча.


тук УЖ пробвах индиректна адресация ама май не съм го доизкусорил. Книгата е 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 -> променя се честотата на смяната на индикация, но може ли да стане 'програмно' примерно да добавя един регистър който да задава честотата за смяна ? Този регистър да се променя в мейна или при натискане на бутон. Та идейка можете ли да додадете :)


Чет Окт 17, 2013 1:45 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: 16F716 и много въпроси
Всичко може...
Не ми е ясно за каква индикация пишеш, но това няма значение.
И Уйндоус така работи - процесора чете от едно място , пише на друго място, прекъсва като стане нещо - например мръднеш мишката - И задължително прекъсва на всеки няколко милисекунди. Е - и на тебе първата ти работа е да имплементираш концепцията за системен таймер. От там нататък - кеф ти индикация, кеф ти бутони, кеф ти музика - ако прекъсваш на всеки 100..200 микросекунди и между две такива прекъсвания успяваш да изработиш следващото от мелодията ниво към слушалките.


Чет Окт 17, 2013 2:01 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: 16F716 и много въпроси
stefan63 написа:
Всичко може...
Не ми е ясно за каква индикация пишеш, но това няма значение.
И Уйндоус така работи - процесора чете от едно място , пише на друго място, прекъсва като стане нещо - например мръднеш мишката - И задължително прекъсва на всеки няколко милисекунди. Е - и на тебе първата ти работа е да имплементираш концепцията за системен таймер. От там нататък - кеф ти индикация, кеф ти бутони, кеф ти музика - ако прекъсваш на всеки 100..200 микросекунди и между две такива прекъсвания успяваш да изработиш следващото от мелодията ниво към слушалките.



Индикация - само в лабораторията, аз ще си имам когато ми дойде всичко бредборда със сите диоди / жици и чипа който поръчах днес :)
Сега го карам на watch - registers и SFRs през МПЛАБ-а та така май го направих :D


Чет Окт 17, 2013 2:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: 16F716 и много въпроси
системен таймер направи ли?


Чет Окт 17, 2013 3:21 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: 16F716 и много въпроси
Не, доста се пооплетох в това нящо


Чет Окт 17, 2013 3:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 11:22 pm
Мнения: 3084
Мнение Re: 16F716 и много въпроси
Имаш 2-3 апаратни таймера в твоя процесор. Единият го заделяш за системен таймер-
ще ти цъка (ПРЕКЪСВА) на период , какъвто му програмираш ТИ при инициализацията на чипа. Щом ще те прекъсва - трябва да имаш ISR (прекъсване обслужваща подпрограма).
Тя евентуално презарежда таймера ( ако няма подходящ режим с автоматично презареждане), изчиства хардуерния флаг за прекъсване - ако е необходимо за конкретния таймер и конкретния процесор, вдига ТВОЙ флаг "Hardest_току_що_пак_имаше_прекъсване_от_таймера" и излиза от прекъсване.
В главния цикъл следиш тоя флаг. Като го видиш светнат - гасиш го и си правиш сметка колко време е изтекло. Например ако нагласиш таймера да прекъсва 100 пъти в секунда и на всяко светване на флага увеличаваш брояч - когато стигне стойност 100 - значи е минал една секунда и можеш да си запалиш следващото светодиодче. Броячът ще го нулираш де...

Значи - хардуер(таймер). прекъсване , флаг, проверка на флага,вземане на решение.
Долу горе това правят повечето програми :-) , когато не броят пари.


Чет Окт 17, 2013 4:07 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Окт 16, 2013 7:37 pm
Мнения: 8
Мнение Re: 16F716 и много въпроси
Хохо колко играчка ще има :D 2/3 от нещата който си написал са ми непознати :D


Чет Окт 17, 2013 4:18 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Вто Юни 27, 2006 11:13 am
Мнения: 381
Местоположение: Варна
Мнение Re: 16F716 и много въпроси
ако е динамична индикацийката, 1 секунда си е множко :)


Пет Окт 18, 2013 8:58 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 15 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни