PIC16F628A

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

PIC16F628A

#1 Příspěvek od frantajetel11 »

Zdravím včechny bastlíře a bastlířku
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
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#2 Příspěvek od Chenzee »

Zdarec, na první letmý pohled: co očekáváš od MAIN02 a co očekáváš od BLPIP části BTFSC IN1;NOP;BCF RELE1 ... BCF BUZZ? Krokoval jsi ten program? Počítáš se zákmity na vstupu?
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

#3 Příspěvek od frantajetel11 »

No já nevim, jestli jsem se nevydal blbym směrem... Spíš bych potřeboval poradit rutinu, která po aktivaci vstupu, párkrát sepne výstup (to párkrát umim) a pak ho nechá zapnutej a někde čeká na změnu (to nějak ještě neumim). Zákmity na vstupu jsem zatím neřešil, protože tam jsou optočleny, ale možná je bude potřeba vyřešit taky. Já to sem dal, jenom spíš na orientaci. Určitě by to celý šlo vyřešit jednoduššeji, ale jelikož jsem začátečník, tak bych spíš potřeboval nakopnout správnym směrem.
Díky
P.S. blpip, znamená blik+píp
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#4 Příspěvek od Chenzee »

OK, nejprve odpověz na moje otázky. 1) co očekáváš, že MAIN02 a BLPIP bude dělat nebo co mají dělat? 2) v čem program píšeš (MPLAB?) 3) optočlen myslím neřeší problém se zákmity ale zprvu to nebudeme řešit (třeba to ani nebude nutné) Pokusíme se zjistit, co je na tvém programu špatně a možná tím dojdeme k funkčnímu a očekávanému konci. Třeba taky dojdeme do (_._) (no ale to snad ne :-))
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#5 Příspěvek od Chenzee »

Musí být aktivní vždy a pouze jeden výstup nebo i více výstupů najednou? Když zmizí log. 0 na vstupu dříve, než se dobliká výstupem, má se blikání přerušit nebo dokončit? Jak rychle mají výstupy blikat? Bzučák bude pouze piezoměnič nebo přímo sirénka? Kolik těch bliknutí má být? Já jen aby bylo jasné zadání.
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

#6 Příspěvek od frantajetel11 »

Píšu to v mplabu, main2 blpip tam třeba ani nemusej bejt, vstupy by měly bejt na sobě nezávislý a může jich bejt aktivních víc najednou. Nikdy ale nesepnou ve stejnou dobu, takže vždycky ten co bliká stačí doblikat. Bzučák je sirénka. A pípání/blikání bude ON 1S, OFF 0,5S. Když zmizí log.0 ze vstupu, tak příslušnej výstup vypne hned.
P.S. omlouvám se, že reaguju zpožděně, jsem v práci :? A tohle je domu
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

#7 Příspěvek od frantajetel11 »

Ještě doplním: těch bliknutí/pípnutí bude podle dvou jumperů - 3, 10, 30, 90 blikpípů.
Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 00:00

#8 Příspěvek od frpr666 »

ahoj,
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/
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

#9 Příspěvek od frantajetel11 »

Díky za odkazy a rutinu. Trochu výš jsem psal, že v programování nejsem zrovna expert :cry: . Takže nějakej přepis z Cčka do asm, to fakt nehrozí...
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 :lol: , tak ty asi budu řešit taky.
P.S. proš myslíš, že je PIC+ASM blbá kombinace?
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#10 Příspěvek od Andrea »

Ten PICassembler je už od pohledu fialovej hnus. :D
Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 00:00

#11 Příspěvek od frpr666 »

RE:blbá kombinace. To bych netvrdil, že blbá, jen pro začátečníka složitá.
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.
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#12 Příspěvek od Chenzee »

... co má za význam

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
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
Chenzee
Příspěvky: 464
Registrován: 26 čer 2007, 00:00
Bydliště: Vysočina

#13 Příspěvek od Chenzee »

Koukni na toto. Mohlo by to chodit. Pro ostatní: neříkám, že je to nejlepší řešení. Vycházím pouze z toho, jaká byla původní konstrukce programu. Elegantněji by to šlo přes TMR a přerušení ale to zase až jindy :lol:
Přílohy
test.asm
(6.9 KiB) Staženo 129 x
Žádnej učenej z nebe nespadl ...
Uživatelský avatar
frantajetel11
Příspěvky: 1922
Registrován: 13 lis 2008, 00:00
Bydliště: Kladno

#14 Příspěvek od frantajetel11 »

Andrea píše:Ten PICassembler je už od pohledu fialovej hnus. :D

Myslela jsi ten muj rádobyprogram, nebo obecně? Pokud možnost A, tak bych si dovolil souhlasit.
Chenzee díky moc večer to vyzkouším :wink:
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#15 Příspěvek od Andrea »

Nehodnotila jsem program, ale assembler konkrétní rodiny procesorů.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“