Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   237 / 1319
(#) AMD válasza kobold hozzászólására (») Júl 2, 2008 /
 
Hogy tudom ellenőrizni hogy sikerült-e?

oshon.JPG
    
(#) potyo válasza AMD hozzászólására (») Júl 2, 2008 /
 
Szerinted az a Verify gomb vajom mire szolgálhat?
(#) AMD válasza potyo hozzászólására (») Júl 2, 2008 /
 
Arra azt írja ki hogy:
Verfy failed at adress 0000h!
The value read form that adress is 3FFFh.
The value expected is 0064h.
(#) kobold válasza AMD hozzászólására (») Júl 2, 2008 /
 
Ha lassabbra lehet venni a programozás sebességét, akkor azt meg lehetne próbálni, utána Erase All, majd Program All. Hasonló nyűg nálam is volt, míg ki nem tapasztaltam, mikor nem téveszt...
A stabil Vdd és Vpp feszültségek persze alapfeltételek, de gondolom, ezek megvannak.
(#) watt válasza AMD hozzászólására (») Júl 2, 2008 /
 
Milyen LPT és milyen ICSP kábeleket használsz? (hossz, kábel anyaga?)
(#) AMD válasza watt hozzászólására (») Júl 2, 2008 /
 
Háát... kapaszkodj meg. Nincs LPT kábelem úgyhogy ideiglenesen így oldottam meg, valamelyik nap veszem a fáradságot és elmegyek egy sz.gép boltba.
A képért bocsánatot kérek de 20 képből így ez lett a legélesebb (valszeg haldoklik a fényképező,vagy én).
(#) Topi válasza AMD hozzászólására (») Júl 2, 2008 /
 
Na hát ezután ne lepődj meg, ha nem tudsz programozni és instabil.

Örülhetsz hogy akik eddig segítettek, nem billentenek fenékbe.
(#) potyo válasza AMD hozzászólására (») Júl 2, 2008 /
 
Vásárolás előtt inkább olvasd el alaposan watt oldalán az égetőről szóló leírást.
(#) trudnai válasza AMD hozzászólására (») Júl 2, 2008 /
 
Legalabb szereztel volna egy 1m-es CAT5-os UTP kabelt es azzal csinaltad volna Vagy akar a printer port csati lehetne a panelen is kozvetlenul beforrasztva, ha a panelt fizikailag ala tudod valamivel tamasztani valahogy, hogy ne a csati tartsa... (na jo, ez a mondat torlendo )
(#) AMD válasza trudnai hozzászólására (») Júl 2, 2008 /
 
Úgy lessz, ez csak ideiglenes megoldás. (nem megoldás)
(#) Norberto válasza AMD hozzászólására (») Júl 2, 2008 /
 
Idézet:
„A képért bocsánatot kérek de 20 képből így ez lett a legélesebb”


Vagy csak valaki összetaperolta az optikát, homályos...
(#) AMD válasza Norberto hozzászólására (») Júl 2, 2008 /
 
Igen. Topi már felhívta rá a figyelmemet. Sajna nem csak én használom a gépet.
(#) Amarton hozzászólása Júl 2, 2008 /
 
Sziasztok!

Tudna valaki mellékelni egy jól működő macro-t, amit fel tudnék használni az ASM fájlokban időzítésnek.

Keresgéltem a neten, de működő példányt nem találtam.
Jó lenne, ha lehetne állítani az órajelet, és tudna us-től szekundumig delay-ezni.

Előre is köszi.

Üdv Amarton.
(#) watt válasza Amarton hozzászólására (») Júl 2, 2008 /
 
Egyrészt nem hiszem, hogy makró kellene neked(szerintem nem tudod mi az, de ha még is akkor kérlek jelezd és nem magyarázom el...), hanem függvény, vagy ha jobban tetszik szubrutin.

Másrészt, az órajelet nem lehet állítani, csak ha cserélgeted a kristályt. De ez így még sem teljesen igaz, mert ha belső oszcit használsz, akkor lehet a frekit is változtatni(durva használhatatlan lépésekben), de ezt nem szokták így használni, mert eközben a programvégrehajtási sebességet is állandóan változtatnád, ami enyhén szólva is rossz megoldás.

Harmadrészt, időzíteni, főleg másodperces időtartamokig nem várakozási ciklussal szoktunk, hanem valós időzítésekkel, azaz Timerek és a megszakítás felhasználásával.
Beállítjuk a Timer osztóit, esetleg feltöltjük a Timer számlálóját egy kezdő értékkel, majd várjuk, hogy megszakítást generáljon a túlcsorduláskor. Ekkor lekezeljük azt, és kész az időzítés. Persze lehet több megszakítás után is beavatkozni, számlálva azt, ezzel kitágítani az egy megszakításnyi időtartamot a szükséges időre.

Javaslom megérteni a megszakítás menetét, és a Timerek használatát.
(#) Amarton válasza watt hozzászólására (») Júl 3, 2008 /
 
Szia watt

Mielőtt elkezded magyarázni, mint a hülyegyereknek a timereket és a szubrutint.
Nekem akkor is macro kell
Nem ma kezdtem a PIC-ezést, de az egyszerű feladatokhoz nekem a macro lenne a legjobb.
Ilyenre gondoltam, de ez nem műkszik:

  1. cblock 0x20
  2.      DlayValue:2
  3.      endc
  4.  
  5. CpuMhz = 4
  6. usec    EQU     -6
  7. msec    EQU     -3
  8. sec         EQU  1
  9. cycles  EQU     0
  10.  
  11. mynop   macro
  12.         noexpand
  13.         page $>>8
  14.         ENDM
  15.  
  16. cyclefor macro 1
  17. _cycles = \1
  18. IF _cycles > 0
  19. _temp   =       $//4
  20. IF _temp = 2
  21.  IF _cycles <5
  22.         REPT _cycles
  23.         expand
  24.         mynop
  25.         noexpand
  26.         ENDR _cycles = 0
  27.   ELSE
  28.         expand
  29.         mynop
  30.         noexpand
  31.         _cycles = _cycles -1
  32.         ENDIF
  33.     ENDIF
  34. IF _temp = 1
  35.     IF _cycles < 6
  36.         REPT _cycles
  37.         expand
  38.         mynop
  39.         noexpand
  40.         ENDR
  41.         _cycles = 0
  42.     ELSE
  43.         expand
  44.         mynop
  45.         mynop
  46.         noexpand
  47.         _cycles = _cycles -2
  48.         ENDIF
  49.     ENDIF
  50. IF _cycles > 3
  51.         expand
  52.          mov w, #_cycles / 3
  53.          decsz 1        ;dec w
  54.          clrb 2.1       ;modify PC to jump back
  55.         noexpand
  56.  _cycles = _cycles // 3 ;cycles left over
  57.  ENDIF
  58. IF _cycles > 0
  59.   REPT  _cycles
  60.         expand
  61.          mynop
  62.         noexpand
  63.    ENDR
  64.  ENDIF
  65. ENDIF
  66.         ENDM
  67.  
  68. delay   macro   2
  69. noexpand
  70. ;IF (\2=usec OR \2=msec OR \2=sec) AND (1<1000 AND 1>0)
  71.  IF \2=sec
  72.   _cycles = (\1 * 1000000 / (1000/CpuMhz))
  73.   ENDIF
  74.  IF \2=msec
  75.   _cycles = (\1 * 1000 / (1000/CpuMhz))
  76.   ENDIF
  77.  IF \2=usec
  78.   _cycles = (\1 / (1000/CpuMhz))
  79.   ENDIF
  80.  IF \2=cycles
  81.   _cycles = \2
  82.   ENDIF
  83.  IF _cycles = 0
  84.   expand
  85.          ;delay less than one cycle at this processor speed'
  86.  noexpand
  87. ; ELSE
  88.  IF _cycles > 255
  89.   REPT (_cycles / 256)
  90.    cyclefor 256
  91.    _cycles = _cycles - 256
  92.    ENDR
  93.   ENDIF
  94.  cyclefor _cycles
  95.  ENDIF
  96.  
  97. ELSE
  98.         delayhelp
  99. ENDIF
  100.         ENDM
(#) watt válasza Amarton hozzászólására (») Júl 3, 2008 /
 
Idézet:
„Mielőtt elkezded magyarázni, mint a hülyegyereknek a timereket és a szubrutint.”

Idézet:
„Nem ma kezdtem a PIC-ezést”

Akkor szégyeld magad, hogy egy ilyen egyszerű feladatot nem tudsz megoldani, és nem tudsz egy kérdést szakmailag korrekten feltenni!

A belinkelt megoldás, még ha működne is, nem javasolt.
Idézet:
„Nekem akkor is macro kell”

Akkor nem tudok segíteni, mert ennek szerintem nem ez a módja.

Még annyit, hogy ha legközelebb idézel kódot, akkor használd a KÓD gombot!
(#) Norberto válasza Amarton hozzászólására (») Júl 3, 2008 /
 
És milyen programmal próbáltad fordítani ezt a kódot?
(#) trudnai válasza Amarton hozzászólására (») Júl 3, 2008 /
 
Te figyi, mivel nem hasznaltal code blokkot a kodod beidezesenel baromi nehezen latni mi cimke es mi nem. Egy csomo olyan dolgot latok benne ami nem PIC assembler utasitas. Lehetnek ezek persze mas makrok is, de igy nagyon nehez ezen kiigazodni.

A masik, hogy "neked makro kell" - nem tudom honnan jon ez a ragaszkodas, hogy ezt megalmodtad vagy Isteni sugallat, de en ugy erzem, hogy elsosorban nem a programozasi technikara kellene konventralni ebben az esetben, hanem a problema megoldasara. A problema, hogy varakozni szeretnel adott ideig egy hordozhato rutingyujtemenyt felhasznalva. Forditasi direktivakat pedig nem csak makroknal lehet alkalmazni. Pl egeszen kis idok athidalasara valami hasonlokat erdemes csinalni:

wait10cycl call wait5cycl
wait5cycl nop
wait4cycl return

#define wait1cycl nop
#define wait2cycl goto $+1

Ennel kicsivel hosszabbakat mar erdemesebb ciklusba szervezni es akkor eldontheted, hogy hasznalsz-e RAM-ot ehhez vagy sem, pl:

  1. wait ; varakozas merteke a W-tol fugg...
  2.     addlw -1
  3.     btfss   STATUS,C
  4.     goto    wait
  5.     return

Ennel sokkal hosszabb varakozasokat pedig a timerre kell bizni ahogy azt mar watt javasolta neked es akkor eldontheted, hogy pollozod a tulcsordulast, vagy interruptozol, vagy ha kulso orarol megy akkor kozben altatod a PIC-et stb.
(#) Norberto válasza trudnai hozzászólására (») Júl 3, 2008 /
 
Idézet:
„Egy csomo olyan dolgot latok benne ami nem PIC assembler utasitas.”


Pont ez volt az, ami nekem is feltűnt, pedig direkt kihangsúlyozta, hogy ő pedig ASM fájlokat barkácsol...

//az előbb pedig kóddá tettem a programrészletét, és a vicc az egészben, hogy köze nincs az assembly nyelvhez az első 8 sort kivéve//
(#) szilva válasza Amarton hozzászólására (») Júl 3, 2008 /
 
A többiek már nagyjából elmondták a meglátásaikat, én ezekhez csak csatlakozni tudok.

Annyival egészíteném ki, hogy ilyen általános, bármilyen időzítést legeneráló makrót szerintem sincs túl sok értelme írni. Használok én is időzítéseket, pl. a HD kompatibilis LCD-t kezelő include fileomban a következő kódrészlet található:

  1. LCD_DELAY_100
  2. ; delay 100us at almost every system clock
  3.         variable        d
  4. d = (SYSCLK / D'40000' - D'4') / D'3'
  5.         if d > 0
  6.                         MOVLW   d
  7.             MOVWF   LCD_CHAR
  8. LCD_DLY_LOOP
  9.             DECFSZ  LCD_CHAR,F
  10.             GOTO    LCD_DLY_LOOP
  11.         else
  12. d = SYSCLK / D'40000' - D'1'
  13.         while   d>0
  14.                         nop
  15. d -= 1
  16.         endw
  17. endif
  18.                         RETURN


Ezzel létrehozok egy elméletileg órajeltől függetlenül 100us-ot időzítő LCD_DELAY_100 nevű szubrutint. Más rutinokból ezt ciklusból meghívogatva tudok akár ms-okat is időzíteni.

(A lent idézett kódodban olyan utasításokat látok, amik arra utalnak, hogy ez talán nem is PIC kód - engem MCS51 asm-re emlékeztet pl. a clrb és a bitcímzés írásmódja. Mynop-ot sem tudom hova tenni. Ha ezek viszont PIC-es makrók, akkor jó lenne látni azok kifejtését is, hogy egyáltalán lehessen érdemben nyilatkozni a kódról.)
(#) trudnai válasza Amarton hozzászólására (») Júl 3, 2008 /
 
Koszi Norberto, most mar latni valamelyest a kodot, szoval:

1. Nem ertem az expand es noexpand minek van ossze-vissza hasznalva? Ez csk a lista file generalasanal jatszik szerepet, a leforditott kodban nem - jelen esetben szerintem csak megneheziti a kod atlathatosagat.

2. "page $>>8" - mi a fene ez? PCLATH -ba toltoget egy page nevu makro vagy mi? Javasolnam a PAGESEL hasznalatat, valamint az UPPER, HIGH es LOW operandusok hasznalatat.

3. cyclefor macro 1
_cycles = \1

Ez igy nagyon csunya es atlathatatlan, szerencsesebb lenne a szamok helyett neveket hasznalni makro parametereknek, pl

cyclefor macro cycl
_cycles = cycl

4. decsz 1 ;dec w

Ez a 'decsz' makro amugy miert nem 'decwsz' akkor mar? Na mindegy, idozitett ciklusokban nem celszeru makrokat hasznalni mert nehezebb atlatni hany ciklust ker (te csak egyetlen kulcsszot irsz, de lehet az 2 vagy 3 utasitasra bovul ki a makro kifejtesekor)

5. clrb 2.1 ;modify PC to jump back

Ezt vegkepp nem ertem. 'clrb' ??? Clear Bit??? Ebbol a float szambol az egeszresz a regiszter cime es a tort resz a bit? Magyaran a PCL bitjeit birizgalod?

6. REPT..ENDR? A WHILE...ENDW mar nem volt jo?

7. "_temp = $//4"

Hmm, nehany nyelvben a '**' a hatvanyozas, akkor a '//' a gyokvonas? Amugy ahogy latom a kod forditastol fuggoo elhelyezesetol fuggoen ugykodsz valamit de ez igy nagyon nem helyen valo!
(#) watt válasza trudnai hozzászólására (») Júl 3, 2008 /
 
Azt hiszem ezt nem ő írta, csak találta és beszúrta, hogy lássuk mire is lenne szüksége.
(#) szilva válasza watt hozzászólására (») Júl 3, 2008 /
 
Azért az továbbra sem világos, hogy mi értelme van a makrónak. Ugyanis ahány helyen használja, annyi kódkifejtett "kígyó" kerül be a lefordított programba.

Általában szerintem az a jó megközelítés, ha egy IF-es szerkezettel egy ismert időzítést előállító alaprutint írunk és ezt hívogatjuk paraméterezhető ciklusokkal. Így a kódba csak a paraméterbetöltés és a runtinhívás kerül bele az időzítés helyén, és az egész programban csak egy helyen lesz a CPU órajeltől függően ilyen-olyan kódkígyó.

Persze minden ilyen jellegű időzítésnél szem előtt kell tartani, hogy a CPU ilyenkor mást nemigen csinál. Mérlegelni kell, hogy ráérünk-e úgy időt húzni, hogy esetleg lekésünk valamilyen eseményről. Ennek ellenére én nem mondanám, hogy minden időzítési feladatot interrupvezérelve kell megoldani, mert ha az időzítés alatt úgysincs semmi tennivaló, akkor ez a módszer egyszerűbb megvalósítást ad.
(#) trudnai válasza watt hozzászólására (») Júl 3, 2008 /
 
Na mindegy, akkor legalabb leirtam miert nem mukodik (tobbek kozott)
(#) watt válasza szilva hozzászólására (») Júl 3, 2008 /
 
Pont ez a lényeg, és ezért is gondoltam azt, hogy nem tudja mi az a makro.
(#) bladika hozzászólása Júl 3, 2008 /
 
Sziasztok!

A következő lenne a kérdésem! Van egy picem ami a soros vonalon küldki 5 külömböző üzenetet 5 külömböző gomb hatására. A gombok és a pic kb 1m re vannak egymástól, viszont a lehető legkevesebb lábbal és vezeték érrel szeretném megoldani. A konkrét kérdésem az lenne,hogy erre a megoldásra használható e a pic A/D átalakítoja. A konkrét elképzelés a mellékelt képen. Az ellenállások temészetesen megfelelően megválasztottak. Ez az elképzelés életképes?Ja és ezt a picet csak példaként dobtam oda más lesz helyette!

ApD.JPG
    
(#) watt válasza bladika hozzászólására (») Júl 3, 2008 /
 
Ha elég nagy(pl. 10...40mA) áramot folyatsz az osztó körben, akkor jó lehet az 5méteres kábellel is. Azért némi 100nF-os szűrés még elfér a bemenet közelében.
(#) bladika válasza watt hozzászólására (») Júl 3, 2008 /
 
Nem lesz több 1m -nél igazából csak arra irányult a kérdés,hogy a pic A/D átalakítóját tudom e erre a célra használni
(#) potyo válasza bladika hozzászólására (») Júl 3, 2008 /
 
Jó lesz. Majd azt kell figyelni, hogy az AD konverzió eredménye egy adott sávon belül van-e, illetve kell némi szoftveres debounce is hozzá, mert ha épp változik a feszültség, akkor akár másik gomb lenyomását is érzékelheti.
(#) bladika válasza potyo hozzászólására (») Júl 3, 2008 /
 
Igen valami hasonlóra gondoltam én is! Oké köszönöm!
Következő: »»   237 / 1319
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