Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nem, akkor azt maskepp kell megcsinalnod. BSF / BCF az Bit Set File ill Bit Clear File... Magyaran 1-1 bitet billegtetsz vele. Ha tobbet szeretnel, akkor pl csinalhatsz ilyet:
Rendben, köszönöm szépen!! Tényleg ebbe bele sem gondoltam, hogy az csak egy bitet billent. Azt meg mondod nekem, hogy az IORWF utasítás mit csinál? Mármint, az tudom, hogy bitenkénti vagy kapcsolat, de itt jelen esetben nem értem. Ja és azt, hogy a iért van hullámjel a második LEDSOR előtt?
Trudnia, a Te segítségedel átírtam a programomat,a mi edig egy LEDet kapcsolt fel, a program hibátlanul lefut, de ha beégetem, akkor már alapból úgy indul, hogy az RB0-3ig az összes led világít, és nem tudom kapcsolgatni. Nincs ötletem mi a rossz, belinkelem, hátha ti láttok valamit, amit én nem!
sziasztok, abban kérem a segítségeteket, hogy javasoljatok minél egyszerűbb megoldást. A dolog a következő:
16F677 (16F690 kistesója) óra áramkör, külső tápról, mert 7szegmenses multiplexelt kijelzője van. Namármost, ha külső táp megszűnik, a picnek sleepbe kéne ugrania minél hamarabb, és ezzel együtt kikapcsolni a kijelezést. Viszont ha a táp visszajön újra bekapcsolni. Egy 3V-os gombelem a "backup" és 3.3Vos tápról menne az áramkör. A kérdés, hogy hogy szokás ezt megoldani, figyelni egy adc-s lábbal a feszt és pollingolni, vagy van valami speciálisabb megoldás? köszi előre!
Nézz utána a comparátor működésének, és a Sleep-nek az adatlapban.
A MOVLW-nel hianyzik a "malacfarok" azaz a ~ jel... az az egesz byte-ot negalja... Ha anelkul csinalod akkor ugye a felso 4 bitet nullazod ki es az also 4 marad valtozatlan...
Comparatorra tedd ra a kulso es belso tapforrast... Amugy ha kulso ora aramkorod van (RTC) akkor azokban amugy is szokott lenni belso taplalas, az oraja nem all le soha, a PIC-nek viszont nem kell mennie meg sleep modban sem... Tehat mikor a tap vissza jon a PIC amugy is lekerdezi az aktualis idot az RTC-tol es elkezdi a kijelzest...
Köszi, működik, pedig amit irtál segitséget abban benen volt a ~ jel, valószinű véletlenül kitörölhettem vagy ilyesmi. Köszi a segitséget!
pic timer1-je méri az időt, tehát kell a sleep a picnek.
@Watt: comparátort még nem használtam picben, de köszi, megnéztem, jólesz! köszönet mindkettőtöknek!
Hello! Dolgoztam egy kicsit a módosításon, de nagy eredményt továbba sem értem el.
Átírtam a progi elejét, ahogy 12F629-be szokott lenni. Lábak, kimenetek, TRISIO, OPTION_REG, stb. MLAB szerint minden rendben, valamint a PIC szimulátorban ismét megjelennek az adott kimenet a jelek (GPO,1,2), de áramkörben nem indul. Természetesen a progam berását, config biteket nem szurom el... Felteszem az általam módosított progit Ha valaki nem látja hogy mi lehet a gond, akkor holnap veszek egy F509A-t és hagyom.... Bár jobb lett volna ebben. A progi módosítva: (ha valaki a többi sort is megnézné beszurhatom -- kb.+80-85 sor) LIST p=12f629a ; proc. defs #include ; constants __CONFIG _MCLRE_ON & _CP_OFF & _WDT_ON & _XT_OSC & _BODEN_OFF & _PWRTE_ON #DEFINE OUT1 GPIO,0 #DEFINE OUT2 GPIO,1 #DEFINE OUT3 GPIO,2 #DEFINE OUT1_M 0x00 #DEFINE OUT2_M 0x01 #DEFINE OUT3_M 0x02 ORG 0000h CLRF GPIO MOVLW 0X07 MOVWF CMCON BSF STATUS,RP0 MOVLW 0X01 MOVWF OPTION_REG MOVLW B'00001000' MOVWF TRISIO MOVLW 0X85 BCF STATUS,RP0 BCF INTCON,GIE Idézet: „A progi módosítva: (ha valaki a többi sort is megnézné beszurhatom -- kb.+80-85 sor)” Ne szurd be, hanem csatold a Filemelleklet segitsegevel. Az eredeti programot is csatolhatnad, hogy ossze lehessen nezni mit kell(ene) csinalni. Idézet: „_WDT_ON” A későbbi programon belül le van kezelve a watchdog-áramkör megfelelő időközönként?
Ennek mit kellene csinálnia? Én nem látom értelmét, ugyanis a (nem használt) timer0-nek konfigurálsz vele előosztót. Ha netán a watchdognak akarsz előosztást beállítani, akkor bit 3-at is 1-be kell állítani!
Ez mire jó?
CMCON és TRISIO beállítása jónak tűnik, én is így csinálom. A BCF/BSF STATUS,RP0 helyett átláthatóbb a BANKSEL TRISIO/ BANKSEL GPIO. Bár ízlés dolga...
Amit igy kapasbol latok ebben, hogy van benne egy RMW hiba - valoszinuleg abban az eredeti PIC-ben epp mukodott a dolog, de nem neveznem az ilyet stabil megoldasnak.
Ugye itt egymas utan modositasz ket portlabat, de ha rosszul jonnek ki a dolgok, akkor a masodik hatasara az elso kinullazodik. Ez nem a program logikajanak a hibaja, hanem hardware idozitesi problema amivel szamolni kell. Nem ismerem a protokollt amit hasznalsz, de ha megengedi, hogy kb 2us idozites legyen a ket atmenet kozott a jelenlegi 1us-hez kepest, akkor a kovetkezonek mukodnie kell itt anelkul, hogy a tobi idozites befolyasolva legyen:
Ha ez nem megengedheto, akkor trukkozni vagy kenytelen, pl:
Ez ugye megforditja a 0 es 1 bitek allasat, aminek a hatasa pontsan ugyanaz lesz mint amit jelenleg a program muvel: Mivel alapertelmezesben az 1. bit magas, es a kodod ezt alacsonyra teszi az lbl_1 -nel ami mellett a 0-sat magasra emeli, egy negacionak epp ugyanez lesz a vegeredmenye... Van megegy hely ahol egymas utan kozvetlenul modositas ket bitet:
Ezt pedig igy lehetne kitrukkozni:
Remelem mukodni fog! Idézet: „„_WDT_ON” A későbbi programon belül le van kezelve a watchdog-áramkör megfelelő időközönként?” En ugy nezem igen, bar bevallom oszinten nem egeszen ertem mi szuseg lehet arra...
Üdv !
Igen furcsa dologgal fordulok hozzátok. Uj rendszer telepítése után felraktam (mondván legyen egy friss cucc a gépen) az mplab 8.15a Interim Release verzióját a gépre. A hibajelenség, illetve inkább csak idegesítő jelenség az az, hogy minden indítás után ha megnyitok egy projektet , akkor az mplab mindíg a ... local settings/temp könyvtárban akar keresni és oda is akar menteni. A config biteket és a programozót is újra be kell állítani, minden egyes projekt megnyitáskor. Valaki találkozott már ilyen problémával ?
Üdv!
A kedves konzuelensem instrukcióit követve irtam egy kis progit, de nem működik, és nem értem miért. A konzulensem jelenleg nem hajlandó segiteni, szóval minden reményem bennetek van. A kis progi lényeg, hogy ha pl az RD0-n logiaki egy van, akkor az RB0-n lévő led ezt világitással jelezze, ha az RD1en, akkor az RB1 en lévő LED és igy tovább. A programom lefut, de nem csinál semmit. Ime a progi:
Előre is köszönöm szépen a segitségeket!! Idézet: „movlw PORTD” es Idézet: „movlw POSI” azt csinalja, hogy a PORTD ill a POSI cimeit betolti a W-be - tehat nem a PORTB ill. POSI tartalmat! Helyette MOVF PORTB,W kellene... POSI-nel is ertelm szeruen...
Hát elég régen használtam assemblert, de nekem első nekifutásra az tűnik fel, hogy a portot literál ként olfasod be, de regiszterként írod ki.
movlw PORTD nem inkább movfw PORTD thát én először is megadnám, hogy a PORTD az bemenet !!! LIST P=16F877 INCLUDE "P16F877.INC" __CONFIG _XT_OSC&_CP_OFF&_WDT_OFF&_LVP_OFF ORG 00h banksel TRISB ; Selects bank containing register TRISB=0x00 TRISD=0xFF start clrw banksel PORTD movfw PORTD movwf PORTB goto start end Valahogy így.
Már korábban is javasolni akartam, hogy legalább egyszer vizsgáld meg tüzetesebben az utasításokat, és hogy azoknak milyen következményei vannak. Azután használd az MPLAB szimulátorát, és kövesd végig a Watch ablakban az érintett regiszterek változásait lépésenként végrehajtva a programod.
pl. ezzel mit akarsz?
A W-be beletölteni 020h-t? és ezzel?
A W-be tölteni a PORTD címét? Ha használnád a fejed, és nem mindent trudnaitól várnál megoldásnak, akkor már rég előrébb lennél! Keresd meg melyik utasítás kell neked! Aki segíteni mer, kap egy fekete pontot! Basszus, lekéstem! Ha mindent a szájába rágtok, az életben nem fogja megérteni a lényeget. (szerintem)
Köszi a segitségeket!
Watt, teljesen igazad van. Magam is tudom, hogy nem értek meg nem tudok dolgokat.(folyamatosan gyakorlok, és olvasok) Csak sajnos a konzulens tanárom pl ezt a progit kvázi megirta nekem, hogy próbáljam ki vele az áramkörömet, de nem müködik és mivel szerinte ez igy jó, nem hajlandó segíteni, meg el sem magyarázza.
Mármint, hogy a tanár írta a movlw-ket? Ez kicsit övön aluli szerintem. Na mindegy, most már gondolom érted, miért nem jó, és legalább azt is megtanultad, hogyan lehet betölteni W-be egy regiszter címét.
Hat ha ezt a tanar irta es az szerinte jo, akkor hagyd a fenebe azt az embert - ne sertsd meg, csak csinald meg a magad modjan, es mikor segiteni akar akkor bologass, hogy jaj de jokat mondd (mert azt mindenki szereti hallani ) de amugy meg csinald meg jol a dolgot hogy mukodjon is!
Javasolnam, hogy szanj ra vagy 2-3 hetet, hogy atragod magad ezeken a konyveken: mikroelektronika books En anno abbol a 3rd edition-bol tanultam meg az alapokat, es nagyon nagy segitseg volt! Es ugy nezem az az uj konyv sem rossz! 2-3 hetig ne csinalj mast csak azt a konyvet tanulgasd, es utana mar minden konnyen fog menni - mar eddig is elvacakoltal par hetet ezzel az apro feladattal ami nem lenne tobb a konyv elolvasasa es megertese utan par percnel!
Igen, ezt betüről betűre a francia konzuelens tanárom írta. Tőletek többet tanulok, mint itt kint a konzulensemtől. Szóval az ERASMUS beszámolómban szerepelni fog a fórum
Köszi a könyveket! Mindenkép elolvasom! Még egy rövid dolgot hizzáfűznék. Azért kapkodok igy, mert egy robotot kell felprogramoznom, még jó, hogy azért válalltam ezt az erasmust, mert arról volt szó hogy szélerőműveket kell méregetni meg egy progit irni, ami lementi az adatait. Szóval nem igazán voltam felkészülve PIC-ből . És dec 10ig be kell fejezenm a robotomat. Csak, hogy értsétek miért kapkodok, és kérdezek folyton!Nem győzöm megköszönni a segítséget!
(Ha kiváncsiak vagytok, akkor leirom, mit csinál a robot)
Le vagyok hidalva, hogy ilyen könyvek léteznek online-free!
Igen, kíváncsi vagyok! És azt is leírhatnád, hogy miként tervezed a programot megírni hozzá. Ha ilyen szűkös a határidő, akkor lehet, hogy többet tudunk segíteni, ha mi is értjük a feladatot.
Ennek ellenére nem biztos, hogy az lesz a jó megoldás, ha valamelyikünk megírná a teljes forrást, sokkal hasznosabb lesz neked, ha terelgetünk! Ennek ellenére egy hetet szánj rá a PIC működésének megértésére, mert anélkül nem sikerülhet a project. Ha nem bánod, lenne néhány kérdésem felsorolásszerűen, tőszavakkal utalva a témára, hogy tudod-e miről van szó, ismered-e a működését? 1. Címbusz? 2. Adatbusz? 3. Vezérlőbusz? 4. Utasításdekóder, gépi kód, hogy is működik ez? 5. Flash? 6. RAM? 7. Stack? 8. Megszakítás és lekezelése? 9. Szubrutin? 10. Az előző kettő között mi a különbség(alig van!)? 11. Számrendszerek elvét el tudod magyarázni 5perc alatt? 12. Bináris számrendszer implementálása digitális rendszerekben? 13. Bináris logika? 14. W regiszter szerepe? 15. LED előtétellenállás kiszámítása? 16. Egy NPN tranyó illesztése TTL kimenetre, relé(egyébb fogyasztó) meghajtása, tranyó védelme? Kb. ilyen kérdésekre keresd a választ, és könnyebben boldogulsz. Ha valamelyik kérdésre nincs meg a válasz, itt többen szívesen válaszolnak, én is, bár van ami nem kimondottan PIC kérdés. A kérdéseknek nincs vége természetesen, csak nem akartam 500-ig eljutni!
Örülnék minden segítségnek. Természetesen nem várom el, hogy megcsiáljátok helyettem a feladatomat, mert én sem tanulok belőle, meghát nem is szeretem az ilyet. Szóval a robot rövid müködése. Van egy nagy zöld padlószőnyeg, ezen van egy kb 2cm széles fehér vonallal egy körpálya rajzolva. A robot elején van hét senzor ami követi a fehér vonalat, illetve figyeli, hogy van-e jobb iletve bal kanyar. Mégpedig ugy, hogy ha bal elágazás jön akkor 10cm-el az elágazó előtt van egy kb 4cm hosszú vonal a pályára merőlegesen, ha jobb elágazó akkor a jobb oldalon. Illetve a robot jobb oldalán van egy sharp senzor ami a jobbról érkező robotot figyeli(egy időben két robot van a pályán) és ha érzékel robotot, akkor a jobbkéz szabályt alkalmazza, és ad neki 3 másodpercet hogy átmenjen az elágazón. Szóval a porgimank azt kellene csinálnia, hogy a 7 senor adataiból eldönti hogy egyenesen, jobbra, vagy balra kell-e kanyarodni, illetve jön-e robot jobbról, és ezt küldi egy másik PIC nek ami pedig a robot sebességét és fordulási szögét irányitja.
Mellékeltem egy képet a robotról és a pálya egy részlete is látható. Amit most én csinálok progit az egy logikai áramkörrel van most megvalósitva és a tanárom ezt szeretné PIC re cserélni. Remélem sikerült világosan fogalmaznom aképek valamiért nem jelentek meg ittBővebben: Linkmeg tudjátok nézni! |
Bejelentkezés
Hirdetés |