Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Nézd, ha nem vagy hajlandó az adatlapot elővenni, akkor a büdös életben nem fogod megtudni, hogy az ADCON0-ba milyen értéket írva mi fog történni.
Ugyanis ez nem így működik, az egy bitekből álló regiszter, és nem a beleírt "érték" a lényeg, hanem a bitek állása. Ráadásul az ADCON0 nem önmagában fog ezt vagy azt csinálni, hanem egy sor másik regiszterrel összehangolva. A sértegetést meg elteheted magadnak, azzal itt sokra nem fogsz menni (max. kitiltásra), ellenben ha normálisan kérdeznél, akkor valószínűleg értelmes és segítő válaszokat is kapnál, ahogy ez már rajtad kívül rengeteg embernek sikerült is. Részemről innentől kezdve ignore on.
Namost, en szemely szerint orvendek pepe, hogy ennyire muvelt vagy es beszeled az angolt, valoszinuleg hasznalhatnad tutorialok es datasheetek olvasgatasara is nemcsak tragar szavak roviditgetesere. En azt hiszem itt tobben normalis hangon probaltak ravezetni a PICezes helyes iranyara, senki sem kuldott el melegebb eghajlatokra, ugyhogy teljesen ertetlenul allok a hozzaszolasod elott. Reszemrol tobbszor nem kivanok valaszolni a hozzaszolasaidra!
Kivanos sok sikert az eletben!
Nem teljesen pic kérdés de:
Mennyi idő kell kb a hd44780 alapú lcd-k nek az utasítás feldolgozásához?(gondolom minden utasítástipusnál más de van neki egy max. értéke) Illetve kell várni az alsó és felső félbájt kiküldése között vagy rögtön mehetnek egymás után és csak utánna kell várakozni?
Hali
Nem tudom melyik PIC-et probalod mukodesre birni, de nezd meg az adatlapban a labak funkcioit. Bovebben : Altalaban a labaknak tobb funkcioja van es a resetnel default pl: comparator, v. AD. Namost ha nem irod at a megfelelo regiszterben a lab funkciojat nem fog mukodni mint digitalis ki/bemenet. Tehat eloszor be kell allitani a lab funkciojat majd TRISTATE es utana hasznalhato mint dig. ki/be. Pl: 16f628 -nal movlw 0x07 ; comparators OFF movwf CMCON ; innentol dig. ki/be Bocs ha tudtad de sokszor lattam mar ezt a hibat kezdoknel. Foleg ha megprobalt 16F84 hasznalata utan masokat is. Udv Vili PS. Itt jo szajbaragos leiras a PIC 16-ok lelkivilagarol
Ha jól emlékszem, adatlap szerint 2.5ms körül van a leghosszabb, én 3-at szoktam várni. Várakozni csak a teljes byte elküldése után kell.
Az init kicsit máshogy van, arra van a doksiban egy folyamatábra időzítésekkel együtt, azt érdemes betartani!
Tettem 12pf kondikat rá föld felé, ez annyit okozott, hogy full megállt a Pickit2 tőle :-S Kondik levétele után működik. Amióta több részen jeleztetek ki valamit a kijelzővel, inkább úgy hal le, hogy hibás adatokat olvas be az óraic-ből. Az LCD rutin megzavarja egy idő után (de hogy miért csak egy idő után, ez megint passz). Viszont a PIC nem áll le (az állapotjelzések működnek). Ma eddig jutottam.
Szia!
Köszi a leírtakat. Ha PIC16Fxxx lenne, az nemis lenne baj. Az kiválóan működött az MPLab 6.10 verziójával is. Azzal vidáman tudtam váltani a biteket. Újabb procival hozott össze a sorsom, 18F4321, és ezt nem kezeli a jól bevált 6.10-es MPLab. Ezért került fel a 8.00 A program hibátlanul lefordul, beégetve e PIC-be jól működik, de simulálni továbbra sem tudom, a fent említettek miatt. Lehet megpróbálkozom a 8.02-es verzióval.... hátha..
Ilyen téren nincs semmi különbség, már a 7.xx verziókban is ugyanígy működött a szimulátor. De mindenesetre nem árt feltenni a legújabb verziót.
Lehet, hogy valamit rosszul csinálsz. Amikor meg van nyitva a projekt, akkor menj a View-->Watch-ra. Ekkor megjelenik a watch ablak. Felül tudod kiválasztani, hogy mely regisztereket akarod figyelni a szimuláció során. Amit kiválasztasz, alul bekerül a listába. Na itt kattints kettőt a tartalmára, és akkor át tudod írni. De mint watt írta, bemenetnek állított lábat így nem tudod módosítani.
PLaci,
Azt hiszem watt is meg masok is irtak, hogy ez miert van de lehet nem sikerult tisztan osszefoglalni: 1. az MPSIM-ben (MPLAB-ba integralt PIC szimulator) pontosan azokat a dolgokat lehet muvelni mint egy igazi PIC-ben, akar hardver emulator segitsegevel debuggolva akar anelkul "elesben" 2. Mikor a debuggerben vagy szimulatroban egy regiszter erteket megvaltoztatod annak pontosan ugyanuigy kell mukodnie mint a valos eletben 3. Ebbol kovetkezik, hogy mivel a portod also 4 bitje bemenet, ezert a port erteket megvaltoztatni csak kulso, hardveres modon lehet 4. Tehat a szimultorban a port atirasa JOL mukodik, azaz nem engedi neked a bemeneteket megvaltoztatni 5. Azt hiszem potyo(?) javasolta, hogy valtoztasd meg a TRIS-eket bemenetre es utana mar engedni fogja a szimulator a PORT bitek allitgatasat -ezt ugyanugy regiszter modositassal ered el, elobb TRIS allitgatas, utana PORT allitgatas 6. Ha "uzemszeruen" szeretned csinalni akkor pedig a megoldas (amit emlitettem is mar), hogy a stimulusnal hozz letre egy port labat billegteto esemenyt, amit a stimulus ablakban az egerrel torteno kattintgatassal tudsz kivaltani, igy mikor a portot tesztelni szeretned "mi tortenik ha magas lesz" stb elven, akkor egyszeruen csak oda kattintasz es a port laba "kivulrol" magas allapotba kerul. A valtozast a regiszterekben is latni fogod termeszetesen... 7. Ezt a stimulust el is mentheted es kesobb is hasznalhatod, sot akar letre is tudsz hozni olyat, hogy bizonyos idokozonkent, vagy esemenyek bekovetkeztere a port kattintgatas nelkul valtozzon neked. Lehet meg sokkal sokkal bonyolultabb teszteket kesziteni amivel akar soros porti kommunikaciot vagy mas inputokat lehet leszimulalni, de most nem kellene ennyire elore rohanni, a kattintgatast ha elered akkor mar valoszinuleg elolrebb vagy mint most. Otthoni geprol megirom majd hol van a menupont, ott van 8.02-es MPLAB, itt nincs. Sok sikert addig is!
Az adatlapjában ahol a parancsok táblázata van, ott valahol a táblázatban szerepel, hogy mennyi ideig tart az adott parancs végrehajtása. A legtöbb menet közben használt parancs - úgy emlékszem - 42us.
Sziasztok!
Nagyon köszi a leírtakat. Ezek szerint ebbe sokkal jobban bele kell mélyedni mint a régiekbe. Pl a régiben ha egy A/D konverziót szimuláltam, akkor addig ugrált vissza amég a jezőbit 1-re nem váltott. Ezt gyakorlatben úgy oldottam meg, hogy ugráltattam párszor, majd manuálisan átírtam a jelzőbitet "készre", és az eredményt tartalmazó regiszterbe beírtam valamit a várható tartományból, és már lépkedhettem is tovább. Nem kellett semmi Watch-al bíbelódni. (Nekem a watch-ról csak a watchdog urott be ) Biztos én vagyok nagyon földhözragadt, de számomra az sokkal átláthatóbb volt. Na mégegyszer köszi, és próbálok keresni valami leírást erről az új módiról
Nekem is fura volt először, de most már sokkal jobban tetszik, mert jobban áttekinthetőek a regek.
Miért, Te hová tetted azokat a kondikat? A PICKit2-re? Vagy hogy érted, hogy leállt tőle?
Tégy az rc5c372 1-es lábára (INTRB) egy pár k-s felhúzó ellenállást és a program legelején programozd fel az órát, hogy küldjön ide clockout-ot.
Amikor "megáll az élet", akkor mérj rá erre a kimenetre, hogy jár-e az óra oszcillátora. Gyanítom, hogy nem ezzel lesz gond, csak a kommunikációban történik valami hiba.
A clockout fel van programozva, így csak az ellenállás fog kelleni, köszi a tippet, rápróbálok. Nekem is a kommunikáció a gyanum, de sose lehet tudni.
Gyári demopanelem van, a Pickitről kapja a tápot. Külső táppal sem megy az áramkör rendesen. A kondik a kristály két lábáról a föld felé lettek feltéve a panelen. Számomra is teljesen felfoghatatlan a Pickit reakciója. A jelenség az volt, hogy a Pickit szoftvere nem indult el. Ha lehúztam a Pickitről az áramkört, akkor elindult. Kimértem mindent kétszer, zárlat nem lehetett. A Pickitet azért használom, mert így nem kell lehuzogatni programozás és teszt között az áramkört.
Ott valami nagyon nem gömbölyű! Még hogy nem megy külső táppal, meg lefagy a PICKit2?
Ezt meg kell oldanod mielőtt tovább lépsz, mert csak szívni fogsz! Mérd végig külső táppal az áramkört, és egyszerű progit tegyél a PIC-be, pl. LED villogtatót. Ha az sem megy, akkor rossz a panel valahol... (egyébként, Te nem alszol?
Sziasztok.
USART-tot próbálok életre kellteni a 16F887-es PIC-en. De valami miatt nem működik. A leírást többször elolvastam. Egyenlőre csak tesztelni szeretném a működését, és SCOP-on nézni a jelalakot, hogy a beállított baudrate jön-e ki a kimeneten. Itt a kód, ami nem működik: #include cblock 0X20 D1 D2 endc org 0 Start bcf STATUS, RP0 bcf STATUS, RP1 ; bank 0 bsf RCSTA, SPEN bsf STATUS, RP0 ; bank 1 movlw 0X70 movwf SPBRG ; 16 bit baudrate generator hi-bit set movlw 0X02 movwf SPBRGH ; 16 bit baudrate generator low-bit set movlw B'01000010' movwf TXSTA ; Set async, low speed mode bsf STATUS, RP1 ; Bank4 movlw BAUDCTL bcf STATUS, RP0 bcf STATUS, RP1 ; bank 0 Loop movlw B'10101010' movwf TXREG bsf TXSTA, TXEN call Delay_195ms goto Loop Delay_195ms movlw 0X00 movwf D1 movwf D2 Delay_195ms_loop decfsz D1,f goto Delay_195ms_loop decfsz D2,f goto Delay_195ms_loop return end Köszi előre is a segítséget.
A bankokat nem néztem végig, hogy minden regisztert jó bankban címzel-e, azt nézd végig még egyszer a biztonság kedvéért.
Ellenben a következők nem igazán tetszenek:
Itt a 9 bites transmitet engedélyezed, valamint a TRMT, csak olvasható bitbe írsz 1-et. A TXEN bit, amivel a küldési funkciót engedélyezed, az nincs beállítva.
Itt pedig valószínűleg nem ezt akartad írni, hanem valamilyen értékkel feltölteni a BAUDCTL-t, azaz egy movlw/movwf utasításpár kellene.
Ezt sem így illene megcsinálni, nem kell soros kommunikáció közben a TXEN-t kapcsolgatni. Azt kell ellenőrizni, hogy a puffer üres-e. Ezt lehet a PIR1 regiszter TXIF bitjének állapotával ellenőrizni, olvasd el az adatlap 12.1.1.3 pontját! Ha a puffer írhatóságát ellenőrzöd, akkor teljesen felesleges a külön időzítési ciklus is.
Szia Amarton,
Eloszor is, gondolom az ures "#inslude" sor az valojaban nem ures, ugye? Viszont hianyzik ebbol a kodbol a konfiguracio, igy ha config problemak lennenek azt nehez lenne megsugni. Kerdesek: 1. Mi a hiba? Mert ezt nem irtad le 2. Mekkora az fosc? A delay195ms rutinodbol szamolva arra kovetkeztete, hogy 4MHz(?) 3. Milyen baud rate-et szerettel volna elerni? (a 0x0270 -et datasheet peldai kozott nem leltem, es a 4MHz-es FOSC ot feltetelezve ez 100 baud - ezt szeretted volna?) 4. En nem alkalmaznek statikus varakozast. Ha a TXIF-et figyeled, akkor az 1, ha a TXREG-be irkalhatsz. 5. a MOVLW BAUDCTL az gondolom eliras nem? Gondolom ehelyett egy BSF BAUDCTL,BRG16-ot szerettel volna?
Sziasztok!
A megszakításokkal kapcsolatban kérdezném, hogy ha a főprogramban sleepre küldöm a PIC et és megszakításra "ébred", akkor a megszakítás lefutása után újra aludni megy? Hogy van ez?
Automatikusan nem. De ha a főprogramban ismét ráfut a SLEEP utasításra, akkor ismét aludni megy.
Idézet: „A leírást többször elolvastam.” Azt a részt is, amelyik leírja lépésről lépésre, hogyan kell beállítani a soros küldést? Van ez a topik, ugyanerről szól: Link
Értem, köszi. Csak az nem tiszta hogy ebben az esetben miután lefut a megszakítás rutin akkor (ha egyébként nincs sehová küldve pl. GOTO val) hol folytatódik a főprogram? Az elején? Mert ha főprogram futása közben következik be a megszakítás akkor tudomásom szerint onnan folytatja a program futását ahonnam meg lett szakítva az iterrupttal. Ezért az lenne a logikus hogy ha sleep ből ébred akkor visszamegy sleepre.
A SLEEP-et követő utasításra megy, miután lefutott a megszakítás. Szóval ha a főproramod egy
akkor a megszakítási rutin után gyakorlatilag azonnal ismét alszik.
Nemrég betettem egy komplett USART progit....
Itt van:
(Ja igen, csak a keresőt kellett használnom, és feljött rengeteg infó a témában, szerintem neked is hasznoos lenne....) |
Bejelentkezés
Hirdetés |