Fórum témák

» Több friss téma
Fórum » PIC BASIC
 
Témaindító: hinar_, idő: Máj 7, 2008
Témakörök:
Lapozás: OK   6 / 23
(#) icserny válasza bazs hozzászólására (») Máj 15, 2010 /
 
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!
(#) fraba hozzászólása Jún 3, 2010 /
 
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.
(#) icserny válasza fraba hozzászólására (») Jún 3, 2010 /
 
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.
  1. ADCON1=$07
  2. TRISA=$1F


Tömböt pedig úgy lehet deklarálni, hogy megadod a méretét:
  1. dim a[10] as byte
(#) Ideiglenes válasza fraba hozzászólására (») Jún 3, 2010 /
 
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?
(#) icserny válasza Ideiglenes hozzászólására (») Jún 7, 2010 /
 
Idézet:
„nem lett volna egyszerűbb egy olyan kontrollert választani, amelyik tartalmaz A/D átalakítót?”
De, feltétlenül.
Idézet:
„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”
Ez igaz, de lehetnek olyan estek, amikor 3-4 bites felbontás is elég.

Érdekesség képpen az AN700 alkalmazási mintapéldát is érdemes megnézni.
(#) Ideiglenes válasza icserny hozzászólására (») Jún 7, 2010 /
 
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.
(#) brato válasza Ideiglenes hozzászólására (») Jún 7, 2010 /
 
Ha esetleg érdekel mélyebben a téma..
Bővebben: Link
(#) Ideiglenes válasza brato hozzászólására (») Jún 8, 2010 /
 
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.
(#) icserny válasza Ideiglenes hozzászólására (») Jún 8, 2010 /
 
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.
(#) Ideiglenes válasza icserny hozzászólására (») Jún 8, 2010 /
 
Az angol nyelv még soha nem okozott nekem problémát, amikor nem értettem valamit magyarul sem.
(#) alibaba40 hozzászólása Júl 2, 2010 /
 
Ü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
(#) Ideiglenes válasza alibaba40 hozzászólására (») Júl 3, 2010 /
 
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.
(#) alibaba40 válasza Ideiglenes hozzászólására (») Júl 3, 2010 /
 
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.
(#) Ideiglenes válasza alibaba40 hozzászólására (») Júl 3, 2010 /
 
É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:

  1. for i=0 to 40
  2. frek=20000+i*100
  3. freqout gpio.2,1000,frek
  4. next i


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.
(#) potyo válasza Ideiglenes hozzászólására (») Júl 3, 2010 /
 
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.
(#) icserny válasza alibaba40 hozzászólására (») Júl 3, 2010 /
 
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)
(#) alibaba40 válasza Ideiglenes hozzászólására (») Júl 4, 2010 /
 
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.
(#) Ideiglenes válasza alibaba40 hozzászólására (») Júl 4, 2010 /
 
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.
(#) Thowra hozzászólása Aug 18, 2010 /
 
Ü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.

629.bas
    
(#) icserny válasza Thowra hozzászólására (») Aug 18, 2010 / 1
 
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...
(#) Thowra válasza icserny hozzászólására (») Aug 18, 2010 /
 
Üdv!
Köszönöm a segítséget, erre nem gondoltam.
Átírtam és most jó.
(#) Thowra hozzászólása Aug 19, 2010 /
 
Ü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.

ee_ext.bas
    
(#) lorant hozzászólása Szept 12, 2010 /
 
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
(#) mgy válasza lorant hozzászólására (») Szept 12, 2010 / 1
 
PBP-re átírva és 16F84-re lefordítva mellékelve.
(#) lorant válasza mgy hozzászólására (») Szept 12, 2010 /
 
Nagyon szépen köszönöm :pirul: még azt megtudhatnám hogy mivel csináltad?
(#) mgy válasza lorant hozzászólására (») Szept 12, 2010 / 1
 
Á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.
(#) Thowra hozzászólása Szept 14, 2010 /
 
Ü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.
(#) Hp41C válasza Thowra hozzászólására (») Szept 14, 2010 /
 
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.
(#) Thowra válasza Hp41C hozzászólására (») Szept 14, 2010 /
 
Üdv!
Gondoltam rá de az All digital true elvileg elintézi.
Áttettem a B0 ra de a hiba maradt .
(#) Hp41C válasza Thowra hozzászólására (») Szept 14, 2010 /
 
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
Következő: »»   6 / 23
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