Fórum témák
» Több friss téma |
Igazad van, most néztem meg, hogy mennyi lehet a max. PCL a program futása közben. 0x8B, tehát bőven benne van. Akkor a szimulátorral is eltévedne.
Én máshol keresem a hibát, mert amikor a NEM vezérelt step bemenetet testre húzom akkor minden oké!
Az első gondok után már nem a pc párhuzamos portjáról kapta a vezérlést hanem 4 szög generátorról, meg 3V-os elemmel kézzel pöcögtetve is.
Idézet: „amikor a NEM vezérelt step bemenetet testre húzom akkor minden oké!” Ez melyik is a pic bemenete lenne , akkor ezt programból is megtudod csinálni.
Amikor az egyik motornak lépegetnie kell, pl a step1 (PORTA0) kap léptető impulzusokat akkor a másik motornak vagy kell mennie vagy nem attól függően, hogy a step 2 (PORTA2) lábára kap-e impulzusokat. Ez a vezérlőszoftvertől függ.
Tehát az a feladat, hogy a step1 jelére a PORTB alsó 4 bitje jobbra vagy balra lépjen a dir1 "L" vagy "H" szintjétől függően. Ennek viszont a másik motorra (PORTB fölső 4 bitje) ne legyen hatása. Természetesen a step2 jele sem befolyásolhatja az első motor jeleit. Ha kipróbálod MPLAB-bal a feltett programomat és stimulussal izgatod PORT A0 és A2-t akkor PORTB figyelésével láthatod, hogy mi történik. A baj az, hogy a valóságban nem ez történik.
Ami feltünt nekem , az az hogy a szimulátorban te irod , hogy jól müködik .Viszont a szimulátorban csak mondjuk a (PORTA0) át vezérled , és a szimulátorban a (PORTB) felső 4 bitje nem vezérlődik , viszont valóságban meg igen.Függetlenül attól , hogy nem is kap semmilyen vezérlést .
Nos ha a Pic (PORT B) lábát nem kötöd be akkor mi a helyzet .Mert azt tudjuk , ha testeled , akkor jó .
Nem a PORTB lábait testelem, mivel azok kimenetek, hanem a PIC egyik bemenetét. Azt az állapotot állítom elő mintha pl. a STEP1 "L" ben maradt volna. Most mindegy, hogy miért. Ha ezalatt STEP2 kap négyszögjelet akkor jó! Tahát motor 1 áll, motor 2 megy. Viszont, ha STEP1 "H"-ban van akkor motor 1 megy!, kb fele sebességgel mint motor 2. Motor 2 azzal a sebességgel megy amivel kell mennie.
Ha megcseréled a motorokat , akkor is ez van ? Biztos hogy jó mindkét motor .Mert ha step1 , és step2 is mondjuk H ban van , és a teljesítmény fokozat kimenetén meg van rendesen a feszültség , akkor felvetődhet , hogy a motorral van valami amelyik , csak felesebességel megy.Nyilván ha motor cserekor is ugyan az a helyzet , akkor a motorok jók viszont akkor meg kell nézni , hogy step1 H ban mennyi feszültség van jelen amiért csak fele sebességgel megy , és a step2 L állásában a hozzá tartozó Pic bemeneten mi a helyzet ilyenkor.
A hozzászólás módosítva: Okt 25, 2016
Teljesítmény fokozatok és motorok nélkül, a PIC kimeneteire LED-eket rakva pontosan lehet követni az eseményeket. (Egyébként ezt már írtam)
Én mondjuk feszültség értrékekre lettem volna kiváncsi .Na mindegy ha nem bánod holnap folytathatjuk , mert lassan bealszok .Szóval holnap .
Moderátor! A tegnapi 21:28-as hozzászólásom mellékletét szerintem törölni kellene, mert a file hibás!
Megtaláltam a hibát, a jelváltozás figyelésem rossz volt. (Amikor az egyik step magas és a másik kapja az impulzusokat ugyanúgy lépegetett mint a valóságban.) Jó volt beszélni róla, így megtaláltam. Új programmal működik! Köszönöm a hozzászólásokat.
Nem a moderátort kellene ugráltatni, hanem feltenni a jó megoldást, amennyiben publikálni akarod. Mellékesen, egy ilyen kérés könnyen elkerüli a figyelmet, a sok hozzászólás között könnyen elsikkad. Ha töröltetni akarod, arra minden hozzászólás fejlécében ott van a "Moderációt kérek" menüpont a "V" betűnél.
Elnézést kérek, később megtaláltam a megfelelő formát és jeleztem a kérésemet. (A file azért volt fenn, mert nem találtam a hibát és segítséget kértem.
Sziasztok!
Észrevettem egy hibát az egyik programomban, ami a hiba ellenére működik. A hiba abban áll, hogy egy kimenetet nem a LAT, hanem a PORT paranccsal kapcsoltatok. Hogy így is működik, az véletlen, vagy a PIC 18-as széria elfogadja mindkét parancsot a kimenet kapcsolására?
Szia!
A PORT is írható, csak a régi, 16-osoknál megismert RMW hiba itt is megmaradt, azaz szükséges az árnyékregiszterek használata...ezek a LAT-ok !
Köszönöm. Akkor összességében a már beszerelt áramköreimben ez a hiba igazából nem fog gondot okozni? Vagy biztosabb, ha mindet újraprogramozom?
Ismered az RMW problémát ? Ha nálad ez nem gond, akkor OK !
Nem tudom, mi az RMW probléma. Ha felvilágosítanál róla megköszönném.
Vegyük a következő kódot:
Ezzel az a probléma, hogy a PIC úgy működik, hogy a PORT írásakor beolvassa a teljes PORT-ot (R), módosítja a szükségest (M) és visszaírja az eredményt (W). Ez azt jelenti, hogy BSF PORTB,0 hatására beolvassa a PORTB-t, a nulladik bitet 1-be teszi és visszaírja a PORT-ra. Ezután a BSF PORTB,1 hatására beolvassa megint a PORT-ot, az 1.bitet beállítja 1-be és visszaírja a PORT-ra. Ezzel elvileg nincs is baj, de ha pl. a PORTB 0. bitjét egy kapacitív terhelés "fogja", akkor nem biztos, hogy a második BSF utasításnál már kialakult az 1-es szint, így 0-t olvas be és azt írja ki a PORT frissítésénél, azaz a várt 11B kombináció helyett 10B lesz ! Ez még további problémákat okozhat egy aktív eszköz csatlakoztatásánál, ahol az oda-vissza kommunikáció miatt egy láb hol kimenet, hol bemenet...! Ha az előző program helyett a következőt alkalmazod, akkor biztos, hogy kialakul az 11B kombináció!
Megoldás az un. árnyékregiszterek (shadow) alkalmazása, ami azt jelenti, hogy egy másik regiszterben módosítom a biteket, amit időnkét átmásolok a PORT-ra ( pl.megszakításból!)! Ezt a 18-as sorozatnál megoldották a LAT regiszterekkel ! Remélem érthető volt a leírás ?!
Igen, így már értettem. Köszönöm.
Az elvi esély sajnos meg van a hibára, de remélem nem fog továbbra sem gondot okozni.
OK, ha van rá lehetőség, akkor szerintem javítsd ki !
Buék!
Az érdekességek rovatba feltett rakétakilövő kapcsolási rajzát és programját itt tenném közzé.
A hozzászólás módosítva: Jan 2, 2017
Üdvözlet mindenkinek! Egy Hatalmas segítséget szeretnék kérni! Építettem egy saját elektronikát,amit egy Pic18f14k22 mikrovezérlő irányít. Nagyon tömören az elektronikáról: Be olvas egy digitális impulzust,eltárolja egy általam deklarált változóba (RAM-ba). Be olvas még egyet,el tárolja egy másik változóba. A kettő értéket összehasonlítja és a végeredménynek megfelelően egy másik lábon digitális 0 vagy 1-et küld ki. A problémám a következő: Néha csinál olyat,hogy új érték felvétel esetén a régi értéket hagyja meg a változóban,vagy teljes mértékben önálló életet él. Függetlenül,attól,hogy előtte töröltem az értéket a változóból. Hogy ez mikor keletkezik? Nagyon random alkalmakkor. Van úgy,hogy napokon át használva van és hibátlanul működik,viszont olyan is van,hogy 5 perc után előjön. (Mind a kettő esetben ugyanazt csinálja a mikrovezérlő) Külön kimértem mindent a NYÁK-on mikrovezérlő nélkül. A legextrémebb környezetet is beleértve és hibátlanul adta/fogadta a jeleket,vagyis külső eszköz nem lehet probléma. 5db ugyanilyen mikrovezérlőn teszteltem,hátha az a hibás de sajnos nem.
Hogy oldódik meg? 2 módon tudom meggyógyítani. Vagy le veszem tápról,várok kb negyed-fél órát és újra vissza,vagy újra rá "égetem" a programot. Valószínűleg van valami bit vagy ilyesmi,ami 1x átbillen és akkor megőrül,viszont nem tudom mi az. Debuggon végig futtattam az egészet,figyelve a biteket,de semmi furcsát nem tapasztaltam. Végig hibátlanul ment. Raktam bele szoftveres resetet pont az ilyen esetekre,azt sikeresen véghez is viszi,viszont a probléma nem szűnik meg. Esetleg van valami olyan funkció,ami teljesen vissza tudja állítani a mikrovezérlőt alaphelyzetébe? (pl POR?) Akkor elég valószínű meg oldódna a probléma. Válaszokat nagyon köszönöm!
A kapcsolás és a program ismerete nélkül nem fogunk tudni segíteni.
Akkor egyszerűbben kérdezem. Milyen módon tudnám alaphelyzetbe állítani a mikrovezérlőt? Power on reset képes ilyenre?
Lehet nincs köze a problémához, de kötelező olvasnivaló: Bővebben: Link.
Ha most csak találgatni lehet, én a változó elhelyezését, elérését ellenőrizném először (acces / banked, BSR regiszter kezelése).
Mit értünk "alaphelyzet" alatt? Ha a sima reset nem oldja meg a problémát, csak az újraégetés akkor egyik reset sem fogja. Meg kéne nézni, hogy ha kiolvasod a programot egy "hibásból" és összehasonlítod az általad fordítottal, hogy látsz-e különbséget.
A MCLR láb fel van húzva a Vdd -re? A felhúzó áramkörben van dióda?
Az egyszerű resetek nem törlik a memóriát, tehát azok a regiszterek, amiknek nincs definiált reset állapotuk megtartják értéküket (szerintem ezért kell neked 20 percet várni, mert addigra ezek is törlődnek). Esetleg inicializáláskor törlöd a teljes memóriát.
|
Bejelentkezés
Hirdetés |