Fórum témák

» Több friss téma
Fórum » PIC program
 
Témaindító: deguss, idő: Nov 10, 2005
Témakörök:
Lapozás: OK   1 / 1
(#) deguss hozzászólása Nov 10, 2005 /
 
Sziasztok!

Problémám csakis software jellegű, pontosabban a programozásban kérném segítségeteket. Egy olyan programot szeretnék írni egy 16F84A-hoz, aminek csak két dolgot kell tudnia! Ha megnyomom a B2-vel jelölt gombot, ég egy LED, és ha elengedem is égve marad. Eddig nincs probléma.
Viszont HA ÚJRA UGYAN AZT a gombot megnyomom el kéne hogy aludjon a LED, és ha elengedem, mindaddig nem szabad hogy újra égjen, míg meg nem nyomom újból.

Kezdő vagyok még a PIC programozás terén, csak az alapdolgok mennek, szóval tényleg csak a bsf/bcf meg a mov utasítások. Megkérnék minden hozzászólót, értelmesen, és egyszerűen fogalmazzon. Külön köszönet érte.

A programot a Microchip MPLAB 7.21 nevű fordítójában írom.

Én a következő utasítások variálásával akarom megoldani, vagy ilyesmi módon:

  1. START
  2. bsf PORTB,7
  3. goto kezd
  4.  
  5. kezd
  6. btfss PORTA,4
  7. goto kezd
  8. goto elenged
  9.  
  10. elenged
  11. btfsc PORTA,4
  12. goto elenged
  13. goto lenyom
  14.  
  15. lenyom
  16. bcf PORTB,7
  17. goto kezd


Amit tudni kell: A nyomógombgomb hozzá tartozó portjára van kiküldve a GND, a nyomógomb másik fele csatlakozik az RTCC-re, és egy 2k2 ellenálláson keresztül a TÁPra (+5V). Ha megnyomom a gombot az RTCC-n (PORTA,4) GND lép fel, ha nincs lenyomva a gomb, TÁP van az RTCC bemeneten.

tehát egyszerűen ha a gombot lenyomom a lenyomva címkére ugrik a progi:

  1. btfss PORTA,4
  2. goto lenyomva
  3. goto nem_lenyomva


Várok minden ötletet hogyan lehetne megoldani ezt az egyszerű kapcsolást.
Köszönöm előre is mindenki hozzászólását, ötletét.

deguss
(#) Norberto válasza deguss hozzászólására (») Nov 11, 2005 /
 
Hali!

Nem rossz, amit írtál, sőt! Már majdnem készen is volt a kis programod :yes:

Most akkor beírom, hogy mi az én verzióm, remélem, érteni fogod


START
kezd bsf PORTB,7
gomb1 btfss PORTA,4
goto gomb1
bcf PORTB,7
gomb2 btfss PORTA,4
goto gomb2
goto kezd

És igazából ennyi lenne az egész program.
(#) deguss válasza Norberto hozzászólására (») Nov 11, 2005 /
 
Szia Norberto!

Köszi szépen a javaslatot, de a progi sajnos így még nem működik, mert alapból világít fele fényerővel (egyszer bsf, és bcf), és amíg nyomom addig teljes erővel világít, ha elengedem meg megint fele fényerővel, és akrárhányszor nyomom le, mindig ugyan azt csinálja.
Lenne egy ötletem mi lehet a megoldás, de tényleg csak ötlet.
Szóval a gombot nem tudjuk mi olyan rövid időre lenyomni hogy a program ne fusson le vagy 1000szer vagy akár 10000-szer is. És amikor elengedjük a gombot, egyből elolja a lámpát, a te programod szerint, és mivel nincs lenyomva újból kigyújtya. Ezért látjuk a csökkentett fényerőt.
Nekem az lenne az ötletem hogy regiszterekben kéne tárolni a gombok állapotát, és ezt mindig ellenőrizni.
Szóval ha megnyomtam a gombot és elengedtem REG1=1. Ha újra megnyomom és a REG1=1 akkor jön hogy eloltja a lámpát, ha pedig REG1=0 akkor kigyújtya. És ezt ismételgeti.
Viszont nem tudom hogyan lehetne megvalósítani. Az oké ahogy írok bele: movlw .1 és movwf REG1... de amikor kiolvasom ugye nincs olyan hogy if(REG1==0) vagy ilyesmi hanem csak az incfsz meg a decfsz...
Szóval ha valaki tudna szolgálni egy kódrészlettel, csak annyit hogy hogyan tudom egy változó tartalmát, ill. értékét lekérdezni, annak örülnék.
Természetesen NEM azt várom el hogy valaki megírja a programot helyettem, de ha valakinek van ötlete nagyon szívesen fogadom.

Köszi előre is.
deguss
(#) kaninjo válasza deguss hozzászólására (») Nov 11, 2005 / 4
 
Hi!

Én így oldanám meg:

  1. START
  2.         bsf     portb,7
  3. gomb1
  4.         btfss   porta,4         ;gomb lenyomva?
  5.         goto    gomb1           ;nem
  6.         bcf     portb,7         ;igen
  7. gomb2
  8.         btfsc   porta,4         ;várunk a gomb elengedésére
  9.         goto    gomb2           ;még lenyomva
  10. gomb3
  11.         btfss   porta,4         ;gomb lenyomva?
  12.         goto    gomb3           ;nem
  13.         bsf     portb,7         ;igen
  14. gomb4
  15.         btfsc   porta,4         ;várunk a gomb elengedésére
  16.         goto    gomb4           ;még lenyomva
  17.         goto    gomb1           ;vissza az elejére

Remélem nem rondítja össze a sorokat...
Röviden. A program induláskor 1-et ad az RB7-es kimeneten. Ha lenyumjuk a gombot, átáll 0-ra, majd "várakozik" egészen addíg, amíg a gombot elengedjük. Utána újra figyeli a bemenet állapotát. Ha megint lenyomjuk a gombot az RB7-re újra 1-et ír, és ismét várakozik a gomb elengedésére. És minden kezdődik előről ...
(#) deguss válasza kaninjo hozzászólására (») Nov 11, 2005 /
 
Szia kaninjo!

Köszi szépen, a program majdnem tökéletes, egyetlen szépséghibája még hogy mikor újra be akarom kapcsolni, háromszor kell megnyomni, de valóban addig ég még újra nem nyomom meg.
Szóval most azon filózok mit lehetne rajta módosítani hogy tökéletes legyen.

Mindenesetre nagyon köszönöm ötleted.
u.i.: lehet hogy a kommentet elírtad a gomb1-es résznél, mert a goto gom1 akkor teljesedik be, ha le van nyomva!
(#) deguss válasza deguss hozzászólására (») Nov 11, 2005 /
 
Bocsi kaninjo, tévedtem!

A programod kifogástalan, ne haragudj.
A probléma ott van hogy nem egyszerű úgy megnyomni a gombot hogy ne érintkezzen kétszer.
Szóval ha hirtelen mozdulattal nyomom meg a gombot, tökéletesen működik! Csak tényleg az a problémám hogy többször érintkezik nagyon nagyon rövid időn belül a gomb, de ez mellékes

A pontot megkapod, de ha van ötleted mivel lehetne kiküszübölni az említett problémát, megköszönném.

Üdvözlettel: deguss
(#) Pappee válasza deguss hozzászólására (») Nov 11, 2005 /
 
Szia!

Szerintem "pergés" mentesíteni kellene a kapcsolást. Van egy kapcsolásom hozzá itt: http:attilapapp.uw.hu
Ezen belül FAVORITES,egyéb(kapcsolások),LCD modul leírás. A 3.ábrán láthatsz egy lehetséges megoldást. Nekem ez a tippem

További programozásokhoz sok sikert és kitartást kívánok!

Üdv.appee
(#) deguss válasza Pappee hozzászólására (») Nov 11, 2005 /
 
Köszi szépen Pappee, biztos működne, csak így utólag nem tudom nem hiszem hogy egyszerű lenne beleépíteni a három nyomógombhoz a "pergésgátlót" ahogy az itt a HE-n is le van írva Topi cikkében.
De köszönöm, a következő projektemnél tudni fogom .

Üdv: deguss
(#) kaninjo válasza deguss hozzászólására (») Nov 11, 2005 /
 
Szívesen!
Egy lehetséges megoldás: teszünk egy párszor 10, esetleg 100-200 msec-os várakozást a progiba, mielőtt újra figyelné a kapcsoló állását.

valami ilyesmit:

  1. cblock  0x0C
  2.         tick   
  3. START
  4. .
  5. .
  6. .
  7. gomb2
  8.       btfsc      porta,4            ;várunk a gomb elengedésére
  9.       goto      gomb2            ;még lenyomva
  10.       call      Delay            ;a gomb elengedve, várunk egy picit...
  11. .
  12. .
  13. .
  14. gomb4
  15.       btfsc      porta,4            ;várunk a gomb elengedésére
  16.       goto      gomb4            ;még lenyomva
  17.       call      Delay            ;gomb elengedve, várunk egy picit...
  18. .
  19. .
  20. .
  21. Delay           movlw   0xFF
  22.                 movwf   tick
  23.  
  24. Delay_loop      decfsz  tick,f       ;a tick file-t csökkentjük addíg, amíg 0 nem lesz...
  25.  
  26.                 goto    Delay_loop
  27.                 return          ;visszatér a call-t követő utasításhoz

(#) Norberto válasza kaninjo hozzászólására (») Nov 12, 2005 /
 
Sziasztok!

Ha már létrejött egy ilyen téma is, nem nyitok újat egy hasonlónak

Van egy elég szép nagy kijelzőm, biztos sokat is tud. Típusszáma:

Powertip
PG240128BRS-ATA-B

Tehát egy 240x128-as kijelzővel állunk szembe. A gondom az, hogy nem igazán értem a működését. A másik gond az időzítés...azt hogyan oldom meg, ha PIC-et használok?
Mert ugye ha 4MHz-es kristályt teszek a PIC-re (16F873), akkor egy órajelciklus 0,25usec lesz. Tehát gondolom szoftveres időzítést kellene csinálnom...és azt hogy? Miképp működik?

A másik gond pedig, hogy maga az LCD hogyan működik? Milyen parancsokat kell írni neki, hova? Hogyan tudok egy meghatározott helyzetű pontot kijelölni, és kigyújtani? Marhára nem vágom ennek a belső működését

Nagyon megköszönném, ha valaki segítene

Itt az LCD-hez az elég szegényes GYÁRI leírás:

[link=http://users.atw.hu/pupak/LCD.pdf]http://users.atw.hu/pupak/LCD.pdf[/link]
(#) hzsolt77 válasza Norberto hozzászólására (») Aug 30, 2006 /
 
Sziasztok!
nem akartam új topicot nyitni , de szerintem idevág a kérdésem.Adott ez az áramkör az lenne a kérdésem,hogy mit kell a programban átírni ahhoz hogy például a fénypont jobbra futásához a gombot folyamatosan nyomni kelljen mikor elengedem egyik led se világitson.Tehát a fény futása jobbra ill balra és középről csakis addig működjön míg tartom az adott gombot benyomva.Mondjuk a progizással gyerekcipőben járok,
de ha nem bonyi és valaki segít azt megköszönném...
(#) pixels válasza Norberto hozzászólására (») Aug 30, 2006 /
 
Hali

ahogy elnézem, az utolsó előtti oldalon lévő táblázat minden fontos adatot leír. az már biztos, hogy ez tud grafikus és szöveges módban is írni.

A grafikus módról van elképzelésem:

Az "address pointer" azt állítja be, hogy hol akarsz módosítani. elvileg 8-as blokkokban vannak a pontok,de ebben nem vagyok biztos. Kísérletezni kell. Tehát írsz az lcd bemeneteire:
00100100; adat1; adat2.
az adatok a pozíciót adja meg. úgy vettem ki a doksiból, egy 16bites cím a kijelző bal felső sarkától, de lehet, hogy eyik az oszlop, másik a sor. Itt is csak kísérletezés.

Aztán a "bit set"-tel állítod át a pontot. Ilyenkor a következő formátum:
1111ABBB
Ha A=1, akkor kigyújt, ha A=0 akkor elolt.
BBB pedig a pont sorszáma binárisan az "adress pointer"-rel beállított blokkban.

Szerintem ennyi.

Sok sikert!
(#) vBalu válasza pixels hozzászólására (») Aug 30, 2006 /
 
milyen technológiát ajánlotok a következő probléma legegyszerűbb és leggyorsabb megoldására? :

egy időzítő szertnék készíteni ami VB szoftverből kap egy text filet ami tartalmazza az indításokat (melyik eszközt mikor, meddig, milyen periódus, stb) de ez a text file nem állandó. Kényem kedvem szerint akár napontam akarom a sajátprogimból frissíteni. Viszont számítógép nélkül is működjön a vezérlés. Tehát PIC / AVR vagy hasonló sarlatánság a megoldás gondolom. És USB s adatcserével szeretném megvalósítani.

Előre is köszönöm az útbaigazítást!
(#) Báddzsó válasza vBalu hozzászólására (») Aug 31, 2006 /
 
pic+eeprom,(eeprom csak akkor kell ha sok az adat és nem fér a pic belső eepromjába, pl ha egy évre előre beállítod a dolgokat )
jól megírt progi, pontos kvarc (óra miatt)
USBhez ft232 chip vagy az Alacsony költségű digitális oszcilloszkóp topikban felfedezett usb uart converter AVR, mivel elég bonyi igazi usb cuccot kreálni, így meg lesz egy virtuális soros portod.
Azt a "text"et meg nem ártana átkodoltatni a progival mondjuk valami1*űbb parancsokká, pl nem: 10:00 lámpa bekapcs 1percre, hanem: 600-1-b. . . . 601-1-k. ez így összesen 8 byte lenne, (bár még ez is csökkenthető).
bár godolom te se akartad szépen fogalmazott mondatokkal vezérelni...
(#) Kokany82 hozzászólása Márc 15, 2008 /
 
Sziasztok!Segítségeteket szeretném kérni egy már meglévő program módosításában.Ez egy riasztó progia és azt szeretném elérni, hogy a rajta lévő két reléből valamelyiket (ha lehet a másodika) riasztás közben bekapcsolla és úgy is maradjon amíg nem inaktiválom.Most az első relé kapcsol be az 1. és a 2. telefonhívás között 35 mp-re.Nagyon hálás lennék ha valaki tudna benne segíteni.A progi a következő:

Segítségeteket előre is köszönöm.
(#) kobold válasza Kokany82 hozzászólására (») Márc 15, 2008 /
 
Aztán mit csináljunk egy hexa állománnyal? Lehetne segíteni a forráskódban, de nem tudom, minek rakja fel mindenki a hex-et, azzal csak nagyon muszájból, és akkor is úgy-ahogy, dolgozik az ember.
(#) dcsabi válasza Kokany82 hozzászólására (») Márc 15, 2008 /
 
Ezt ha valaki megfejti szerintem szavazz meg neki 100 pontot, ne 50-et.
Először egy használható asm kéne belőle, és abba beletúrni...
ha ez nem járható, akkor a kacsolási rajz is kéne mindenképpen a hardware környezetről.
Aztán ha ez sem megy, az adott kapcsirajz és PIC hardwarekörnyezet-re egy új progi...
Én visszafordítottam Asm-re, de így iszonyatosan nehéz valamit is módosítani rajta...
Ha az eredeti asm megvan az többet segítene...
Ha ezek sem mennek, barkácsolj bele logikai IC-ből azt a kiegészítést amit akarsz, vagy egy másik pic-cel pl 12f675- tel ha nem akarsz egy teljesen új riasztóprogit...

PIC_RIA.asm
    
(#) Kokany82 hozzászólása Márc 16, 2008 /
 
Bocsi de, nem vagyok ott a progizásban.Azt hiszem ez már jó lesz.Ha tévednék akkor bocsi.
Előre is köszi a fáradozást!
(#) Kokany82 hozzászólása Márc 30, 2008 /
 
Na akkor tud valaki segíteni?
(#) ssdroon30 hozzászólása Márc 24, 2020 /
 
Sziasztok!

Van egy Parallax PING ultrahang szenzorom, és még régen találtam hozzá egy elvileg működő
példaprogramot PIC-hez. Elméletileg minden stimmel a kódban, és mégis van valami ami miatt nem változik a TMR0 tartalma. Nem tudom, hogy a PING szenzor hibásodhatott e meg, bár ennek csekély valószínűségét látom.
A szenzor LED-je másodpercentként villog, gondolom ez azt jelenti, hogy működik.
A példaprogramot mellékeltem.
Remélem valakinek van valami jó ötlete.

Üdv.:
ssdroon30

ping.c
    
Következő: »»   1 / 1
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