Fórum témák

» Több friss téma
Fórum » MikroPascal kérdések
 
Témaindító: bozsokiandras, idő: Máj 15, 2006
Témakörök:
Lapozás: OK   12 / 29
(#) zsoltee0001 válasza pako hozzászólására (») Máj 10, 2010 /
 
Köszi, ki fogom próbálni.
(#) Scanmen hozzászólása Máj 23, 2010 /
 
Üdv mindenkinek

MikroPascal Pro változatból megjelent a 3.8 verzió.
Gyógyítás itt

Szép napot mindenkinek

Scanmen
(#) pako hozzászólása Jún 11, 2010 /
 
Sziasztok!

A PRO v3.8-ban találtam 2 bug-ot.
Egyik projektemnél egy egyszerű állapotváltoztatás nem ment a PortC lábain (16F873a), amit ASM parancsokkal tudtam csak orvosolni, érdekes az is, hogy a BCF/BSF parancsok elé és után is be kellett tennem pár NOP-ot is. (ezek száma órajeltől függött, 4MHz-en 2-2 NOP, 20MHz-en 6-6 db).
A másik egy 18F452-vel történt:
Interrupt-on belül nem működött a DIV-es osztás, pedig ideje lett volna rá.

Visszatéve a 3.2-t, működik mindkét program. Tehát nem is periféria-hiba az ok.
(#) szilva válasza pako hozzászólására (») Jún 11, 2010 /
 
Azért a NOP-ok betételének a kényszere nem igazán a fordító hibája. Mit fordított, ami helyett az asm utasításokat kellett betenni?
(#) pako válasza szilva hozzászólására (») Jún 11, 2010 /
 
Pl. nem hajtotta végre a PortC.3:=1-et, utánna próbálkoztam a SetBit(PortC,3)-al, nem működtek, utánna megpróbáltam a PortC:=PortC XOR $08-at, így működött. Szóval byte-ként engedte írni az egész portot, csak bit szinten nem. Asm-mel viszont ment már bit szinten is. A NOP-okat én sem igazán értem, írtam is hogy érdekes. Visszatéve a 3.2-t ez a hibajelenség is megszűnt, működött rendesen a PortC.3:=1, stb. Ebből következtettem arra, hogy nem PIC-en belül van a hiba, hanem a fordítóban.
Természetesen SPI ki volt kapcsolva, láb kimenetre volt állítva.

Illetve eszembe jutott mégegy apróság.
A PortA 4-es lábat, (OpenDraine-es) nem engedte interrupt-ban módosítani, csak azon kívül. Ezt pedig úgy oldottam meg, hogy nem a PortA.4-es bitet piszkáltam (hagytam 0-án), hanem a TrisA.4-et.
(Igaz a Tmr0 be volt kapcsolva, de nem innen kapta az órajelet, szóval elvileg az is le volt választva.)
(#) szilva válasza pako hozzászólására (») Jún 11, 2010 /
 
De nem ez volt a kérdés, hanem az, hogy a fordító mit fordított abból, amit te írtál a programba. Pl. az, hogy a "PortC.3:=1" -ből mi lett a lefordított kódban. Mert ezek ismeretének hiányában nem jelentheted ki, hogy ez egy bug, könnyen lehet, hogy az áramköri környezet miatt nem azt csinálja, amit gondolnál.
(#) pako válasza szilva hozzászólására (») Jún 11, 2010 /
 
Ezt sajnos nem tudom megválaszolni, a generált asm kódot nem néztem meg. Pascalon belül használtam az asm utasításokat (ASM .. End; blockban).
Az elektronikán nem módosítottam semmit a 2 pascal verzió összehasonlításakor, teljesen ugyan az volt a 3.2-es és a 3.8-as verziónál.
(#) trudnai válasza pako hozzászólására (») Jún 11, 2010 /
 
Idézet:
„BCF/BSF parancsok elé és után is be kellett tennem pár NOP-ot is. (ezek száma órajeltől függött, 4MHz-en 2-2 NOP, 20MHz-en 6-6 db).”


Igen, ez az un. RMW hiba miatt van, ez nem a fordito hibaja, hanem a PIC belso mukodesebol adodo jelenseg -- adatlap targyalja.

Ha viszont ilyen sok NOP kell, akkor a kimeneteid tulsagosan le vannak terhelve, ugyhogy azon kellene valtoztatni elsosorban. Arnyek regiszterekkel is lehet javitani a dolgon (ill. ha Pascalban csinalod akkor egy arnyek valtozoval). Azaz nem kozvetlen a portot modositod, hanem az arnyek regisztered/valtozod, majd annak egesz tartalmat toltod ki a portra. 18F-eknel pl. ez az arnyak regiszter mar benne van a hardverben LATx neven...
(#) pako válasza trudnai hozzászólására (») Jún 11, 2010 /
 
Értem, ezek szerint ez a magyarázat arra, hogy miért csak byte szinten tudtam írni a portot.
Köszi, érdekes infó, még nem hallottam róla idáig.

Gondolom akkor a két verzió közt tapasztalt különbség az optimalizálásból ered. Szóval, hogy a régebbi egyből így árnyékolással fordíthatott, az új verzió pedig meghagyja nekem ezt a lehetőséget, és tényleg azt csinálja, amit én akarok?
(#) potyo válasza pako hozzászólására (») Jún 11, 2010 /
 
Idézet:
„Köszi, érdekes infó, még nem hallottam róla idáig.”


Ha követnéd a PIC-es témákat, akkor már hallhattál volna róla...
(#) trudnai válasza pako hozzászólására (») Jún 11, 2010 /
 
Ezt en nem tudom, nem ismerem a MikroPascalt, de akar elkepzelheto ez a valtozat is. Vagy pedig a regebbi kevesbe optimalizalta a kodot, es igy a felesleges kodreszletek miatt mukodott jol (ugyanaz a hatas mintha NOP-okkal toltened ki az idot).

Amugy epp emiatt irta Szilva, hogy meg kell nezni milyen kodot general, mert ezek a dolgok abbol derulnek ki. Sajnos a PIC-ezest az Assembly olvasasi szintje nelkul nagyon nehez programozni -- marmint ameddig nem utkozol hasonlo problemaba addig konnyu, de amint van egy kis pici aprosag mar nagyon hasznos ha nem csak felulrol latod a mukodeset.
(#) FPeter hozzászólása Aug 30, 2010 /
 
Sziasztok!

hogyan lehet egy word-é alias-olni sok sok port lábát ? 1-1 láb alias-olása sbit-é sokfelé előfordul a példákban ( " var Mmc_Chip_Select : sbit at LATF0_bit; " ), de arra nem találtam megoldást, hogy hogyan lehetne egy 16 bitessé formálni többet...

lehet kissé zavarosan sikerült megfogalmaznom, de a következőhöz kellene: egy TFT-t szeretnék macerálni ami 16 bites interface-el csatlakozik, viszont nincsen olyan portja a választott PIC-nek ahol 0-15-ig szabad lenne minden láb, ezért több port mindenféle lábaiból kell összeszednem a 16-ot. így viszont nagyon macerás lenne egyenként állítgatni minden bitet - ehhez keresnék jobb megoldást...

Üdv:
Péter
(#) vilmosd válasza FPeter hozzászólására (») Aug 30, 2010 /
 
Hali
Nam ismerem a pascalt (szerencsere) de veletlenul nem lehet csinalni "uniont"-t? Mert C nyelvul ezt szokjuk hasznalni. Barmekkora uniont lehet krealni, ahol tetszolegesen tudsz valasztani biteket, es byte-okat. Irhato, olvashato mint bit, byte, word a deklaraciotol fuggoen.
Udv Vili
(#) icserny válasza FPeter hozzászólására (») Aug 30, 2010 /
 
Idézet:
„hogyan lehet egy word-é alias-olni sok sok port lábát ?”
Sehogy! A mikrovezérlőnek nincs olyan utasítása, amivel több port lábait matatná egyszerre.

Pascalban deklarálhatsz 16 bites változót, azt átadhatod egy eljárásnak, ami bitenként vagy bitcsoportonként kiírja a megfelelő portokra.
(#) FPeter válasza icserny hozzászólására (») Aug 30, 2010 /
 
őőő, persze hogy nincsen ilyen utasítása a procinak, nem is ezt várnám el. a fenti példaként vett sort sem a proci ( " var Mmc_Chip_Select : sbit at LATF0_bit; " ) értelmezi hanem maga a mikropascal fordító... a program word-száma sem nő attól hogy ilyet használok helyenként, ez csak a fordító által adott egyszerűsítés ilyen helyzetekre. éppen ezért próbálok hasonló megoldást keresni a több bit összefűzésére is - ha létezik

az eljárásnak átadással rettenetes erőforrás pazarlás lenne, akkor már ugyanott tartok ha az SPI porton keresztül baxtatom az LCD-t...
(#) FPeter válasza vilmosd hozzászólására (») Aug 30, 2010 /
 
sajnos ezt találtam a help-ben kutakodva:

Bit variables can not be members of structures and unions.

lehet bepróbálkozok a hivatalos fórumon is, ott a fejlesztők biztosan meg tudják mondani a tutit...
(#) icserny válasza FPeter hozzászólására (») Aug 30, 2010 /
 
Mindegy, hogy a fordító találja ki (nem fogja!), vagy te mondod meg a kívánt műveletsort, ezt csak erőforrás-pazarló módon (több utasítással) lehet kivitelezni.

Ha a paraméter-átadást meg akarod spórolni, akkor használhatsz globális változót. A több portot érintő kiküldés nyűgje azonban nem kerülhető el.
(#) pako válasza FPeter hozzászólására (») Aug 30, 2010 /
 
Olyant viszont meg lehet csinálni, hogy egy pascal sorral 2 portot írsz egyszerre, de ez ASM-ben ugyanúgy jópár utasítás lesz, csak az átláthatóság az előny. Ennek módja: adatlapban megnézed, hogy pl. a LatC és LatD regiszter melyik memóriacímen van. 18F452-nél a LatC $F8B, LatD pedig $F8C címen.
Globális változóként felveszel egy word-ot, így:
  1. dualport : word; at $F8B;

Ekkor a "dualport" nevű változó alacsony byte-ja lesz a LatC regiszter, felső pedig a LatD.
(De ha jól sejtem, dsPIC-ed van. Azoknál sajnos majdnem minden port hiányos.)
DMA-val nem lehet megoldani a dolgot?
(#) niedziela hozzászólása Szept 1, 2010 /
 
Szia !

Olyan embert keresek, akinek lenne türelme segíteni, elmagyarázni alapokat.
Pascal megy, csak a PIC része érdekelne, de az a legelejétől

Köszi !
(#) potyo válasza niedziela hozzászólására (») Szept 1, 2010 /
 
Van itt néhány téma PIC-ről, állj neki szépen olvasni!
(#) niedziela válasza potyo hozzászólására (») Szept 1, 2010 /
 
Kérdésem nem az olvasásra irányult, konkrét kérdésekre, konkrét válaszokat szeretnék, ezért keresek olyant aki....
(#) potyo válasza niedziela hozzászólására (») Szept 1, 2010 /
 
Idézet:
„Kérdésem nem az olvasásra irányult, konkrét kérdésekre, konkrét válaszokat szeretnék, ezért keresek olyant aki....”

...aki elmagyarázza, hogy mi az a PIC, mit lehet és mit nem lehet csinálni vele, mit kellene tudni digitális és analóg elektronikából hozzá, stb. Most konkrét kérdésed van, vagy pedig alapokat kellene elmagyarázni? Mert utóbbira az lesz mindenkinek a válasza, hogy olvasd el a cikkeket, olvasd el a témákat, témákban linkelt egyéb leírásokat.
(#) niedziela válasza potyo hozzászólására (») Szept 1, 2010 /
 
Természetesen az hogy mi a PIC, analóg - digitális rész..ennek utána olvastam, és olvasok is.
Segítség a programozás gyakorlati részéhez kellene, az pedig az elejétől. De mint írtam, nem a pascallal van gondom, tehát kimondottan a PIC programozása érdekel.
(#) vilmosd válasza niedziela hozzászólására (») Szept 1, 2010 /
 
Hali
A Mikroe oldalon vannak szabadon olvashato konyvek a PIC, dsPIC processzorokrol, es a programozasukrol Basic, C, es Pascal dialektusban. Nagyon jol illusztralt, mondhatni szajbaragos irodalom. Ugyanott talasz sok mintapeldat is.
Udv Vili
(#) icserny válasza niedziela hozzászólására (») Szept 1, 2010 /
 
Jó lenne szűkíteni a kört, mert a PIC10/12/16-től a PIC32-ig elég széles a spektrum, s közben vátozik a felépítés és a fejlesztőeszköz is.

A legalapvetőbb dolgok az adatlapból derülnek ki, annak szorgos és alapos olvasgatása nem mellőzhető. Emellett hasznos lehet még az ún. Family Reference Manual-ok:

Complete Mid-Range Reference Manual
PIC18 Family Reference Manual
PIC24 and dsPIC DSC Family Reference Manuals

Ami még ezen kívül PIC specifikus, az a perifériák és programmegszakítások kezelése, konfigurációs bitek beállítása, EEPROM és Flash írása/olvasása.

Jó könyvek vannak a Mikroelektronika honlapján (Publications szekció). Pascal nyelven csak a dsPIC programozásáról ír konkrétan.

Beágyazott rendszerekkel kapcsolatban itt is találsz még egy-két(száz) könyvet.

Egy-egy speciális témakörben hasznos információt tartalmaznak az úgynevezett Alkamazási Mintapéldák (Application Notes), valamint jók a Microchip Masters Conference 2007, 2008, 2009 tananyagai (ha nagyon keresi valaki biztosan megtalálja).

Ezen kívül a különféle demó kártyák gépkönyvét és mintaprogramjait is érdemes nézegetni.
(#) Meggányver hozzászólása Szept 16, 2010 /
 
Sziasztok!

Az alábbi programmal küszködök de nem akarja villogtatni a ledet. Megköszönném ha valaki rávilágítana, hogy mit bénáztam el.

Program LedBlink;

Begin
Trisb:=0;

While True do
Begin
Portb.4:=1;
Delay_ms(500);
Portb.4:=0 ;
Delay_ms(500);
End;
End.


Próbapanelon 14 és 4 -es lábra +5 V, 5 lábra GND -t, a 10 -re meg a ledet 200 ohm -os ellenállással (led anódja van a 10 lábra kötve) .
(#) Fery válasza Meggányver hozzászólására (») Szept 16, 2010 /
 
Szia.

Quarz-ot tettél rá ? A proginak elméletileg menni kéne ha egyébként rendben van minden. Még annyit, hogy az MCLR lábat általában inkább egy 10k-s ellenálláson tedd tápra.
Az oldalamon találsz még Pascalban némi segitséget, ha érdekel. feryservice.hu

Fery
(#) Fery válasza Fery hozzászólására (») Szept 17, 2010 /
 
Bocsi. nem néztem meg a belinkelt képet, most látom belső oszcillátorra van állítva. Akkor nem kell a quarz, természetesen. Nem ismerem annyira ezt a PIC-et, nézz körül az adatlapban, hogy nem kell-e még valamelyik regiszteren állítani ahhoz, hogy menjen a belső oszcillátor...
Fery
(#) Meggányver válasza Fery hozzászólására (») Szept 17, 2010 /
 
Szia!

Köszi a választ mindenképp átnézem az oldalad mert minden érdekel. Próbáltam úgy is, hogy az MCLR lábra 10 K ellenállással tápra tettem, így sem működik. Az lehet hogy nem jó a PIC?
Az MPLAB- al tudom írni olvasni.
(#) Fery válasza Meggányver hozzászólására (») Szept 17, 2010 /
 
Szia
Nem egészen értem a dolgot ennek mennie kellene, igaz nekem a fejlesztőpanelba 18F4520-as PIC van, de azon ez a progi megy, szépen villog az RB 4-en a LED. Talán a configba a Brown Out Detect-et kikapcsolnám, mert nincs rá szükség, de ettől még... így is menni kéne.
Fery
Következő: »»   12 / 29
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