Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   227 / 1319
(#) potyo válasza pepe33 hozzászólására (») Jún 8, 2008 /
 
Nézz valami C nyelvről szóló anyagot, a C nyelv az mindenfelé C nyelv. A szintaktikája ugyanaz PC-n és kontrolleren is. Aztán nézz példaprogramokat, hogy lásd, hogy épül fel egy PIC-re írt C program.
(#) bbalazs_ válasza szilva hozzászólására (») Jún 8, 2008 /
 
Koszi, a masodik lett volna a nyero, de kozben kiderult, hogy a helyzet bonyolultabb (kevert db es dw), igy egyenkent kell paroztatnom oket...
(#) gyerek67 válasza pepe33 hozzászólására (») Jún 9, 2008 /
 
A PicBasic Pro engem is akkor hagyott benne a lekvárban, mikor mér majdnem teljesen elkészült a projektem. Ekkor álltam át a CCS C-re. Nem kell megijedni tőle, könnyen megtanulható. Nagyon jó olvasni való Topi cikksorozata, nekem is sokat segített. Az anyagokat délutánra előkerítem, addig valahogy bírjátok ki!
(#) Sendi válasza szilva hozzászólására (») Jún 9, 2008 /
 
Helló Szilva.

Köszönöm a válaszodat.
Igen, én is próbálkozta az adatlap alapján a CMCON állításával, de valószínűleg (biztosan) rosszat állítottam.
Most már tudom, hogy mit miért.

Köszönettel
(#) Sendi válasza szilva hozzászólására (») Jún 9, 2008 /
 
Helló Szilva.

Tökéletesen működik amit leírtál.

Köszönöm
(#) orgiusz hozzászólása Jún 10, 2008 /
 
Sziasztok!
Segítséget kérek!
Megépítettem egy 16f628-as pic-kel előgyújtás
szabályozót, ladába. Van hozzá program is, de nem 4 ütemű negy hengereshez, szerintem, mivel ha pörgetem az autó durrogósan jár. Szóval abban kérek segítséget, mit írjak át a progiban, hogy korrekt legyen a késleltetés, vagy csak az időértéken kellene variálni, esetleg osztást állítani a megszakítási időnek..., mivel kezdő vagyok ebben a témában nincs ötletem, nem látom át teljesen a progit. Csatolom az asm-et és előre is köszi minden észrevételt!

IGNITION.ASM
    
(#) kissi válasza orgiusz hozzászólására (») Jún 11, 2008 /
 
Szia!

A végén találhatók táblázatok (RETLW xxx), valószínűleg ezek között az értékek között válogat a bemeneti jellemző(k) alapján. Azt, hogy konkrétan milyen értékeket kell beírni csak konkrét adatlap vagy kísérletezgetéssel lehet kitalálni! Az asm-et mellékelted, de kapcsolási rajzot nem, ezért például olyan is előfordulhat, hogy nem jó a PIC órajelének a sebessége, azaz az általad alkalmazott és a tervezett órajel eltér egymástól!
Én úgy látom, hogy ennek a programnak az áttervezése bonyolultabb, mint egy újnak a megírása, ha nem tudjuk a "körítést"!

Steve
(#) trudnai válasza orgiusz hozzászólására (») Jún 11, 2008 /
 
Ha jol latom ez lenne az (Google translatorral angolra forditva mert sajnos maskepp nem ertem meg - mondjuk igy is le kell forditani az anglirus-rol angolra pl ground helyett land )

Ha jol latom irkalja, hogy hogyan lehet parameterezgetni, pl ott van egy parameter tabla szamolo alkalmazas aminek az outputjat csak be kell tenni az ingnition.asm file-ba.

Remelem ez segit
Tamas
(#) orgiusz válasza kissi hozzászólására (») Jún 11, 2008 /
 
Szia!
Küldöm a kapcsolási rajzot, talán igy érthetőbb.
Az órajelem 4Mhz, ez biztos!
A táblázati értékekkel lehetne kisérletezni, de szerintem az asm. 2 ütemű motorhoz íródott, vagyis egy fordulatra egy bemenő jel jut egy henger esetén, tahát 4 ütemű 4 hengeresnél két jel jut 1 fordulatra, ha minden igaz. Ezért amikor fordulat nekem 3000, a pic azt 6000-nek gondolja és rossz értéket állít, de lehet hogy nem és tényleg rossz a program
Ha a sejtésem jó talán a progiban az értékek átírásával meg lehetne ezt oldani? Tanácstalan vagyok

scheme.gif
    
(#) potyo válasza Soulskater hozzászólására (») Jún 11, 2008 /
 
Idézet:
„és valahogy meg tudnád velem osztani?”


Majd valahogy megpróbálom. Csak a fájl kb. 100MB, otthonról meg csak 64k feltöltésem van. Lesz egy 4-5 óra, mire felszenvedem valahová.
(#) trudnai válasza potyo hozzászólására (») Jún 11, 2008 /
 
torrent? szerintem tobbunket is erdekelne, es igy gyorsaban tudna "elszaporodni" mindazok kozt akit erdekel...
(#) orgiusz válasza trudnai hozzászólására (») Jún 11, 2008 /
 
Köszönöm, mindig tanul az ember, én nekiáltam oroszul fordítgatni ,mondjuk angolból sem vagyok egy lángész.
Szóval itt a program, beállítom a felső értéket "Holla" 60. A mkc időt hagyom 60-on Az alsó értéket állítom 700-ra majd megnyomom a "razcsitaty" gombot, majd jobbra előtünnek az értékek. Tulajdonképpen a "tablicsa" azaz az első oszlopot kellene beírnom az asm egyik táblázatába pl a default-ba?

igncalc2.gif
    
(#) trudnai válasza orgiusz hozzászólására (») Jún 11, 2008 /
 
Hat az oldalon azt olvasom, hogy a 60 ketutemuekre valo, es 30 kell a negyre... Tobbi kerdesre nem tudok valaszolni, mert en ugy ertettem ez general valami asm-be kozvetlen beszurhato kodreszletet - hogy miert nem voltak kepesek kulon file-ba generalni es egy #include-dal egyszeruen behuzni az rejtely szamomra

Mindegy, ez nem is annyira PIC kerdes mar, szoval nem tudom i fog tudni valaszolni a kerdesre, mindenesetre jo kiserletezest es sok sikert hozza!
(#) Sendi válasza orgiusz hozzászólására (») Jún 12, 2008 /
 
Helló Orgiusz.

Azt, hogy hány szikrát ad a gyújtás, az függ attól is hogy hány mágnes halad el a hall elem elött egy fordulat alatt.
Illetve, hogy hol vannak a mágnesek (a főtengelyen vagy máshol) A Zsigulinál ha jól saccolom, 2:1 áttétel van az elosztó és a főtengely között. (2 szikra/fordulat)
. Tehát ügyesen kell kikalkulálni az "értékeket", mert itt a szikraszám növekedést, nem fordulatszám növekedése okozza, hanem a hengerek számának a növekedése.
Ha nem titkos, feldobhatnád ide a 'kalkulátort'.
Hátha kell egyszer gyújtást csinálni.

Üdv.
(#) Sendi hozzászólása Jún 12, 2008 /
 
Helló Mindenkinek.

A következő kérdéseim lennének.
Macron belülre tettem egy feltételes ugrást,és a fordító tiltakozik (MPlab)
Ezt nem szabad tennem?
Másik:
Egy btfsc utasítás után jön a regiszter neve, majd vessző, és a bit száma. Ez utóbbi lehet egy általam definiált változó is? (btfsc valami,sajatvaltozo)
Egy macroban müködött, de az én programomban nem.

Köszönettel.
(#) trudnai válasza Sendi hozzászólására (») Jún 12, 2008 /
 
Sendi,

Ha valami hibaval tiltakozik az MPLAB akkor azert jo lenne tudni a hibat is - meg persze nem artana a kodot is beidezni vagy csatolni hogy legyen valami fogalm mirol is van szo...

En amire tippelnek, hogy van egy cimked, es a makrot tobb helyrol hasznalod igy a cimken parazik. Ez esetben a makron belul meg kell mondanod neki, hogy az adott cimke lokalis a makron belul, tehat:

  1. akarmi   macro
  2.               local cimke
  3.  
  4.               btfss valami,1
  5.               goto cimke
  6. ...
  7. ...
  8. ...
  9. cimke
  10. ...
  11. ...
  12.               endm


A masik, meg, hogy a makro parameteret ugy kell felfogni mint egy behelyettesitest - vegulis a makro az egy behelyettesites. Tehat mikor van a fenti 'akarmi' nevu makrod, es utana 3x egymas ala irod, hogy 'akarmi' a forrasban, akkor 3x ugyanazt a kodreszletet beteszi arra a helyre. Vegulis van egy elofeldolgozo, ami forditas elott ezt megcsinalja es a forditonak mar az igy elokeszitett kodot adja at.

Namost makro parameter ennek megfeleloen csak egy behelyettesites, mintha kezzel beirtad volna, igy a makro parameterkent atadott dolgok nem minosulnek valtozonak a fordito szempontjabol. Pl:

  1. akarmi   macro valt1, valt2, valt3
  2.     btfss valt1, valt2
  3.     goto valt3
  4.     endm
  5.  
  6.     akarmi PORTB,1,cimke
  7.  
  8.     akarmi STATUS,C,tulcsord


Itt az a kovetkezo kod alakul ki forditas elott (tehat az elofeldolgozo vagy preprocessor utan)

  1. btfss PORTB,1
  2.     goto cimke
  3.  
  4.     btfss STATUS,C
  5.     goto tulcsord


Ezutan a fordito leforditja ezt... tehat ugyanugy fix erteked van a vesszu utan...

Ha valtozobol akarod ezt a feltetelt megcsinalni akkor maskepp kell hozza allni, pl XOR-al vagy AND-el le lehet tesztelni a bitet:

  1. movf   valt,W
  2.     andwf  PORTB
  3.     btfss    STATUS,Z
  4.     goto    cimke


Szoval itt a "valt"-ban van pl b'00010000', igy a 4. bitet teszteled le, ha az 0 akkor a Z flag beall... Es akkor igy tobb bitet is lehet figyelni stb stb stb...
(#) Sendi válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Helló Trudnai

Igen, a fordító a cimke ellen tiltakozott.

Ez pedig itt a második kérdés prg részlete:

nemleptetes
movlw B'1000'
btfsc buffF,latchnum
iorlw 0x1
btfsc buffB,latchnum
iorlw 0x2
movwf PORTC
incf latchnum
movfw latchnum
sublw d'8'
btfsc STATUS,Z
goto latch_done
movfw latchnum
goto Latchsorszam

A latchnum-t változtatom (növelem) de a iorlw-t mindig átugorja, hiába van '1' -s a latchnum-nak megfelelő helyen a bufffF és a buffB változóban.
(azaz néha nem ugorja át, de nem tudom, hogy mitől függ)

Köszönettel
(#) Sendi válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Helló Trudnai.

Úgy tünik, a "local" dolgok bejöttek, már nem tiltakozik az MPLab.

Egy macrót nem tudok megnézni a simulátorban?
Nekem mindig átugorja.

Köszönöm a segítségedet.
(#) trudnai válasza Sendi hozzászólására (») Jún 12, 2008 /
 
Hat ez igy nem is mukodhet, csak fix bit cimet lehet a bit tesztelonek atadni - tehat ami forditasi ido alatt kiertekelodhet.

Ahogy irtam ezt aritmetikaval kell megvalositani, tehat a Te esetedben:

  1. latchnum_init
  2.     clrf       latchnum
  3.     bsf      latchnum,0 ; betesszuk a 0. bitet magasba
  4. nemleptetes
  5.     movlw  B'1000'
  6.     movwf  tmp
  7.  
  8.     movf  buffF,W
  9.     andwf  latchnum,W
  10.     btfsc    STATUS,Z
  11.     bsf       tmp,0
  12.  
  13.     movf  buffB,W
  14.     andwf  latchnum,W
  15.     btfsc    STATUS,Z
  16.     bsf       tmp,1
  17.  
  18.     movf    tmp,W ; kitesszuk a portra szepen
  19.     movwf PORTC
  20.  
  21.     rlf        latchnum,f ; maszkot odebb toljuk
  22.     btfss   STATUS,C ; ha tulcsordult, akkor keszen is vagyunk
  23.     goto    ....vissza a ciklusra vagy mi...
  24.  
  25. vege
(#) trudnai válasza Sendi hozzászólására (») Jún 12, 2008 /
 
Ha gpuitils-t feltelepited es azzal forditasz, akkor annak be lehet allitani, hogy a makrokat is lehessen szimulalni. Amugy pedig nyisd meg a disassembly ablakot, es ott ha beallitod, hogy szimbolumokat is lasd akkr viszonylag jol lehet debuggolni MPASM-mel forditva is.
(#) Sendi válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Helló Trudnai.

Köszönöm, köszönöm, köszönöm.
(#) trudnai válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Ehh, tettem bele egy oriasi hibat, kivancsi vagyok Ti is eszre veszitek-e Ill ha mas hibat talaltok az is jo pont
(#) potyo válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Itt van a Dr. Kónya László - PIC mikrovezérlők alkalmazástechnikája könyv pdf-ben. Ez az első kiadás.

http://potyo.info/konya-pic.pdf
(#) trudnai válasza potyo hozzászólására (») Jún 12, 2008 /
 
Koszi Potyo,

Belekerult egy kis idore mire le birtam szedni a rapidshare-rol Jo konyvnek tunik igy elso ranezesre.

Koszi megegyszer,
Tamas
(#) orgiusz válasza trudnai hozzászólására (») Jún 12, 2008 /
 
Köszönöm, valahogy kisilabizálom.
(#) orgiusz válasza Sendi hozzászólására (») Jún 12, 2008 /
 
Szia Sendi!
Teljes mértékig jól látod, a ladánál 2 szikra egy fordulat, vagyis ha jól számolok 1000 rpm-nél 30ms 2 jel között eltelt idő. Csak azt nem értem a TMR_VALUE értéket,hogy számoljam, vagy az mihez viszonyított érték. A .0 és a .239 240rpm-enkénti léptetés, de mi van akkor ha én 400rpm-enként szeretnék léptetni?
Szóval matek, matekolok
A kalkulátor publikus csak ha feltelepíted mivel orosz kérdőjelek és ákombákomok a betűk, de a képen látszik hogyan kellene kinéznie. a web címe ahonnan letölthető,
http://www.twowheel.nm.ru/index.htm ,ill csatolom
Azért köszönök mindent. Lehet, hogy igaza van trudnainak és nem találok válasz, marad a kisérletezgetés és nagyon sok idő. De nem adom fel!
Üdv:Á.

IgnCalc.exe
    
(#) Thowra hozzászólása Jún 14, 2008 /
 
Üdv mindenkinek!
Építgetés közbe felfigyeltem arra, hogy azonos kvarcoknál néha eltér a kondik értéke (30pf, 33pf, 20pf...). Mitől függ ez?
(#) menyus hozzászólása Jún 14, 2008 /
 
Sziasztok!

Kérdésem lenne, hogy egy megszakítás lefutása után hol fog folytatódni a program futása? Onnét ahonnan a megszakítás történt? (én így tudom, lehet hogy rosszul...) Azt hogy lehet megoldani hogy a "RETFIE' után egy általam meghatározott résztől fusson a program? Mert ha a RETFIE előtt teszek be egy GOTO t akkor kiléptem a megszakításból. Ha helyette akkor meg nem műkodik a megszakítás. (ezt már csak kínomban probáltam ki, tudtam hogy nem lesz jó... ) Hogyan lehet ezt megoldani?

(#) Norberto válasza menyus hozzászólására (») Jún 14, 2008 /
 
Idézet:
„Mert ha a RETFIE előtt teszek be egy GOTO t akkor kiléptem a megszakításból.”


A RETFIE arra való, hogy visszatöltse a stack tartalmából a visszatérés címét, illetve újraengedélyezi a globális megszakításokat. Namost ha te ezelőtt GOTO-val "kilépsz", akkor a további megszakítások nem fognak működni, hacsak nem engedélyezed külön ismét a megszakításokat... legalábbis én így gondolom. Miért kellene, hogy meghatározott programrészhez térjen vissza? Amúgy meg lehet oldani tutira.

Egyszerűen a megszakítást egy "majdnem végtelen" ciklussal oldod meg, persze csak ha a programod engedi. A megszakítás megtörténtekor ugye a megszakításos programrész fut le, amiben pl. egy változót átállítasz. Ennek a változónak a változását figyeled a "majdnem végtelen" ciklusban. Ha megváltozott (ami a megszakítás lefutását jelenti), akkor feltételes ugrás(oka)t hajthatsz végre, oda ugrathatod a programodat, ahova akarod lényegében.
(#) trudnai válasza menyus hozzászólására (») Jún 14, 2008 /
 
Szia Menyus,

Igen, onnan folytatodik ahol megszakadt, epp ez az ertelme a megszakitasnak. GOTO-t siman hasznalhatsz megszakitasbol, csak utana ne felejts el vissza terni es rendesen kilepni a megszakitas rutinbol. Sokszor CALL-t hasznalnak, es a rutin ugye vissza ter a RETURN vagy RETLW utan a megszakitas kezelobe, ahol majd elgevzed a kontextus vissza allitasat es RETFIE-vel szepen kilepsz.. Nagyon leegyserusitve, inkabb csak pseudo kodnak tekintve ezt a keretet:
  1. isr  org 4
  2.     movwf    saveWREG
  3.     swapf    STATUS,W
  4.     movwf   saveSTATUS
  5. ...stb...
  6.  
  7.     btfsc     INTCON,T0IF
  8.     goto      akarmikezelo
  9.     btfsc     INTCON,GPIF
  10.     call      barmikezelo
  11.  
  12. ...stb...
  13. isrExit
  14.     swapf    saveSTATUS,W
  15.     movwf   STATUS
  16.     swapf    saveWREG,f
  17.     swapf    saveWREG,w
  18.     retfie
  19.  
  20. akarmikezelo
  21.     ...stb...
  22.     bcf       INTCON,T0IF
  23.     goto    isrExit
  24. barmikezelo
  25.     ...stb...
  26.     bcf       INTCON,GPIF
  27.     return

Ha nem tudod van nem lehet lekezelni a megszakitaskor azt amit kell/szeretnel csinalni (pl mert tul hsszu ideig tartana), akkor egy flaget be kell allitani ami alapjan a megszakitas vissza terese utan a foprogram el tud agazni. Tehat a fo programod ugye ciklusban var valahol vagy ciklusban valamit csinalgat, igy periodikusan le tudod kerdezni az esemeny bekovetkezett-e mar amire varsz. Ha igen akkor ott elagazol. Nagyon leegyserusitve, inkabb csak pseudo kodnak tekintve ezt a keretet:
  1. isr  org 4
  2.     movwf    saveWREG
  3.     swapf    STATUS,W
  4.     movwf   saveSTATUS
  5. ...stb...
  6.  
  7.     btfsc     INTCON,T0IF
  8.     goto      israkarmi
  9.     btfsc     INTCON,GPIF
  10.     goto      isrbarmi
  11.  
  12. ...stb...
  13. isrExit
  14.     swapf    saveSTATUS,W
  15.     movwf   STATUS
  16.     swapf    saveWREG,f
  17.     swapf    saveWREG,w
  18.     retfie
  19.  
  20. israkarmi
  21.     bsf     intSTATUS,1
  22.     ...stb...
  23.     bcf       INTCON,T0IF
  24.     goto    isrExit
  25. isrbarmi
  26.     bsf     intSTATUS,2
  27.     ...stb...
  28.     bcf       INTCON,GPIF
  29.     goto    isrExit
  30.  
  31. main
  32.     ...stb...
  33.     btfsc    intSTATUS,1
  34.     goto    akarmiKezelo
  35.     btfsc    intSTATUS,2
  36.     call     barmiKezelo
  37.  
  38.     ...stb...
  39.     goto    main

Ezzel az a gond, hogy sok esetben interrupt nelkul is meg lehet ezt a modszert valositani, es akkor felesleges meg kulon interruptozgatni, annak a kontextus menteset/visszaallitasat elszenvedni, az abban levo osszehasonlitgatasokat vegig progetni stb.
Következő: »»   227 / 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