Fórum témák
» Több friss téma |
Ebben nézted már?
Különös tekintettel az 51.oldal alján látható mintapéldára, és a 165.oldal tetején ismertetett beállításokra... Megjegyzem, hogy a mintaprogramban használt ADIN_TAD = FRC helyett az órajel sebességétől függően, az adatlap ajánlása szerinti 2_FOSC, 8_FOSC, 32_FOSC valamelyikét kell majd használni!
Sziasztok!
Fut épp egy projektem, a hardver részével többé-kevésbé készen vagyok, csak a szoftver része okoz egy kis fejtörést. Ebben kérném a segítségeteket. A feladat a következő: Egy feszültség szintet szeretnék a 16f628A-ba beépített komparátor, és a belső referenciafeszültség modul segítségével digitalizálni, és az eredményt decimális formában kiírni. Az eddig - basicben - megírt program kb. így néz ki. device 16f628 config LVP_OFF, BODEN_OFF, PWRTE_ON, MCLRE_ON, DEBUG_ON, WDT_OFF, XT_OSC declare xtal 4 declare i as byte declare a as word init: asm MOWLW 0X02 MOWWF 1F MOWLW 0X07 MOWWF TRISA MOWLW 0Ax0F MOWWF 9F endasm program: for i=0 to 10 a= Az asm kódrészlettel - az init címke alatt - beállítottam a regisztereket a megfelelő állapotba, majd a program címke után a komparátor kimenetét szeretném az "a" nevű változóban eltárolni. Ezután ezt szeretném átalakítani decimális formára, majd később további logikai műveleteket végezni, a beolvasott értéktől függően. C-ben tudom, hogy van olyan, hogy deklarálunk egy n hosszúságú tömböt (változót) és annak a "rekeszeit" egyenként fel lehet tölteni. Pl. a[1]=2 a[2]=5 a[6]=7 és így tovább. Ezt hogy lehet megoldani BASICben? Erre ugyebár azért van szükség, mert amikor az "i" eléri a 10-et, és lefut 10.X-re a kiolvasás, akkor kapok egy 10 bites számot, amit szeretnék konvertálni decimális számrendszerbe. Konkrétan egy termisztoron eső feszültség szintjét kell figyeljem, és ennek hatására a "B" porton a lábakat kell kapcsolgatni egy bizonyos sorrendben. Nagyon alapszinten konyítok valamennyit az asmhez és a C-hez, de inkább BASIC! Az esetleges segítséget előre is köszönöm! Üdv.
1. Hány topikba akarod még bemásolni a kérdésedet? Az ilyesmit sehol sem díjazzák!
2. Milyen BASIC-ról van szó? Ez legalább annyira fontos információ, mint a PIC típusa. Ha PROTON Basic-ről van szó, akkor minimális Google kereséssel kiderül, hogy fölösleges assembler betétekkel szerencsétlenkedni, lehet így írni, hogy pl.
Tömböt pedig úgy lehet deklarálni, hogy megadod a méretét:
Nem igazán értem az elképzelést, de azért kíváncsi leszek a végeredményre. Ha már hardvert is kellett hozzá tervezni, nem lett volna egyszerűbb egy olyan kontrollert választani, amelyik tartalmaz A/D átalakítót?
Volt amúgy nekem is egy ilyen elképzelésem, hogy a feszültség referenciát és a komparátort használnám analóg jel képzésre, de valahogy úgy rémlik, igen kicsi lett volna a felbontás, és emiatt elvetettem az ötletet. Hány biten várod a digitalizált értéket?
Idézet: De, feltétlenül.„nem lett volna egyszerűbb egy olyan kontrollert választani, amelyik tartalmaz A/D átalakítót?” Idézet: Ez igaz, de lehetnek olyan estek, amikor 3-4 bites felbontás is elég.„Volt amúgy nekem is egy ilyen elképzelésem, hogy a feszültség referenciát és a komparátort használnám analóg jel képzésre, de valahogy úgy rémlik, igen kicsi lett volna a felbontás” Érdekesség képpen az AN700 alkalmazási mintapéldát is érdemes megnézni.
Ma sem keltem fel hiába. Ezt az A/D átalakítási módot ismertem már, de a jegyzetet még nem olvastam. Annál az eljárásnál sokkal jobb, mint amit én okoskodtam ki. Úgy is mondhatnám, hogy precízebb és átgondoltabb. Köszi, hogy a figyelmembe ajánlottad, érdemes volt elolvasni.
Mindenesetre a PICBASIC-ben nem próbálnám lekódolni.
Ha esetleg érdekel mélyebben a téma..
Bővebben: Link
Valójában ennyire mélyen nem érdekelt. De ki tudhatja, hogy mit hoz a jövő. A doksit mentettem, beleolvastam és van olyan benne, amit értek. De ez a legkevesebb.
Nem csodálom, mert ez csak az új tudományos eredmények rövid összefoglalója. Maga az értekezés itt található, de az angolul van írva.
Az angol nyelv még soha nem okozott nekem problémát, amikor nem értettem valamit magyarul sem.
Üdv Mindenkinek!
Már jó régen kérdeztem, de megint elakadtam. Nyest riasztóhoz szeretnék előállítani hangokat, mondjuk 20-24khz-ig. Ehhez írtam az alábbi programot,de ez nagyon is hallható. Mit csináltam rosszul, hogyan tudnék ilyen frekit előállítani? (freqout-nál a,b-t megcseréltem akkor is hallható csak másként szól) Válasz előre is kösz. DEVICE = 12F629 CONFIG MCLRE_off, WDT_off,INTRC_OSC_NOCLKOUT DIM a AS WORD DIM b AS WORD b=10 kezd: FOR a= 20000 TO 24000 STEP 10 FREQOUT GPIO.2 , a,b NEXT GOTO kezd
A kérdés, hogy mi lenne az a illetve b funkciója. Feltételezem, hogy a adná a frekvenciát és b az időtartamot. A FREQOUT és egyéb PICBasic parancsok is, úgy működnek, hogy amíg az utsaítás végre nincs hajtva, addig nem lép tovább a program az adott helyről. Ezért is hagytam fel a PICBasic-kel, mert egy normális megszakítási rutint így nem lehet megvalósítani.
Szóval a FREQOUT a GPIO.2-lábon fogja kiadni a hangod a miliszekundum időtartamig b Hz frekvencián, azután a hangot kikapcsolja. Ha a b=10, az 10ms-ot jelent. A hálózati 50Hz periódusideje 20ms. A programod tehát kb 100Hz -es ( kicsit kisebb ) frekvenciával kapcsolgatja a 20-24kHz frekvenciát 10 miliszekundumos időtartamokra a kimenetre. Praktikusabb lenne legalább 1000 miliszekundumig kintartani a frekvenciát, mivel az 1Hz már nem megy át olyan könnyen egy kondenzátoron. A másik probléma szerintem, hogy a belső oszcillátor nem ad elég nagy sebességet, hogy a 20kHz feletti frekvenciák szépen kijöjjenek a rendszerből. Érdemesebb lenne 20Mhz-es kristályt használni, de akkor annak utána kell nézni, hogy erről miként vesz tudomást például a FREQOUT utasítás.
Hali!
Köszi a választ. A proton ide-vel nem tudtam magas frevenciát előállítani, a PicsimulatorIDE-vel úgy sikerült, hogy beállítottam 5500Hz-et az ótajelet levittem 1Mhz-re. Ez szerintem 4*5500, 22kHz. Ezt nem is hallom, tehát elvileg jó. Viszont ha ciklusba rakom: "For a = 5500 to 6000" akkor már megin hallható, tehát alacsonyabb frekv. jön ki. Gondolom ezt assembly-ben meg lehet valósítani, vagy C-ben programozol? ui: azt hiszem inkább nyest csapdát fogok csinálni.
Én a PIC-nél az assemby-t tartom a legjobbnak, de talán azért mert még csak ki-kikacsingattam a C irányába. A C nagyon zabálja a memóriát a PICBasic-ről ne is szóljunk. A jó megoldás nekem a C és assembly keverése.
A programodat valahogy így csinálnám meg, legalábbis a belső ciklust:
ez másodpercenként emeli a frekvenciát 100Hz-enként. A másik megoldás lehet assemblyben. Nem sokkal hosszabb a program. A timer1-et megszakítással lehetne használni.
Idézet: „A C nagyon zabálja a memóriát” Ha megismered a C nyelvet és a fordítót is, akkor elég sokmindent le lehet úgy programozni C-ben, hogy alig lesz nagyobb a kód, mintha asm-ben írnád. Na meg asm-ben is lehet nagy kódot írni, az se garancia semmire.
Ha jól számolom, 20-24 kHz-es négyszögjel előállításához 25-20 utasításciklusonként kellene átváltani a kimenet állapotát (belső óránál 1 utasítás = 1 us, s egy hullámperiódushoz két állapotváltás kell). Ez nyilván csak hatékony programszervezés esetén oldható meg (pl. assembly, gondosan megírt C program)
Hát erre is fura hangokat adott ki (mediaplayer classic lejátsza). Viszont erre:
kezd: HIGH GPIO.2 DELAYUS 50 LOW GPIO.2 DELAYUS 50 GOTO kezd kb 10 kHz körüli tiszta négyszögjelet hallottam. Ezt még lehet növelni, DELAYUS 25 - nél pedig 19-20kHz közti frekit mértem ezt már nem hallottam. Szerintem a Freqout utasítás ilyen magas hangok kiadására nem képes.
Az már tény, hogy elég jól hallható a hang, amit felvettél, tehát messze van attól a frekitől, amit szeretnél. Ez a második megoldásod viszont jó ötlet.
A PICBASIC kézikönyvben 20 vagy 40MHz -es oszcillátort ajánlanak a FREQOUT jó működéséhez. 4 MHz-nél inkább ezt az utóbbi ötletet tartom jobbnak.
Üdv mindenkinek!
Egy PIC12F629 be szeretném bekapcsolni a belső oszcillátort mert szükségem lenne azokra az I/O lábakra is és a belső felhúzó ellenállásukra. Bárhogy próbáltam nem megy, asm forrást is tettem bele de azzal se megy. Mplabbal ugyanez az asm kód működik. Van esetleg valakinek olyan forrásrészlete amibe benne van a belső oszc. használata? Előre is köszönöm.
Azt mondja a kézikönyv, hogy a PIC nevével megegyező .INC állományban van bállítva a konfiguráció, s abban az XT mód, 4 MHz-en az alapértelmezett. Nyilván ezt kell átírni...
Üdv!
Köszönöm a segítséget, erre nem gondoltam. Átírtam és most jó.
Üdv mindenkinek!
Ismét előjött egy probléma, jelen esetben a külső eeprom. Egy 24c02 es vagy 24c32 es eepromot szeretnék kezelni de a mintaprogi se megy. A forrást mellékelem. Mi lehet a hiba? Előre is köszönöm.
Heló mindenkinek!
Egy kis segitség kellene.Ezen az oldalon: Bővebben: link van egy Basic nyelven irott program próbáltam belőle hex-et csinálni de nem sikerült mindig valami hibát irt ki a microbasic.Valaki tudna belőle nekem .hex -et csinálni? előre is köszönöm
PBP-re átírva és 16F84-re lefordítva mellékelve.
Nagyon szépen köszönöm :pirul: még azt megtudhatnám hogy mivel csináltad?
Átjavítottam a picbasic pro bas fájlra és a pbp simán fordította. A microbasic pontos szintaktikáját nem ismerem, mert nem használom.
Üdv mindenkinek!
Egy 93C46B eepromot szeretnék PIC16F877 tel kezelni. A problémám, hogy bármit küldök neki nem történik semmi. Próbáltam PICKIT2 vel adatot beleírni, az rendbe ment. Az így beírt adatot se tudom a piccel kiolvasni. A bekötést és a forrást mellékelem. Az eeprom jól van így bekötve? Van esetleg valakinek működő forrásrészlete ehhez az eepromhoz? A segítséget előre is köszönöm.
Szia!
A 16F874 és 16F877 - nél az PORTA: 5, 3..0 és PORTE: 2..0 lábak reset után analóg bementeként működnek. Az ADCON1 regiszterbe 6 vagy 7 írásával lehet digitálisra állítani.
Üdv!
Gondoltam rá de az All digital true elvileg elintézi. Áttettem a B0 ra de a hiba maradt .
Szia!
Ugyan nem értek a BASIC -hoz, de a parancs kiküldése gyanús: -Az EEProm írás tiltott állapotban van a táp bekapcsolása után, az írás előtt az EWEN parancsot ki kell küldeni. -Az MSBFIRST arra utasítja a Shout eljárást, hogy a legfelső bitet vigye ki, de a $03 legfelső 6 bitje 0. Az SB bitet, a parancsot és a címet egymás után kell kiléptetni. Egy jobban olvasható adatlap |
Bejelentkezés
Hirdetés |