Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   296 / 1319
(#) djszapi hozzászólása Szept 25, 2008 /
 
6000. Ft szeptember 30-ig a pickit2 starter kit a chipcadben!

A rendes ara 11.000 Ft korul van.

(#) googa hozzászólása Szept 25, 2008 /
 
Sziasztok! Ránéznétek a progimra? A lényeg, hogy figyelem a PORTB 1. bitjét és amíg nyugalomban van, addig zöld LED megy (green sub), és ha aktív lesz a bemenet, akkor piros LED megy. Az a bajom vele, hogy mikor a pirosnak kellene menni, vagyis aktív a bemenet, akkor megy a piros, aztán a zöld és így felváltva, amíg meg nem szűnik a jel a bementen. Tehát, ha meghívódik a Red rész, akkor lefut a Green rész is. Miért van ez? A btfss okozza ezt, valamilyen státusz bitet vissza kell állítani? Köszi!

*
*
*
ujra:
btfss PORTB, 1
call Red
goto ujra

Red
movlw b'0100'
movwf PORTB
call Delay250

Green
movlw b'1000'
movwf PORTB
call Delay250

*
*
*
(#) googa hozzászólása Szept 25, 2008 /
 
...a delay rutin vége: retlw 0x00
Idáig működött a dolog, de mióta beraktam a btfss parancsot, azóta van ez...
(#) berci1987 válasza googa hozzászólására (») Szept 25, 2008 /
 
A REd végére is kell visszatérés (return)
...
call Delay250
return
(#) googa válasza berci1987 hozzászólására (») Szept 25, 2008 /
 
na igen, de így meg pirosban marad végig...
(#) Báddzsó válasza watt hozzászólására (») Szept 25, 2008 /
 
vasalós vagy világítós technikával gyártott a nyák?, szép.. én bevásároltam recés felületű nyákból, hiába csiszolom, sz*r!
(#) berci1987 válasza googa hozzászólására (») Szept 25, 2008 /
 
MEGINT ELŐBB ÍRTAM, MINT RENDESEN VÉGIG GONDOLTAM VOLNA

UJRA
BTFSS PORTB,1
GOTO RED
GOTO GREEN

RED
...
CALL DELAY250
GOTO UJRA

GREEN
...
CALL DELAY250
GOTO UJRA
(#) googa válasza berci1987 hozzászólására (») Szept 25, 2008 /
 
Köszi, így működik. De tulajdonképpen miért nem volt jó a CALL paranccsal? Egymás után meghívott szubrutinokból, már nem talál vissza? Valaki elmesélhetné, mert engem érdekel.
(#) watt válasza Báddzsó hozzászólására (») Szept 25, 2008 /
 
vasal...
(#) berci1987 válasza googa hozzászólására (») Szept 25, 2008 /
 
Csak a második (delay) szubrutinból tértél vissza (arra a pontra ahonnan meghívtad). És így végrehajtotta a zöld LED bekapcsolását is
(#) kobold válasza googa hozzászólására (») Szept 25, 2008 /
 
Idézet:
„Egymás után meghívott szubrutinokból, már nem talál vissza?”

Csak ha megtelik a stack (verem). Több egymásba ágyazott hívásnál figyelni kell, főleg, ha interrupt is van.
(#) szilva válasza googa hozzászólására (») Szept 25, 2008 /
 
De visszatalál mindenhonnan, ha van a megfelelő helyen return vagy retlw. Az nem nevezhető szubrutinnak, amit call-lal meghívsz, aztán nincs sehol "vége" valamilyen visszatérő utasítással.

Ha a "red" és a "green" szubrutin akar lenni, akkor mindkettő végére kell egy return (vagy retlw) - magyarul a "call delay" sorok után. Egy kicsit ha továbbgondolod a proci működését, akkor rájöhetsz, hogy a "call delay/return" utasítás helyett ha egy "goto delay"-t írsz, az ugyanúgy fog működni (csak eggyel kevesebb mélységig használja a stacket), mert ilyenkor a "delay" rutin végén lévő return (retlw) lesz az, amelyik a meghívott "red" vagy "green" szubrutin visszatérő utasításává válik. Elsőre lehet, hogy kicsit bonyolultnak tűnik, de ha csak egyszer végigjátszod papíron, hogy mik történnek, szerintem rögtön világos lesz.
(#) googa hozzászólása Szept 25, 2008 /
 
Köszönöm mindenkinek!
(#) icserny válasza watt hozzászólására (») Szept 25, 2008 /
 
Köszönöm a képet. Tetszik.
(#) csiefjancsi hozzászólása Szept 25, 2008 /
 
Sziasztok!

Nagyon nagy kérdésem lenne: Valaki nem tudna mondani egy helyet vagy küldeni vagy nincs-e meg valakinek letöltve a PICBASIC™ Compiler progi????

A hivatalos hely ahonnan le lehetne tölteni pénzért kínálja és hát nem valami olcsón.

Ha tudtok kérlek segítsetek, plíz!!
(#) trudnai válasza googa hozzászólására (») Szept 25, 2008 /
 
CALL -lal is megcsinalhatod kis modositassal:

  1. UJRA
  2.     BTFSS PORTB,1
  3.     CALL RED
  4.     CALL GREEN
  5.     GOTO UJRA
  6.  
  7. RED
  8.     ...
  9.     CALL DELAY250
  10.     RETURN / RETLW xx
  11.  
  12. GREEN
  13.     ...
  14.     CALL DELAY250
  15.     RETURN / RETLW xx


Az elonye a GOTO-ssal szemben, hogy a fuggvenyeid barhonnan hivhatok, ugyanoda ter vissza. Raadasul ha a "fo program" valtozik attol meg a rutinok valtozatlanok maradhatnak - mag akkor is ha az UJRA cimke valtozik vagy ha mashova szeretnel vissza ugrani...

A hatranya, ahogy mar elhangzott a stack hasznalat, a PIC-eknel eleg limitalt a stack melysege, meg kell nezni az adatlapon mennyi es ezt is figyelembe kell venni mikor a firmware-ed tervezed. Ja es meg egy hatrany: egy hajszalnyival hosszabba program es egy szempillantasnyit tovabb is tart amig lefut... (2 ciklusnyit)
(#) The_W válasza trudnai hozzászólására (») Szept 26, 2008 /
 
Elnézést a késői válaszért, most jutott időm erre.

Igen, tudom, hogy a PIC az PIC, és nem microsoft De a honlapra van kiírva, hogy nem fogja frissíteni, és nem fog új cikkeket írni. Igazából össze lehet ollózgatni innen is, onnan is cikkeket, amivel már lehet tanulni. Szóval nem is szükséges annyira, csak egy mondatot megért a felhívás.
Az elméleti résszel kezdtem én is, de azért célirányosan: gyakorlati alkalmazási lehetőségek felé mozdítom az elméleti anyagot. Egyelőre nem sok eredménnyel, mint mondtam, nincs sok időm sajnos. Jelenleg.
Kellemes éjszakát mindenkinek!
(#) trudnai válasza trudnai hozzászólására (») Szept 26, 2008 /
 
Nahat, hogy milyen faradt vagyok mar!

  1. UJRA
  2.     BTFSS PORTB,1
  3.     CALL RED
  4.     BTFSC PORTB,1   ; <--- EZ KELL!!!
  5.     CALL GREEN
  6.  
  7.     ; CALL DELAY250 ; ez CSAK AKKOR ha ledeknel nem varunk!
  8.     ; (program memoriaval sporolunk...)
  9.  
  10.     GOTO UJRA
  11.  
  12. RED
  13.     ...
  14. ;    CALL DELAY250
  15. ;    RETURN / RETLW xx
  16.     ; ezt lecsereljuk szepen GOTO-ra es akkor a DELAY250-bol fog vissza terni
  17.     GOTO DELAY250
  18.  
  19. GREEN
  20.    ...
  21. ;    CALL DELAY250
  22.     ; de ugy is csinalhatnank akar, hogy itt kilepunk es a fo ciklusba varunk!
  23.     RETURN / RETLW xx
(#) potyo válasza trudnai hozzászólására (») Szept 26, 2008 /
 
Látom, nagyon ráérsz
(#) trudnai válasza potyo hozzászólására (») Szept 26, 2008 /
 
Aaa, csak lefekves elott beneztem irt-e valaki valamit, erre egybol kiszurtam a hibat - sajat magam QA-ztam
(#) kissi válasza szilva hozzászólására (») Szept 26, 2008 /
 
"Egy kicsit ha továbbgondolod a proci működését, akkor rájöhetsz, hogy a "call delay/return" utasítás helyett ha egy "goto delay"-t írsz, az ugyanúgy fog működni (csak eggyel kevesebb mélységig használja a stacket), mert ilyenkor a "delay" rutin végén lévő return (retlw) lesz az, amelyik a meghívott "red" vagy "green" szubrutin visszatérő utasításává válik."

Ezt hogy értetted?!http://www.hobbielektronika.hu/forum/wtopic.php?post_id=281431&act=...pop=1#
http://www.hobbielektronika.hu/forum/wtopic.php?post_id=281431&act=...pop=1#

Ha GOTO-val küldöd el, akkor nem menti el a viszatérési címet, így amikor találkozik valamilyen RET utasítással, akkor nincs honnan JÓ címet elővenni --> nem megfelelő helyre fog visszaugrani!!!http://www.hobbielektronika.hu/forum/wtopic.php?post_id=281431&act=...pop=1#
http://www.hobbielektronika.hu/forum/wtopic.php?post_id=281431&act=...pop=1#

Ezzel szerintem megzavartad a kérdezőt....

Steve
(#) kissi válasza kissi hozzászólására (») Szept 26, 2008 /
 
Na ez így akart menni...


"Egy kicsit ha továbbgondolod a proci működését, akkor rájöhetsz, hogy a "call delay/return" utasítás helyett ha egy "goto delay"-t írsz, az ugyanúgy fog működni (csak eggyel kevesebb mélységig használja a stacket), mert ilyenkor a "delay" rutin végén lévő return (retlw) lesz az, amelyik a meghívott "red" vagy "green" szubrutin visszatérő utasításává válik." Ezt hogy értetted?

Ha GOTO-val küldöd el, akkor nem menti el a viszatérési címet, így amikor találkozik valamilyen RET utasítással, akkor nincs honnan JÓ címet elővenni --> nem megfelelő helyre fog visszaugrani!!!

Ezzel szerintem megzavartad a kérdezőt....


Steve
(#) berci1987 válasza kissi hozzászólására (») Szept 26, 2008 /
 
Szia !
Szerintem így értette :
...
CALL GREEN
...
...
GREEN
...
GOTO DELAY
...
...
DELAY
...
RETURN

Így oda fog visszatérni ahonnan a 'GREEN' szubrutint meghívta . És a kérdező ezt szerette volna, de javítsatok ki ha tévedek.
(#) szilva válasza berci1987 hozzászólására (») Szept 26, 2008 /
 
Igen, így értettem.

Arról volt szó, hogy a "red" és a "green" azok szubrutinok, amiket call-lal hívunk meg. Egy ilyen szubrutin végén lévő call/return utasításpárt lehet lecserélni egy goto-ra. Ilyenkor a rutin végén call-lal meghívandó másik rutin végén lévő return lesz az, ami a főprogramba visszatér. Ezáltal megspórolunk egy veremhelyet, ráadásul egy programmemósia-helyet és futásidőben egy utasításvégrehajtást is.
(#) szilva válasza kissi hozzászólására (») Szept 26, 2008 /
 
Jó politikus lennél, mert amúgy az az egy mondat, a környezetéből kiragadva, csak úgy általánosságban tényleg nem mond igazat. De ha hozzáolvasod az eredeti helyén az előtte lévőt is, összefüggéseiben, akkor azért már van értelme.

Persze, akinek ez nem világos, hogy miért is jó, az nyugodtam használja a szabályos módon a call-t, és utána a return-t. Aki foglalkozik rendszeresen programozással, előbb-utóbb rájön ezekre az egyszerűsítésekre maga is. Alapvetően én nem szeretem használni, mert kissé nehezebben átlátható lesz a program, de a (midrange) PIC-ek stackjének elég szűkös mérete miatt szoktam alkalmazni.
(#) watt válasza szilva hozzászólására (») Szept 26, 2008 /
 
Viszont ha jobban belegondoltok, akkor ez nem más, mint 1 szubrutin, amiben van két belépési pont és egy kilépési a delay után.
Az más kérdés, hogy hogyan szervezem ezt az editorban. Aki ad egy kicsit a formára, az struktúráltan adja elő a külcsínyt.
Egyébként ez a megoldás a jobb, mert valóban felesleges szubrutinokat egymásból hívogatni(szanaszét szabdalni egy nagyobb egységben is elképzelhetőt). Persze ez is, mint annyi minden a feladattól függ. Ha van elég verem és van elég idő, akkor lehet egymásba ágyazni is minden gond nélkül. A lényeg, hogy tudjuk mit miért teszünk. (természetesen ezen utóbbi eszmeömlésem a kérdezőnek szól, nem neked...)
szerk: közben egyszerre írtunk.
(#) trudnai válasza watt hozzászólására (») Szept 26, 2008 /
 
Meg annyit ehhez az egeszhez - es akkor flame on - hogy ezek azok a dolgok amiket egy jo HLL compiler automatan elintez es a programozonak nem is kell oda figyelnie - sot sok esetben nem is tud mindarrol ami tortenik, a kod csinalja azt amit o elvar tole. Ha kozben valtozik a forras es nem lehet a rutinokat egybe agyazni akkor a legkozelebbi forditasnal mar ertelem szeruen nem csinalja meg a compiler. Ehhez kepest egy asm-ben manualisan kell ilyenekre figyelni - ami tegyuk hozza egy gyakorlott asm kodolonak nem okoz problemat
(#) lgyk válasza watt hozzászólására (») Szept 26, 2008 /
 
Hát, a szenzorok valószínűleg 10-20 m-es kábel végén csücsülnének. Akkor inkább vonalmeghajtóval próbálkozok, de a MAX232 sem hiszem, hogy átvinne 20 m-nyi vezetéket...

A diódát pedig inkább elfelejtem...

A másik kérdésem, hogy milyen PIC lenne alkalmas a célra? Kritérium, hogy könnyen lehessen 16*2-es LCD-t illeszteni hozzá, legyen elég portja a nyomógombokhoz, szenzorokhoz (legalább 3 gomb és 4 vagy 5 szenzor), RS232 kommunikációhoz számítógép felé, és emellett egy 16kB-os EPROM-ot is kellene kezelnie. Első közelítésben egy 16F877-re gondoltam.
(#) watt válasza lgyk hozzászólására (») Szept 26, 2008 /
 
Hol is kezdjem...
Kell egy USART az RS485 vonalhoz. Ha ez megvan, akkor erre fel tudsz fűzni szinte bármennyi(~250) slave egységet.
Kell még egy USART, ha a PC-vel is kapcsolatot akarsz, vagy egyből egy USB-s PIC(pl. 18F4550) is befigyelhet, és akkor a PC felé a legjobb kapcsolatod lesz.
Vannak olyan PIC-ek is, amiben két USART van, de ezek legtöbb esetben SMD-k és 80 lábúak. Lehet esetleg kapcsolgatni az egy usartot ide oda, de az nagyon macerás, és nem túl egyszerű lekezelni.
A Slavekre(távadó egységekre) kell egy olyan PIC, ami olcsó, és van USART-ja. Én a 16F627A-t szeretem ilyenre használni, de biztosan vannak már kevesebb lábbal olcsóbban is USART-os PIC-ek, csak nem nagyon keresgéltem mostanában ilyen után(chipcad).
RS485 csatolónak jól bevált az SN75176. (Slavenként egy + a központ)
Szenzornak én az SPI-s protos példányokat ajánlom, mert programból nagyon könnyű kezelni akkor is, ha nincs a PIC-ben SPI port.
(#) kobold válasza lgyk hozzászólására (») Szept 26, 2008 /
 
A nagyobb távolságokkal kapcsolatban, szerintem inkább az RS485, vagy áramgenerátoros meghajtások körében kellene szétnézni. RS485-öt külön javaslom, még összegányolt panellal, saját sodrású vezetékekkel is tökéletesen stabilan futott 800 kW-os motorok és frekiváltóik mellett (SP485-ös illesztőt használtam, de sokféle van).
A PIC-hez, ha jól számoltam: 11 láb az LCD-nek (ha az EN is vezérelt), gombok / (digitális?) szenzorok 8, RS232 2 láb, EEPROM meg mondjuk 3-4. Ez összesen 24, a 877-nek van 32, szóval fizikailag beleférne még egy RS485 meghajtása is; van belőle 20 MHz-es kivitel, az is elég szokott lenni. Viszont szerintem kicsit drága a képességeihez mérten, én is csak azért építgetek ilyenből (meg 876-ból), mert van belőlük jópár maradék.
Következő: »»   296 / 1319
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem