Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   703 / 1320
(#) watt válasza Attila86 hozzászólására (») Márc 16, 2010 /
 
Az 5-öst alakítsd át 0,5-re, majd tegyél bele egy számlálót a mostani 5-ös kiszolgálására, a 0,5-ös főágban pedig csak a kimenetet billegtesd, ha kell....
(#) Attila86 válasza watt hozzászólására (») Márc 16, 2010 /
 
Az az igazság hogy a 100ms-os már úgy működik hogy az 5ms-osat számolja. Ráadásul az 5ms-osat nem szeretném megváltoztatni mert akkor pár másik dolgot is át kell írnom. Ami persze nem olyan hű de bonyolult, de egyszerűbb volt betenni azt a piezót a kosárba amit az előbb Icserny linkelt.
(#) watt válasza Attila86 hozzászólására (») Márc 16, 2010 /
 
Hát, ha neked egyszerűbb, akkor nem mondhatok ellent.
(#) Attila86 válasza watt hozzászólására (») Márc 16, 2010 /
 
Igazából egy piezót egyébként is kellene vennem. Annyi hogy akkor már nem egy simát hanem ezt a gerjesztő áramköröset veszem meg. Szerintem ez nagyon egyszerű.

Ugye 5V és a PIC I/O lábának árama elegendő egy ilyen piezónak?
(#) vicsys válasza Attila86 hozzászólására (») Márc 16, 2010 / 1
 
Igen, bőven elég.
(#) Ktulu válasza watt hozzászólására (») Márc 16, 2010 /
 
Idézet:
„Hát, ha neked egyszerűbb,”

Hmm, van aki nem is ismeri ezt a szot:
Craft
hihetetlen...
(#) vicsys válasza Ktulu hozzászólására (») Márc 16, 2010 /
 
Én sem ismerem és nem is értem, hogy jön ide a PIC-es topicba...?
(#) Ktulu válasza vicsys hozzászólására (») Márc 16, 2010 /
 
Tan raz a hideg az AVR-ektol?
(#) vicsys válasza Ktulu hozzászólására (») Márc 16, 2010 /
 
Nem, egyáltalán nem. Továbbra sem értem, hogy mi a francot keres egy AVR project a PIC-es topicban és hogyan jön össze watt mester hozzászólásával?
(#) watt válasza Ktulu hozzászólására (») Márc 16, 2010 /
 
Szerintem ezt a vonalat itt ne feszegessük!
(#) watt válasza Attila86 hozzászólására (») Márc 16, 2010 /
 
Én úgy vettem ki abból amit írtál, hogy van egy piezód, és csak azért rendelsz postaköltséggel egy másikat, mert nem akarsz leprogramozni egy aránylag egyszerű rutint. De így már értem és így valóban egyszerűbb!
(#) Ktulu válasza vicsys hozzászólására (») Márc 16, 2010 /
 
Hat a hangkeltesrol volt szo ugyebar, es a kihivasokrol. (mikozben a mikrovezerlo nem lustalkodik ) Szerintem at kell latni a szitan, teljesen mindegy ebben az esetben, hogy PIC vagy AVR.
(Az alkoto zsenialitasat cseppet sem kicsinyiti mindez. Egy remekmu.)
(#) vicsys válasza Ktulu hozzászólására (») Márc 16, 2010 /
 
Ad 1: Egyáltalán nem mindegy, hogy pic vagy avr. Persze mindkettő használható és felhasználható ilyen és hasonló témákban is. De! Nem véletlenül lett kétféle topic létrehozva. Ha valaki avr-s projectek után keresgél, kicsi a valószínűsége, hogy azt egy PIC-es topicban teszi...
Ad2: Egy ilyen kaliberű project belinkelése egy csipogó csipogtatasához- enyhén szólva is kimeríti- az ágyúval verébre tipikus esetét.
Részemről a téma lezárva, nem kívánok tovább offolni.
(#) Attila86 válasza watt hozzászólására (») Márc 16, 2010 /
 
Ja nem... nincs piezóm és a HEStore-tól gyalog 5 percnyire lakom.
(#) lidi válasza Attila86 hozzászólására (») Márc 17, 2010 /
 
Ehh, te mázlista, így könnyű, nemééér
(#) The_Saint hozzászólása Márc 17, 2010 /
 
Sziasztok....

Hogy lehet C programot az MPLabIDE-vel lefordítattni? Vagy hogy lesz nekem C-ből hex file?
lehet mosolyogni, nem tudhat mindenki mindig mindent...
Előre is köszönöm a válaszokat!

Üdv
The_Saint
(#) Collector hozzászólása Márc 17, 2010 /
 
Kb. 3 napja kezdtem picezni MPlabban, lenne néhány kérdésem. 18F4520-at nyúzok most, és igazából a ledes villogtatáson kívül nemigen tudok mást (tehát port kezelés, egy két primitív ciklus, meg hasonlók).
Azt szeretném megoldani, hogy lenne egy poti, amit rákötnék az A/D bemenetére. Ezt, ahogy látom, 10 bites felbontással képes 'tárolni', de csak 8 bites regiszterek vannak.
Emellett lenne egy számláló, ami 0,1ms vagy 1ms-onként (kettő közül valamelyik, beállítható), számol 1-et. Namost, nekem 10 bitre lenne szükségem itt is, hogy az A/D értékét és a számláló értékét összehasonlítsa a PIC, ezt végülis 2 regiszterrel meg is lehetne valósítani, az egyik a normál regiszter, a másik pl. egy carry regiszter.
Erre van valakinek javaslata, hogy lehetne megoldani? A program nem csak ebből áll, de a 'magját' már le tudtam programozni, igazából ez az A/D és számláló összehasonlítás lenne az érdekes. Ha kell, fel tudom rakni az eddigi rövid programot, úgy lehet, hogy érthetőbb, mit akarok csinálni.
(#) vicsys válasza The_Saint hozzászólására (») Márc 17, 2010 /
 
Az attól függ, hogy melyik C-s programmal készült a forrás...
(#) Hp41C válasza The_Saint hozzászólására (») Márc 17, 2010 /
 
Szia!

- Fel kell telepíteni a C fordítót...
- A MpLab-ban be kell állítani a "Project / Set Language Tool Location" ban a feltelepített C fordító elérési útjait..
- Amikor a projectet létrehozod, a "Project / Project Wizard" segítségével, ki lehet majd választani a forrás típusát és a fordító programot is.

Szia
(#) Hujikolp hozzászólása Márc 17, 2010 /
 
Üdv!

16F887 EEPROM gondok. Datasheet-ből kimásoltam a példát, annak a segítségével írnám, de nem akarja. Debuggolva a megfelelő adatok kerülnek a címbe és az adatba is, de nem menti el oda. Olvasásnál az eredeti adat kerül vissza, és a verify jelez.

Megpróbáltam egy átlátható kódot összehozni.

EEPROM_P.asm
    
(#) steev válasza Collector hozzászólására (») Márc 17, 2010 /
 
ASM vagy C? C-re tudok AD példát mutatni.
(#) Attila86 válasza steev hozzászólására (») Márc 17, 2010 /
 
Assemblyben alkot. De egyenlőre nem maga az AD mérés a kérdéses számára hanem hogy hogyan tud egy-egy két bájtos regisztert összehasonlítani.

Először a két felső bájtot kell összehasonlítani, aztán az alsókat. Valahogy így:
  1. movf    regiszter1_H, W
  2.         cpfseq  regiszter2_H
  3.         bra             abc
  4.         bra             egyenlő
  5. abc     movf    regiszter1_L, W
  6.         cpfseq  regiszter2_L
  7.         bra             nem_egyenlő
  8.         bra             egyenlő
(#) vilmosd válasza Hujikolp hozzászólására (») Márc 17, 2010 /
 
Hali
Ez a program lefordult? Talaltam benne nehany jokepu hibat. Eloszor is nem irunk csak angol karaktereket azonok neveibe. Pl
  1. FIDE_LčPčS
  2.         DATA_EE_ADDR
  3.         DATA_EE_DATA
  4.         EEPROM_SEGčD
  5.         LčPčS2
  6.         LčPčS3
  7.         LčPčS4

Masodszor; Le kelleni egy kicsit tisztazni a listat mert igy elegge atlathatatlan.
Harmadszor EEPROM rutin valoszinu jo, de probald meg csak szuzen azt betenni es ha ott megy akkor elkeveredett egy kicsit a progi.
Az MPSIM mit mond ?
Udv Vili
(#) Blint hozzászólása Márc 17, 2010 /
 
Sziasztok!

A következő a gondom:
AD konvertálást ütögetek éppen össze.
A felső 8bitet az ADRESH-ba kérem, ezen kívül szükségem van még egy 9.bitre ami az ADRESL MSB bitje.
  1. ADresult = ADRESH;
  2.         ADresult = ADresult<<1;
  3.         ADRESL &= 0x80;


Amikor viszont hozzá akarom adni/fűzni az LSB bitet akkor
se ez
  1. ADresult += (ADRESL<<1);

se ez
  1. if(CHECK_BIT(ADRESL,7)) ++ADRESH;

nem működik.

-(A CHECK_BIT makrót azt külön definiáltam)
-Az ADresult az unsigned int típusú
-Maga az AD konvertálás működik, mert ha külön kijeleztetem a két regisztert (ADRESL, ADRESH) akkor szépen dolgozik, csak ez az összeadás nem megy valamiért.
-HITEC-C fordítót használok
-A hibajelenség: ugyebár maximum 511 lehet a kijelzett érték, ehhez képest igen egzotikus számok jönnek, simán felugrik az ADresult értéke 600 fölé is.

Van valami ötletetek?

Blint
(#) Hujikolp válasza vilmosd hozzászólására (») Márc 17, 2010 /
 
Üdv!

A változó neveivel nincs gond, lefordul.
Megpróbáltam minimálisra fogni a kódot. Mplab-ban ha benne van a SLEEP, akkor onnan nem megy tovább. Ha nincs benne továbbmegy, de nem írja bele. Verify rosz, ha megnézem az EEPROM ablakot, akkor ott sincs semmi.
(#) potyo válasza Blint hozzászólására (») Márc 17, 2010 /
 
Én jobbra igazítanám az AD konverzió eredményét, és így csinánám:
  1. ADresult=(ADRESH<<8)+ADRESL;
  2. Adresult>>=1;
(#) vilmosd válasza Hujikolp hozzászólására (») Márc 18, 2010 / 1
 
Hali
Nekem lefordul es SIM-ben be is irja az EEPROM-ba amit kell. De kapcsold ki a WDT-t mert kozben le RESTELT.
A SLEEP helyett tedd be igy a WR bit figyeleset:
  1. BSF             EECON1, WR              ; Set WR bit to begin write
  2. Wait btfsc  EECON1,WR           ;Test flag WR
  3.      goto       Wait

Ez mukodik
Udv Vili
(#) icserny válasza potyo hozzászólására (») Márc 18, 2010 /
 
C18-nál ez csak akkor működik helyesen, ha be van kapcsolva az "Integer promotion" opció! (-Oi)

Enélkül (ADRESH<<8) eredménye nulla lesz...>>
(#) Blint válasza potyo hozzászólására (») Márc 18, 2010 /
 
Köszönöm a segítséget potyo, így már megy, csak annyi változtatást eszközöltem, hogy a végén 7bittel toltam "vissza" az ADresult értékét, így nem kellett átírnom a fv. további részeit.
(#) spepe válasza Blint hozzászólására (») Márc 18, 2010 /
 
Szerintem próbáljátok ki az SDCC-t!

Teljesen ingyenes és nyílt forráskódú! Már egy ideje ezt használom és eléggé jól működik szerintem.

Alapból benne vannak a bizonyos modulokhoz használható függvények ezért sokkal könnyebb használni. Az igaz, hogy így nem mindent magadnak írsz meg de szerintem ez nem biztos, hogy hátrány.

Annyi a gond van vele talán, hogy nincs minden dokumentálva azért a forráskódokba is bele kell néha olvasni.

Az AD konverzió Pl.: így néz ki

  1. int ertek;
  2.  
  3. adc_open(0,7,0x0E,0); //Nem biztos, hogy pont így van mert csak fejből írtam de valami ilyesmi. Lényeg, hogy a beállításokat lehet itt röviden megadni.
  4. adc_conv();
  5.  
  6. while ( adc_busy() ) {
  7.  
  8. delay(1); //Ez saját függvény!
  9.  
  10. }
  11.  
  12. ertek = adc_read();


Bővebben: Link
Következő: »»   703 / 1320
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