Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Sziasztok!
Még elegánsabb: a stack-re tenni egy új elemet (push), abban a TOSU, TOSH, TOSL regiszterek segítségével beállítani a kívánt címet, majd egy return segítségével oda ugrani... Még akkor is használható, ha a szubrutin hívás (megszakítás) által mentett címet kell módosítani... Sziasztok
Sziasztok!
Ez sajnos rontja a MENÜ regiszter tartalmát... A xor önduális művelet (A^(A^B)=B) - A MENÜ változó értéke megmarad, a feldolgozó rutinok hívásakor W=0:
Sziasztok
Igen, ezt érdemes megjegyezni, mert ha kevés a RAM, akkor így szépen meg lehet őrizni a változó értékét, ami szerint az elágazás történik.
És a stackes módszer... Istenem, Z80, 6502 és 8088 programozáskor mennyit használtam én is, de valahogy megpróbáltam ráerőszakolni magam az idők során arra, hogy ha lehet, inkább kerüljem.
Hali!
Lenne egy kérdésem a WinPIC800-as programmal kapcsolatban. A képen sok fajta PIC szürke, és ha ilyeneket választok ki, akkor nem csinál semmit a program (nem olvas, nem ír..) Vajon miért?
Én a W tartalmát akartam megőrizni, nem a MENÜ-ét, mivel Attila programjában a W-ben jött a menü értéke. Tudom hogy fordítva logikusabb, de ez volt a kiindulási alap.
Idézet: „Akkor már inkább a return stack tetejére kellene beírni, s egy return utasítással ráugratni” Sokkal "egyszerubb" akkor mar, ha a komplett szubrutint atmasoljatok egy fix helyre, igy a GOTO/CALL-t nem kell cserelgetni
Van valami értelme/előnye annak, hogy a gyári demókban, bootloadereknél a POWER-UP TIMER (PWRT) le van tiltva? Vagy megfordítva:származik-e valami hátrány abból, ha a HID bootloderrel beégetett alapértelmezett konfigurációban PWRTEN = ON lesz beállítva?
A PICCOLO projekten rágódom egyébként, s az alapértelmezett konfigurációt próbálom tökéletesíteni. Például be fogom kapcsolni a Brown-Out detektálást, hogy a tápfesz megszűnésekor a haldokló program, miközben az utolsókat rúgja, ne nyírja ki a bootloadert. Ez buta módon nincs beálítva a gyári programokban!
Szerintem az lehet a hatterben, hogy az eszkoznek eleg keves ideje van valaszolgatni a host kerdeseire. Es ha bedugod, lehet a host tul gyorsan kerdez (pl ha 64ms-et var a PWRT az mar szinte biztos tul sok), na es akkor az eszkozod nem valaszol idoben es igy nem lesz sikeres az enumeracio. Es ebben az is benne van, hogy lehet X operacios rendszer alatt mukodni fog, Y alatt meg nem. De ez csak az en sejtesem, nem neztem most pontosabban utana.
A goto utasitas cimehez kepest vissza ugrik 1-et
Csak egy felet mert a goto két szavas. Vagy nem?
A 16-osoknál a GOTO még egy szavas ( bár a kérdező nem írta a típust!) ...
Steve
Sziasztok!
A 16F-en egy végtelen ciklus - megszakítás még bejön, a kiszolgálás lefut... A 18F-en egy nop végrehajtása Mind a kettőn törlődik az előolvasott utasítás, +1 végrehajtási ciklust jelent. Sziasztok
Ugyan nem PICet, hanem AVR-t programozok, de a kérdésem univerzális. Nyomógombkezelésnél szerintetek mi a legjobb prellmentesítő megoldás? Azt megoldottam még egy korábbi áramkörnél, hogy a gomb nyomva tartása alatt ne okozzon többszöri érzékelést az, hogy közben többször lefut a program, de némi prellezés még így is volt, érthető módon, ugyanis a megoldás nem azellen irányult. Új timer egység bevonásával és új interrupt készítésével megoldhatónak gondolom a problémát, de nincs ennél egyszerűbb megoldás, kedves tapasztalt mikrokontrolleresek?
Szia!
Egy kis összeállítás... Szia
A GOTO $-1 az előző sorra ugrást jelenti 16-osoknál ( az előző programmemória helyre!) !
Steve
Legegyszerubb megoldas, ha a gomb elso megnyomasakor beiktatsz egy kenyszer varakozast, ami a feltetelezett prellezesi idon tul nyul. Utana megint kekerded a gomb allapotat.
Ez lehet interrupt nelkul is csinalni (ha az alkalmazas megengedi), vagy interruptosan (bejon a gomb nyomasara az interrupt, timert beallitod, hogy beszakadjon x milisec mulva, majd visszatersz es ugy csinalsz mintha meg nem nyomtak volna gombot... Mikor a timer interrupt bejon, megnezed gomb nyomva van-e... Ennek egy elegansabb valtozata, ha gomb kikapcsolasakor ezt a timert kikapcsolod, mig megnyomaskor nullazod es elinditod... Ha tehat bejon a timer interrupt, akkor a prellezesen tul van (mivel fut a timer es engedelyezve van). Hogy miert elegansabb? Mert igy nem a teljes feltetelezett prellezesi idot kell kivarni, hanem egy eleg hosszu idot ami egy-egy prellezes kozben tapasztalhato elvaltozas kozott telik el. Magyaran mindig annyit var es csakis annyit, amennyi a prellezes... Ez az egesz meg nagyon sokaig tud bonyolodni, ha mindenfele funkciok is vannak, pl. ha ismetles kell, vagy ha dupla klikket kell figyelni, vagy ha egyszerre tobb gomb nyomasa is bejohet stb stb stb... Idézet: „Es ha bedugod, lehet a host tul gyorsan kerdez (pl ha 64ms-et var a PWRT az mar szinte biztos tul sok), na es akkor az eszkozod nem valaszol idoben es igy nem lesz sikeres az enumeracio.” Meggyőző érvnek látszik, de... szerintem a host semmit sem kérdez és az enumeráció sem indul(hat) el, amíg a mikrovezérlő firmware be nem kapcsolja a SIE-t és a belső felhúzást, ezzel jelezve a hostnak, hogy valaki rákapcsolódott a vonalra. Akkor meg már vidáman fut a programom.
Hat reszemrol passz, max este ra tudok keresgelni hatha talalok valamit. Vagy addig probaldd ki kulonbozo Windows-okon meg Linux, meg MaxOS X stb, es kiderul mukodik-e -- nincs okosabb otletem per pillanat.
Ez hihetőnek tűnik, mivel firmwareből is kell tdni detach/attach-ot csinálni, mintha lenne is erre AppNote-ja a Microchipnek.
Hali!
Több helyen olvastam hogy az MCLR/Vpp lábnak programozásnál 13-13,2V kell. 12V is elég neki?
Szia!
A kérdésedre a válasz az adott PIC adatlapjában benne van, az ottani értékeket célszerű betartani. 13,4 V-ot tudsz pl előállítani egy 7812-es stabilizátorral, ha a GND-lábán megemeled a feszültséget két 1N4148-as diódával. Ilyen megoldás van az Oshon-féle LPT-s programozóban is.
Az EEPROM első tizenhat bájtját feltöltöm ezzel a két sorral:
Az utolsó három bájt kivételével fel is tölti mindet, de az utolsó három helyett nullát ír az EEPROM-ba. Illetve ha az MPLAB-ban nézem, akkor ott azt mutatja hogy beleírta 150-et, 10-et és a 130-at. De bekapcsolom az áramkörömet és az kiírja nekem az EEPROM tartalmát és nulla van az utolós három bájton! Ha átírom számítógép nélkül, a PIC-re kötött nyomógombokkal akkor elmenti az új értéket és az meg is marad rendesen. Tehát a gond az, hogy az MPLAB nem írja bele az utolsó három bájtot az EEPROM-ba, hanem helyette nullát ír mindháromba. De az MPLAB azt mutatja hogy beleírta, szóval nem értem...
Visszaellenőrzéskor azt írja, hogy benne van?
View/EEPROM-ot megnyitom és ott azt írja hogy benne van a PIC-ben a tizenhat érték.
Ez égetőprogram eeprom ablakjában kéne megnézd a tartalmat.
A PICkit2 Programmer program szerint is bele van írva az EEPROM-ba az összes érték.
Szerk.: Hopsz megvan! Tényleg beleírta az EEPROM-ba, csak a PIC a programja szerint nem onnan olvasta ki hanem egy üres regiszterből...
Visszaolvasás után is ott van?
Ha igen, akkor nem jól olvasod ki a programodban, és ezért hiszed, hogy ott nulla van.
Na, en meg mar epp azt nezegettem biztosan nem allitottad be a code_pack-ot, de meg ugysem jott ki a tortenes
|
Bejelentkezés
Hirdetés |