Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Szia, igaz
Jelenleg 16F877A típusú PIC-el dolgozom, de 16F628-ason fogom alkalmazni a DMX feldolgozást. A Példa ugyan EUSART-ra vonatkozik, ám egy 16F628-as PIC olcsóbb, mint egy 18F-es család...
Ez a kód beállítja az USART-ot egy belső script segítségével. Megpróbáltam felinicializálni kézzel, de nem minden regiszter bit jelentése értelmes számomra, a PIR és PIE jelző regisztereknél akadtam el... Forrás Link A leíráson nem tudtam eligazodni. És még van egy főprogram, ami egy végtelen ciklust generál, ha az RCSTA Regiszterben FERR Bit "1"-re vált, akkor egy Frame Error hiba keletkezett, ekkor bekapcsolja a PORTD-nek pár kimenetét.
A linked alapján nem 100Ft, hanem 1000Ft a külömbség. 16F628 350Ft-ba kerül most. Persze, ki hol vásárol...
De attól függetlenül érdekelne, hogy hogyan lehet egy sima USART-al megoldani. Idézet: „Van valakinek ötlete?” Igen, van. A beérkező karaktereket ki kell olvasni!
Idézet: „A linked alapján nem 100Ft, hanem 1000Ft a különbség.” Viccelsz? Nézd meg a hivatalos forgalmazó, a ChipCAD árlistáját! Az alábbiak nettó árak: 16F628A-I/P 380 Ft (jelenleg nincs raktáron) 18F13K22-I/P 470 Ft 18F23K22-I/SP 450 Ft 18F24K22-I/SP 490 Ft Idézet: Hol? „16F628 350Ft-ba kerül most.”
Sziasztok!
Azért előbb elolvasnám a 18F típusok UART egységre vonatkozó Errata bejegyzéseket. Sok típusnál 4-5 hiba is előfordul bennük... pl. 18F1xK22 errata A PIC18F24K22 szerencsésebb választás, az errata nem tartalmaz uart hibát.
Icserny segítségéhez még annyit, hogy első körben érdemes csak egy LED-el a kimeneten azt detektálni, hogy a FERR bebillent-e, és a LED maradjon égve, ha igen. Ha eddig megvagy, jöhet a további vizsgálat, ha szükséges, bár ha már bebillent, akkor már nem a LED-et fogod billegtetni, miután megvan a várva várt esemény...
Pascal-ban nem vagyok otthon, de abban kb. így nézhet ki...
Ha ez megvan, akkor a hiba akkor fog törlődni, ha újból kiolvasod az RCREG-et... (Lehetőség van a Kód gomb használatára, akkor lesz ilyen a beszúrt forrás)
Igen, ezt már próbáltam, hogy egy kimenetet múltkor az A/D tesztelésére használtam, és 8db LED áll rendelkezésre.
Pontosan már próbáltam a bebillentéssel, és nem ment, egyszer sem billent be, a PIC bemeneti lábán látom az adatokat Oszcilloszkóppal, de a bebillentés valahogy nem akar megtörténni... Ezért gondoltam, hogy hátha a beépített kódban van elrejtve a gond, és kézzel állítom be a Regisztereket, de a PIR és PIE -nél elakadtam.
Nyilvan a port inicializalassal van a gondod. Nezdd meg az adatlapban a portd milyen eszkozokkel osztozkodik es hogyan kell azokat kikapcsolni (pl AD vagy analog comparator)
Sziasztok!
Már többször leírtam, hogy kötött sorrendben kell olvasni az RCSTA és RCREG regisztereket, mert az utóbbi olvasása a vételi fifo-t is lépteti, aminek része az RCSTA register FERR és RX9D bit is.
Én csak akkor olvasom az RCREG-et, ha nem volt vétel. Ez egy kódrészlet csak, egyetlen céllal, hogy a FERR-t detektáljuk egyszer, nem egy komplett lekezelés.
Nem az AD vagy a PORTD-vel van gond, hanem az usart-al. Csak azért említettem, mert akkor kipróbáltam az AD-t, működött és csak rajta maradt a 8db LED.
A LED-eket használtam fel más célra
Köszi a példát icserny, biztosan menni fog.
Ja és bocs a kód miatt ildi! Nagyon rohantam, és életemben először vagyok fórumon. Persze, nem 16F84-be akartam égetni a 628-ast, de más hibákat bizonyára elkövetek. Kösz mégegyszer!
Igen, értem. Ha véletlenül egyszer ráfutás (is) keletkezik, akkor a vevő nem vesz több adatot, annak törlése csak a vevő kikapcsolásával és ismételt bekapcsolásával lehetséges (Sajnos ez nem törli a PIR1.RCIF-et, még az RCREG -et is ki kell olvasni). Előfordulhat, hogy az elején keletkezik egy ráfutás, aztán hiába várja a keretezési hibát az ember...
Hát, egyenlőre nem értem, hogy milyen ráfutásról van szó, vagy ez mikor keletkezik, mert a Dr. Kónya László "PIC Alkalmazástechnikás" könyvében túlzottan nem ír, hogyan kell használni ezt, vagy mik a buktatóik..
Annyit ír, hogy az INTCON, PIR1, RCSTA, SPBRG és TRISC-t állítsuk be, és hogy az RCREG és TXREG az adott adatbitek, amikkel lehet játszani, ésígytovább... Nos, elképzeléseim szerint az inicializálást akkor kézzel dobnám össze, így az INTCON regiszternek adok 192-es értéket... 6-7BIT "1" szint, így a megszakítás letudva. SPBRG-t 3-ra állítom, 250Kbaud értéknek megfelelően 16MHz-es órajellel. Utánna TRISC RX lába bemenet... Az RCSTA regiszternek "1" a 7-4 BIT 1-re állítása
És így van valami, amit kihagytam, vagy rosszul csináltam? Am, közben nézegettem a kódot, és az OVERRUN Error regiszter azaz a ráfutási hiba?
Szia!
Az alábbi sorrendet kellene követni: - Tris bitek beállítása, - Baud rate beállítása, - Vevő beállítása, a végén SPEN, CREN beállítása, - Adó beállítása, ha kell, - Megszakítás engedélyezése (PIE1.RCIE), ha kell... - Periféria és globális megszakítás engedélyezése (INTCON.PEIE, INTCON.GIE ), he kell. A PIR.RCIF bit akkor is jelez, ha a megszakítás tiltva van. Ha nem megszakításos a kiszolgálás, akkor nem kell engedélyezni sem a PIE1 -ben sem az INTCON -ban. Amennyiben engedélyezed, akkor a megszakítási rutint is meg kell írni, és abban kell törölni a PIR1.RCIF -et az RCREG kiolvasásával.
Jujj, ezt így teljesen értem, mindjárt ki is próbálom, köszönöm a segítséged.
Parallel Master Port (PMP) -t szeretnék használni PIC18F67J50 -el. Sajnos valahogy nem sikerült a valóságban igazolni az adatlapban szereplő elméletet.
Csupán azt szerettem volna első körben megvalósítani, hogy a bus -ra írás megvalósuljon. De sajnos minden pin (PMA 8 - 13, PMD 0- 7, PMCS1, PMCS2, PMWR, stb.) logikai 0 ban marad. Az adatlap szerint az írás akkor valósul meg, ha a PMDIN1L regiszterbe írok egy byte -t. Én ezt subrutinba helyeztem az egyszerűbb bus aktivitás detektálása érdekében. szerintetek milyért nem működik a program? Csatolva a kód-- vicsys
most látom kicsit bonyolult lett a kód a sok komment miatt.
Küldeném ismét, nélkülük. Csatolva a kód-- vicsys
PDIP tokozásnál mit jelent az I/P, E/P és az I/PTSL?
Csak mert 16F88-E/P-s PIC 250Ft-tal drágább, mint az I/P-s és gugli sem dobott ki semmi értelmeset és adatlap se ír róla semmit.
Az adatlap nem mondta?
Idézet: „Temperature Range: I = -40°C to +85°C (Industrial) E = -40°C to +125°C (Extended) Package: ML = Quad Flat No Leads (QFN) P = Plastic DIP SL = 16-lead Small Outline (3.90 mm) ST = Thin Shrink Small Outline (4.4 mm)”
Szép lenne, ha az adatlap sem írna róla semmit, maximum nem jó helyen kerested.
Az E az extended, míg az I az industrial szavak rövidítése és a működési hőmérséklet tartományokra utal. Adatlap vége Product Identification System fejezet alatt található meg.
Köszi, így már én is megtaláltam I/P és E/P-re kerestem rá és hát értelemszerűen arra nem dobott ki semmit. Köszönöm az infot!
Egy program nem a kommentek miatt lesz bonyolult. A kommentek csak segitik az eligazodast a kodban -- mar felteve, hogy a komment koveti a kodot es nem felrevezet. Szoval en nem javasolnam azok kivetelet...
vicsys megoldotta a problémámat, a kódot mellékletként .txt ben csatolta. Hogy erre nem gondoltam
Így már a komment elfér egy sorban a programmmal. No de vissza az alapkérdéshez valaki tudna segíteni ebben a fránya Párhuzamos Port élesztésben?
Sziasztok!
Kellene 1 kis help.16F690 PORTA összes portját I/O portnak akarom használni de valamiért nem megy.Milyen regiszter nem configoltam? TRISA ANSEL ASELH és ha jól néztem kb ennyi ja a proci _INTOSC modban van (itt lehet valami amit benézek csak nem tudom hogy mi) RA4/AN3/T1G/OSC2/CLKOUT RA5/T1CKI/OSC1/CLKIN
Milyért lehet az, hogy a BTG utasítás a PORTC esetén működik, PORTD esetén már nem (18F87JXX). A D port X. bitjét csak a LATD utasítással tudom módosítani.
Szimulátorral tökéletesn megy BTG vel is. Milyért?
hadd pontosítsak előző kérdésemen mielőtt megszóltok:
A D port X. bitjét csak a LATD utasítással tudom módosítani. helyesebben: A D port X. bitjét csak a LATD regiszteren keresztül tudom módosítani a BTG utasítással, PORTD resgiszteren keresztül meg nem. Szóval akkor milyért van ez?
A 18F-eknék a kimeneti szintet a LATx regiszterek határozzák meg egyértelműen. A bemeneti szinteket pedig a PORTx regiszterekből olvassuk ki. Tehát ez nem hiba, ez ilyen. Persze a PORTx-re is írhatsz, de akkor nem garantált, hogy az jelenik meg amit akarsz. A PORTC helyett is LATC-t írj inkább minden bit és bájt műveletnél, ha kimenetet akarsz állítani!
|
Bejelentkezés
Hirdetés |