Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   676 / 1320
(#) Hp41C válasza szilva hozzászólására (») Feb 15, 2010 /
 
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
(#) Hp41C válasza watt hozzászólására (») Feb 15, 2010 /
 
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:

  1. movf     MENÜ,w
  2.     xorlw    Menü1
  3.     bz         Menü1_feldolgoz
  4.     xorlw    Menü1^Menü2
  5.     bz         Menü2_feldolgoz
  6.     xorlw    Menü2^Menü3
  7.     bz         Menü3_feldolgoz
  8. .
  9. .
  10. .


Sziasztok
(#) szilva válasza Hp41C hozzászólására (») Feb 15, 2010 /
 
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.
(#) zenetom hozzászólása Feb 15, 2010 /
 
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?

WinPIC800.JPG
    
(#) watt válasza Hp41C hozzászólására (») Feb 15, 2010 /
 
É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.
(#) trudnai válasza icserny hozzászólására (») Feb 15, 2010 /
 
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
(#) icserny hozzászólása Feb 15, 2010 /
 
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!
(#) trudnai válasza icserny hozzászólására (») Feb 15, 2010 /
 
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.
(#) AM2k hozzászólása Feb 15, 2010 /
 
Meg tudja mondani vki, hogy goto $-1 mire jó?
(#) trudnai válasza AM2k hozzászólására (») Feb 15, 2010 /
 
A goto utasitas cimehez kepest vissza ugrik 1-et
(#) Attila86 válasza trudnai hozzászólására (») Feb 15, 2010 /
 
Csak egy felet mert a goto két szavas. Vagy nem?
(#) kissi válasza Attila86 hozzászólására (») Feb 15, 2010 /
 
A 16-osoknál a GOTO még egy szavas ( bár a kérdező nem írta a típust!) ...

Steve
(#) Hp41C válasza AM2k hozzászólására (») Feb 15, 2010 /
 
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
(#) Tom025 hozzászólása Feb 15, 2010 /
 
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?
(#) Hp41C válasza Tom025 hozzászólására (») Feb 15, 2010 /
 
Szia!

Egy kis összeállítás...

Szia
(#) kissi válasza Hp41C hozzászólására (») Feb 15, 2010 /
 
A GOTO $-1 az előző sorra ugrást jelenti 16-osoknál ( az előző programmemória helyre!) !

Steve
(#) trudnai válasza Tom025 hozzászólására (») Feb 15, 2010 /
 
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...
(#) icserny válasza trudnai hozzászólására (») Feb 16, 2010 /
 
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.
(#) trudnai válasza icserny hozzászólására (») Feb 16, 2010 /
 
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.
(#) szilva válasza icserny hozzászólására (») Feb 16, 2010 /
 
Ez hihetőnek tűnik, mivel firmwareből is kell tdni detach/attach-ot csinálni, mintha lenne is erre AppNote-ja a Microchipnek.
(#) zenetom hozzászólása Feb 16, 2010 /
 
Hali!
Több helyen olvastam hogy az MCLR/Vpp lábnak programozásnál 13-13,2V kell.
12V is elég neki?
(#) sucuka válasza zenetom hozzászólására (») Feb 16, 2010 /
 
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.
(#) zenetom válasza sucuka hozzászólására (») Feb 16, 2010 /
 
Köszi.
(#) Attila86 hozzászólása Feb 16, 2010 /
 
Az EEPROM első tizenhat bájtját feltöltöm ezzel a két sorral:
  1. org  0xF00000
  2. ch_tb12 de d'110', d'140', d'140', d'140', d'6', d'6', d'6', d'3', d'100', d'10', d'5', d'10', d'8', d'150', d'10', d'130'      ;EEPROM feltöltése


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...
(#) potyo válasza Attila86 hozzászólására (») Feb 16, 2010 /
 
Visszaellenőrzéskor azt írja, hogy benne van?
(#) Attila86 válasza potyo hozzászólására (») Feb 16, 2010 /
 
View/EEPROM-ot megnyitom és ott azt írja hogy benne van a PIC-ben a tizenhat érték.
(#) watt válasza Attila86 hozzászólására (») Feb 16, 2010 /
 
Ez égetőprogram eeprom ablakjában kéne megnézd a tartalmat.
(#) Attila86 válasza watt hozzászólására (») Feb 16, 2010 /
 
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...
(#) watt válasza Attila86 hozzászólására (») Feb 16, 2010 /
 
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.
(#) trudnai válasza Attila86 hozzászólására (») Feb 16, 2010 /
 
Na, en meg mar epp azt nezegettem biztosan nem allitottad be a code_pack-ot, de meg ugysem jott ki a tortenes
Következő: »»   676 / 1320
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