PIC16F628A
Moderátor: Moderátoři
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno
PIC16F628A
Programuju takovej "hlásič" a potřeboval bych, aby měl tyto fce:
1) tři nezávislé vstupy (optočlen)
2) dva jumpery
3) tři výstupy jsou relé a jeden bzučák
Mělo by to dělat to, že pokud třeba na vstup1 přijde log.0, tak má x krát "bliknout" relé1 a zároveň x krát bzučák, potom bzučák přestane bzučet a relé zůstane sepnuté, dokud bude na vstupu log.0, po přivedení log.1 vypne . To samé na zbylých vstupech
4) počet x bliknutí se přepíná těma jumperama, takže tam jsou 4 možnosti
Programuju to v assembleru a nějak se do toho pořád zamotávám.
V příloze je ten můj patvar... je tam 100%spousta kopanců, protože se mi z kraje vůbec nedařilo to rozběhat s tímhle procesorem. Tak mě prosím nekamenujte hned.
Pokud by mi někdo byl schopen poradit, tak mu budu nesmírně zavázán.
Děkuji za odpověď
- Přílohy
-
hlasic08.txt- (4.92 KiB) Staženo 128 x
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno
Díky
P.S. blpip, znamená blik+píp
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno
P.S. omlouvám se, že reaguju zpožděně, jsem v práci
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno
předně skládám klobouk dolů, že jsi se pustil do kombinace PIC a asm. Tedy poměrně složitá kombinace. Podíval jsem se na tvůj .asm, nepřemýšlel jsem nad vším, ale napadly mě tyto věci:
1/ správně máš nekonečnou smyčku - což je podstata programu pro uC.
2/ chybí mě tam proměnná, která drží stav tvého jednoduchého stavového automatu. Tj. vidím čistě jen čtení vstupů a nastavování výstupů.
Zkus google: wiki stavový automat
3/ např. na papír si rozvrhni tvou úlohu na jednodušší části a nakoduj si to např. do jazyka C. Až potom si to přepiš do asm.
4/ výše se zde psalo o ošetření zákmitů vstupů. Já používám např. takovou šablonu:
Kód: Vybrat vše
#define SETPOINT 10
if (input_pin1!=0){
if (cnt1<SETPOINT){
cnt1++;
}
else {
flag1=1;
}
}
else{
if (cnt1!=0){
cnt1--;
}
else {
flag1=0;
}
}
// input_pin1 means some input
// flag1 means filtered input image
// cnt1 is temp. var.
Jsi schopen např. takový konstrukt přepsat do asm? Jinými slovy napsat větvení programu if{} else {} v assembleru?
5/ podívej se na internet, jak se píší podobné programy. Např. zde:
Dobrá stránka o PIC je třeba zde:
http://talkingelectronics.com/
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno
Ten program je nedodělanej - vím to. Nějak jsem si vsugeroval, že když tam jsou na vstupu uP optočleny, tak nemusim řešit zákmity
P.S. proš myslíš, že je PIC+ASM blbá kombinace?
Microchip MPLAB IDE je skvělý soft zdarma. Já mám s Microchipem dobrou zkušenost.
Ještě jeden link o picech:
http://www.piclist.com/techref/piclist/begin.htm
edit1: popřemýšlej o tom, kolik vteřin času ti jako programátorovi zabere zapsat podmínku (if{}else{}). Zatímco v C je to pár vteřin, v asm to bude jistě více času a více popsaných řádků, které je třeba odladit. Microchip nabízí free C kompilátor zdarma. Podívej se po něm.
Kód: Vybrat vše
BTFSC IN1
NOP
BCF RELE1
BTFSC IN2
NOP
BCF RELE2
EDIT:
jinými slovy když je IN1 log.1, vykonej NOP a nastav RELE do 0., jinak nastav přímo RELE do 0
- Přílohy
-
- test.asm
- (6.9 KiB) Staženo 129 x
- frantajetel11
- Příspěvky: 1922
- Registrován: 13 lis 2008, 00:00
- Bydliště: Kladno