Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   717 / 1210
(#) Droot válasza Hp41C hozzászólására (») Okt 29, 2015 /
 
Pic32-nél sem kell törölni az interrupt flag-elet?
Én most törlöm, még nem próbáltam ki mit csinál ha nem.
(#) Hp41C válasza Droot hozzászólására (») Okt 29, 2015 /
 
Honan kerül a PIC32 elő most? 16F88 -ról van szó...
A PIC32 -ben programból kell törölni a UxRXIF, UxTXIF és UxEIF biteket. Náluk viszont nincs értelmezve az RCIF és TXIF jelzőbit.
(#) ativagyok hozzászólása Okt 29, 2015 /
 
Sziasztok!

Egy PIC18F87k22-vel dolgozom épp. Az AN5-ös lábon (PORTF.7) feszültséget szeretnék mérni belső ADC-vel, viszont állandóan tápfeszt mérek, multiméterrel is látszik, hogy ott az 5V. A többi lábon megfelelően tudok mérni.
A PORTF be van állítva analóg bemenetnek.
Első tippem az lenne, hogy megsütöttem a PIC-et forrasztáskor, és tönkrement.
Valakinek van esetleg ötlete, hogy mi okozhatja ezt?
(#) Pali79 válasza ativagyok hozzászólására (») Okt 29, 2015 / 1
 
Zárlat esetleg? Próbáld meg, hogy csak egy olyan programot töltesz bele, amiben kimenet az összes láb és alacsony szinten van. Ha ilyenkor is ott az feszültség akkor vagy tényleg tönkrement vagy zárlat, folyasztószer maradék, forrasztási hiba van a panelon.
(#) kissi válasza ativagyok hozzászólására (») Okt 29, 2015 / 1
 
Szia!
Reset-eld a PIC-et folyamatosan, így nem fut benne a programod, ha így is ott az 5V, akkor vagy zárlat a NYÁK-on vagy a PIC belsejében!
(#) ativagyok hozzászólása Okt 29, 2015 /
 
Pali79 és kissi:

Köszönöm a gyors válaszokat.
Testre kötött MCLR esetén is tápfesz van a lábon.
Ez esetben -ha jól gondolom- ez a PIC valóban kuka.
(#) kissi válasza ativagyok hozzászólására (») Okt 29, 2015 / 1
 
Ellenállással (pl. 330 ohm ) testre kötve nem csökken a feszültség számottevően ( nehogy valami bemenetnek állított láb szintje megtévesszen, mert a RESET-nél ez van !), ugyanazt az értéket méred, mint egyébként ( RESET közben!) ?
(#) Hp41C válasza kissi hozzászólására (») Okt 29, 2015 / 1
 
Mielőtt kidobod, csak azt az egy lábát emeld fel a panelről és próbáld ki még egyszer. Ha a ládon mincs 5V, akkor a panelen van a hiba...
(#) kissi válasza Hp41C hozzászólására (») Okt 29, 2015 /
 
Ez nem nekem szólt !
(#) ativagyok hozzászólása Okt 29, 2015 /
 
A PIC cseréje bár eltartott 1 óráig, de megoldott a problémát.

kissi: RESET-kor ugyanazt a feszültséget mértem, mint alap esetben.
Egy 4k7-ellenállással a földre volt alapból húzva, ami picit melegedett is. 330ohm-mal már nem próbáltam ki.

Hp41C: Ez esetben is ott volt az 5V, így maradt a csere.

Köszönöm mindenkinem a segítséget.
(#) DJozso válasza Hp41C hozzászólására (») Okt 29, 2015 /
 
Bocs, hogy csak most tudok írni, de melóztam. Köszönöm a jobbnál jobb ötleteket.
Hp41C: nekem ez így még sok (ennyire nem vágom a PIC lelki világát), de az adatlapja alapján utána olvasok azoknak a biteknek amiről még nem hallottam. Legalább tudom mi az amit tudnom kellene...
sonajkniz: sajnos nekem az assembly nyelv nem mond sokat. Lehetséges hogy a byte-onként küldés után kellene egy kis szünet? Mit értesz szinkron jel alatt?
(#) Droot válasza Hp41C hozzászólására (») Okt 29, 2015 /
 
Onnan hogy én azzal is foglalkozok és véletlenül beleolvastam abba amit írtál. De bocsánat hogy meg mertem kérdezni...
(#) sonajkniz válasza DJozso hozzászólására (») Okt 29, 2015 /
 
Szia!
A beérkező jeleket egy timer megszakításai olvassák be.
Ezt a timert szinkronizálom egy kilencedik bittel minden 8 beérkezett bit után.
(#) DJozso válasza sonajkniz hozzászólására (») Okt 30, 2015 /
 
Szia! Bocs, ha hülyének tűnök, de csak a pontosság kedvért. A vevő oldalon nem használod a USART modult, hanem létrehozol egy timert, amely megszakítási ideje az átviteli sebességből számolt egy bit átvételére szükséges idő. Ezen idő letelte után folyamatosan megszakítást generál, ami leolvassa a bemeneti jelszintet, melyet egy változóba (bufferbe) ment, majd ha kész a bájt, menti, vagy eldobja... Eddig azt hiszem talán értem is, de a szinkron jel kicsit nem világos. Értem, hogy a 9 bit a szinkronjel, de hogyan működik ez valójában? Tételezzük fel, hogy 9. bit értéke 0. A nyolc bit beolvasása után a bemenet 1-re megy (a szabványos RS232 kommunikáció miatt), majd ezt "huzza le" 0-ra a 9 bit, és mikor ez ismét 1 lesz, nullázza a timert (ezzel szinkronizálja az időt) . Így gondoltad? Ha nem kérlek írd meg pontosan, te hogyan oldottad meg.
(#) DJozso válasza Hp41C hozzászólására (») Okt 30, 2015 /
 
Kinyomtattam a hozzászólásod, hogy az PIC leírásának olvasgatása közben jobban átlássam, mit is keresek (regiszterek bitjeinek nevei). Nos amit észrevettem: Nekem, nem csak a vételi hibák ellenőrzései maradtak ki, hanem maga a soros port bekapcsolása, amit RCSTA regiszter SPEN bit 1-re állítása kellene, hogy bekapcsoljon. Szerintem ez is kellene. Viszont azt meg tudnád mondani, hogy a fenti error bitek mikor lesznek 1 állapotba. FERR és OERR . Látom a leírását, de nem értem. Köszi a helpet. Bocsi a dupla bejegyzésért, de az előzőt nem engedte szerkeszteni.
A hozzászólás módosítva: Okt 30, 2015
(#) cross51 válasza DJozso hozzászólására (») Okt 30, 2015 /
 
Az SPEN jól gondolod, hogy be kell kapcsolni.

Az OERR akkor áll 1-be ha az UART belső FIFO regisztere megtelt, több adat érkezett mint ami ki lett olvasva.
A FERR bit meg a framing error, ezt pontosan nem tudom, de ha jól értelmezem akkor áll 1-be ha nem érkezett stop bit a várható időben.
(#) Hp41C válasza cross51 hozzászólására (») Okt 30, 2015 /
 
FERR - Framing error - Keretezési hiba. A start bit túl rövid, vagy a startbit és a 8 (ill. 9) adat bit vétele után a vonal nem megy magas szintre a stop bit idejére.
OERR - Overrun error - Ráfutás hiba. A vevő átmeneti tárolójából az előző adat (RCREG) az előző adatot nem olvastuk ki, amikor a következő vétele befejeződik.
A hozzászólás módosítva: Okt 30, 2015
(#) Hp41C válasza Hp41C hozzászólására (») Okt 30, 2015 /
 
Bufferrel rendelkező típusoknál:
OERR - Nincs már üres hely a bufferben a vett adatnak. A vételi státusz regiszter ezeknél a típusoknál egy buffer, az adatregiszter (RCREG) kiolvasása lépteti a státusz bufferét is. Figyelni kell arra, hogy az RCSTA regiszterben található biteket (pl. a 9. adatbitet) előbb olvassuk ki, mint a RCREG regisztert.
(#) sonajkniz válasza DJozso hozzászólására (») Okt 30, 2015 /
 
Szia!
Gyanítom, hogy kissé egyedi a megoldásom, de működik.
Az adó először kiküld 5 rövid jelet. Gyakorlatilag 5 1-es bitet. Majd 3x kiküldi a szinkronjelet, ami 400usec magas és 300usec szünetből áll. Ezután jön a 8 bit, maj 1 szinkron. Ez 32x. Az adást csak egyszer küldöm ki. Ez egy szövegkűldés 2x16-os LCD-nek.
A vevő a 400usec hosszú magas jelre vár. Hármat kell kapjon egymás után. Ellenkező esetben nem lép adatfogadásra. Be sem kapcsolja a timert. Ha már veszi az adatokat, a 8. után eltárolja az érkezett byteot, majd vár a szinkronjelre. A közben beérkező újabb megszakítást nem veszi figyelembe. Valamit számolja a beérkezett byteokat, és ha megvan a 32, kikapcsolja a timert és kiírja a kéjelzőre az üzenetet. Majd kezdi előről.
(#) DJozso hozzászólása Okt 30, 2015 /
 
Mindenkinek köszönöm a sok-sok infót, emésztem egy kicsit, remélem ez már megoldja a problémám. Sokkal jobban átlátom a regiszterek funkcióit,működéseit. Így könnyebb megérteni sok mindent.
sonajkniz: Hu, nem egyszerű (nekem), a te ötleted. Még nem csináltam hasonlót, de hiszem, hogy sikerülhet megvalósítani a te ötleted is a saját nyelvemen(mikroC), csak tanulni kell, próbálkozni kell.
Köszi mégegyszer.
(#) edison14 hozzászólása Okt 30, 2015 /
 
Sziasztok!

Akadt egy kis gondom a hardveres osztással. PIC24-es pic-et használok, assmeblyben szeretnék osztani a következőképpen:
  1. mov.b   #250, W4
  2. mov.b   #100, W2
  3. div.u   W4, W2


Itt a W4 az osztandó, a W2 az osztó és ha jól olvastam akkor a hányados a W0 lesz és a maradék a W1-be kéne hogy kerüljön. De valamiért az osztás után a W0 értéke 1 lesz a maradéké pedig nem változik.

A másik gondom a W7-el van mégpedig az, hogy mozgatnék bele egy 8 bites adatot, de egy teljesen másik értéket másol a program a W7-be.
Mind a két problémát csak a szimulátorban néztem meg egyenlőre.
Ha valaki tudna segíteni azt nagyon megköszönném!
(#) edison14 válasza edison14 hozzászólására (») Okt 30, 2015 /
 
Közben kicsit utánajártam a reference manualban és az osztásnál kell használni a repeat parancsot. Így az osztás már működik. Viszont a másik probléma még mindig megvan. Kipróbáltam már munkaregiszterrel is de mindegyikkel ugyan azt csinálja.
Lényeg hogy van egy 16 bites változóm amiben az alsó 8 bitet használom. És ezt az alsó nyolc bitet kéne áthelyeznem egy munkaregiszterbe ami nagyon nem akar sikerülni. De az érdekes, hogy az össze többi helyen tökéletesen működik az áthelyezés. Nem találkoztam még hasonlóval.
(#) icserny válasza edison14 hozzászólására (») Okt 30, 2015 /
 
"A másik gondom a W7-el van mégpedig az, hogy mozgatnék bele egy 8 bites adatot..."

Milyen utasítással próbálkoztál?

MOV f, Wnd (Opcode: 1000 0fff ffff ffff ffff dddd)
Ez csak 16 bites adatot mozgat.

MOV f, {WREG} (Opcode: 1011 1111 1BDf ffff ffff ffff)
Ez csak WREG-be másol (vagy f-ben hagy)
(#) edison14 válasza icserny hozzászólására (») Okt 31, 2015 /
 
A következőt használom:
  1. MOV.b     #lit8, Wd
(#) dkarcsi73 hozzászólása Okt 31, 2015 /
 
Sziasztok!
A 16f628 -as PIC melyik lábán tudom fogadni a DS18** hőmérő-szenzor adatait.
A PORTA-0 lábon tökéletesen működik, de más lábakra is rá tudom kötni?, mert példaprogramokban csak ezen a lábon látom és nem próbáltam még egyéb bemenetre rákötni!
Üdv.
(#) Bakman válasza dkarcsi73 hozzászólására (») Okt 31, 2015 / 1
 
A 4-es lábon biztosan nem működik, a többin igen.
(#) edison14 válasza dkarcsi73 hozzászólására (») Okt 31, 2015 / 1
 
Bármelyik lábbal működik amit be lehet állítani ki és bemenetnek is.
(#) icserny válasza edison14 hozzászólására (») Okt 31, 2015 /
 
MOV.B #lit8, Wnd (Opcode: 1011 0011 1100 kkkk kkkk dddd)
Ennek működnie kell. Ugye, odaírtad a "#" jelet is?

Például:

  1. MOV.B #0x17, W7
(#) edison14 válasza icserny hozzászólására (») Okt 31, 2015 /
 
Megvan mi volt a hiba. Az hogy én a változót számként akartam használni pedig regiszterként kell. A kereszt nélkül tökéletesen működik a dolog. Nem tudom hogy siklottam el efelett.
(#) SKY hozzászólása Nov 1, 2015 /
 
Sziasztok!
Meg tudnátok mondani, hogy egy 24-es sorozatú PIC bármelyik PGED és PGEC lábain programozható, ha három is van ezekből? Csak simán rá kell az egyikekre tenni a programozót?

Valamint mekkora különbség van a programozás nehézségében a 18-as szériához képest? Például 10-szer több regiszter kell konfigurálni indításkor, vagy az SPI-t sokkal nehezebb megoldani C-ben, több buktató?

Köszönöm!
Következő: »»   717 / 1210
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