Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   984 / 1318
(#) n_yálastrubadúr válasza watt hozzászólására (») Jún 18, 2011 /
 
watt. Tisztelem a tudásod, de aki nincs olyan magas szinten mint te, az néha hülye kérdéseket is feltesz. Én sem szeretném az oldal dilettánsá fajulását, de nagyon örülnék ha észrevennéd hogy te ebben nagyban segítesz. Sosem akartam személyeskedni, és elismerem hogy a füledben a gitár legmagasabb húrját eszetlenül pengetik, de aki akar az válaszol. Aki meg lenéz az a király, és azthiszem segíteni vagyunk itt egymásnak. Köszönöm.
(#) watt válasza n_yálastrubadúr hozzászólására (») Jún 18, 2011 /
 
Ezek a kérdések nem ide valók! Keress olyan topicot, ami a színvonaladnak megfelelő! pl. Ez: Bővebben: Link
(#) Andre90 hozzászólása Jún 18, 2011 /
 
Üdv Mindenkinek!

Problémám akadt az UART Receive Interrupttal egy PIC24FJ128GA010-en. A programom maga úgy néz ki, hogy a fő ciklusban fut egy UART küldés, és interrupttal van kezelve az UART vétel. Csak sajnos ez utóbbi nem működik, egyszerűen nem tudom elérni az interruptot a PICen, pedig a megfelelő lábra megérkezik a soros porton a jel, de mégse történik semmi. Maga az UART küldés megy frankón, azt külön kipróbáltam. Ha esetleg valaki észrevenné a hibát a kódomban, vagy tudna adni valami javaslatot, hogy mi lehet a hiba, azt nagyon megköszönném.

Üdv: András

uart.c
    
(#) watt válasza Andre90 hozzászólására (») Jún 18, 2011 /
 
Egy a megszakítás lekezeléséhez elhelyezett LED vezérléssel detektálni kéne, hogy a megszakítás megtörténik-e. Vagy most honnan tudod, hogy nem? Lehet, hogy a LATA6 pont egy LED?
A 24F-eknél törölni kell a megszakításjelző bitet? Nem a vételi regiszter kiolvasása törli, mint a 18F-eknél?
(#) Andre90 válasza watt hozzászólására (») Jún 18, 2011 /
 
Igen, a LATA6ra egy LED van kötve, azt pont a diagnosztika miatt raktam be. Én úgy tudom a PIC24-eknél le kell törölni a flaget.
(#) gasparek hozzászólása Jún 19, 2011 /
 
Az lenne a kérdésem , hogy a PIC12F629 helyetesíthető-e PIC12F683 ?
A válaszokat előre köszönöm.
(#) nedudgi válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Az a kérdés, hogy melyiket, melyikkel, és milyen helyen akarod alkalmazni.
Milyen perifériát használsz a programodban, mennyi memória kell?
(#) Hp41C válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Szia!

A következőket kell figyelembe venni:
- A/D konvertert és a komparátor le kell tiltani,
- A memória kiosztása eltér, a 12F629 ugyan azt a memórát éri el a 0x20-0x5F és a 0xA0-0xDF címtarományban, míg a 12F683 -ben a 0x20-0x7F és 0xA0-0xBF címen levő memória blokkjai függetlenek. A 12F683 -ban a 0x70-0x7F és a 0xF0-0xFF címtartományon van közös terület.

Ha az eredeti program nem használja ki, hogy az 1.bankban is ugyan azokat az adatokat érheti el, mint 0. -ban, akkor az A/D és a komparátor kikapcsolását kell csak beletenni.
(#) gasparek válasza Hp41C hozzászólására (») Jún 19, 2011 /
 
Nem anyira értek a PIC programozáshoz . Ezt a kapcsolást szertném megépíteni Bővebben: Link ebbe kellene valamit módosítani?
(#) nedudgi válasza gasparek hozzászólására (») Jún 19, 2011 /
 
A 629 olcsóbb, a 683 drágább, de többet tud. Miért akarod helyettesíteni?

Mindenképpen át kell írni 683-ra, és úgy kell fordítani. A CMCON helyett CMCON0 van a PIC12F683-ban.

OFF Szerintem inkább a "PIC kezdőknek" topikban kellett volna kérdezned.
ON
(#) gasparek válasza nedudgi hozzászólására (») Jún 19, 2011 /
 
683 hoz olcsóbban hozátudok jutni.
(#) watt válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Helyettesíthető, miután mindent tud amit a 12F és annál többet is. Az más kérdés, hogy ehhez módosítani kell a programot. Ha nem tudod módosítani, akkor nem tudod vele helyettesíteni.

Még annyit, hogy egy 12F629 165...180ft+áfa. Egy ilyen progam átírása minimum 1 óra. Tudod mennyi egy óra munkadíja egy proramozónak?
(#) gasparek hozzászólása Jún 19, 2011 /
 
Jó mindegy akor inkább nemfoglalkozom vele , veszek inkább 12F629 est ugy egyszerűbb szesz.
(#) Hp41C válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Szia!

Ha jól emlékszem, már feltöltöttem egy olyan forrást, amiben a program már át van írva 16F629 mellett 12F675, 12F683, 16F627(A), 16F628(A) kontrollerekre is...

dobokocka.asm
    
(#) Hp41C hozzászólása Jún 19, 2011 /
 
Sziasztok!

Lehet, hogy egy kicsit off ebben a támában... Az MpLab programmal szeretnék 24FC512, 24FC1025 EEProm tartalmat "fordítani": a mintában címeket számoltatni, makrózni, stb. Ami ment az MpLab 5.7 -tel, mért nem megy a 8.63 -mal?
(#) gasparek válasza Hp41C hozzászólására (») Jún 19, 2011 /
 
Ezt csak konvertárom .hex be felégetem a pic be és mennifog??
(#) edison14 hozzászólása Jún 19, 2011 /
 
Helló. Írtam egy hőmérő programot melynek érzékelője egy NTC ellenállásból és egy sima ellenállásból alkotott feszültségosztó. Viszonylag pontos mivel csak az egész fokokat jelzi ki. A program működik de szeretném ha átnéznétek és az esetleges hibákat vagy észrevételeket leírnátok a programmal kapcsolatban. A processzor PIC16F877A 4MHz-es külső oszcillátorral. A kódot HITECH C-ben írtam. A segítségeteket és észrevételeket előre is köszönöm.

multi.c
    
(#) Hp41C válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Szia!

Projectet kell készíteni neki, beállítani a kontroller típusát, abszolut kódot kell fordítani Release módban. A keletkező hex beprogramozható...
(#) gasparek válasza Hp41C hozzászólására (») Jún 19, 2011 /
 
Milyen szoftverrel?
(#) potyo válasza edison14 hozzászólására (») Jún 19, 2011 /
 
Pár dolog van, amit én másképp csinálnék:

1. Ha olyan regisztert állítasz, aminek bitenként van értelme, akkor talán érdemesebb a 0bxxxxxxxx formát használni a jobb áttekinthetőség miatt. Pl. ADCON0=0b01000001;

2. A GO=1 részt másképp érdemes csinálni, valami ilyesmi:
  1. while(1)                                                        //végtelen ciklus
  2.         {      
  3.                 if (GO_DONE==0)
  4.                 {
  5.                         adc_mert=ADRESH/5;
  6.                         egyes=kiir[adc_mert%10];
  7.                         tizes=kiir[adc_mert/10];
  8.                         GO=1;
  9.                 }
  10.         }

A lényeg, hogy a belső blokkra csak akkor fut rá, amikor a konverzió készen van. Amíg nincs készen, addig felesleges az egyes és tizes változókat újraszámoltatni, hiszen úgyis ugyanaz maradna bennük, tehát ezzel gyakorlatilag spórolunk a számítási teljesítményen (persze ha a feladat csak a hőmérés, akkor mindegy). A másik, fontosabb, hogy nálad folyamatosan ráfutott a GO=1 sorra, emiatt megtörténhetett, hogy amíg az a=adc_mert%10; sor és a GO=1; sor között futott a kontroller, az idő alatt a konverzió elkészült, te viszont újra elindítottad, még mielőtt kiolvastad volna az eredményét. Persze ez nálad most nem történhetett meg, hiszen a __delay_us(50); alatt mindenképpen elkészült a konverzió, csakhogy ez a várakozás felesleges. A várakozás akkor kell, ha konverzió előtt analóg csatornát váltasz, konverzió indítása után ez már nem kell. Az a és b változók feleslegesek, bár ezeken épp nem múlik semmi sem.

3. van egy olyan dolog, hogy megtörténhet, hogy akkor esik be a timer megszakítás, amikor már az egyes változó új értéket kapott a tizes változó pedig még nem. Ekkor a kijelzőn egy ciklusig rossz érték is megjelenhet. Mivel ember olvassa le a kijelzőt, jelen esetben ez nem probléma, viszont más helyen akár problémát is okozhat. Több lehetőség van ennek kivédésére:
- csak az adc_mert értéket mented el a főprogramban, és az egyes, tizes változókat a timer megszakítási rutinban számolod ki. Ezen módszer hátránya, hogy sokáig fog futni a megszakítási rutin, valamint szintén problémás lehet, ha az adc_mert változó több bájtos.
- az AD konverzió is megszakítást okoz, és ott csinálsz mindent, ekkor az adc_mert több bájtos volta már nem okoz problémát, viszont továbbra is hosszú marad a megszakítási rutin
- a kijelző frissítését sem megszakításból oldod meg, hanem a főprogramban figyeled a T0IF bitet, és ha bebillent, akkor lefuttatod azt, ami most a megszakítási rutinban szerepel
- kikapcsolod a megszakítást az egyes változó számítása előtt, és visszakapcsolod a tizes számítása után
- biztos van még valami, ami nem jut eszembe, majd más ideírja

4. az XTAL_FREQ résznél én nem tenném a #define-t #ifndef-#endif közé, mert ha itt meg akarod adni az órajelet, akkor máshol nem szabad, hogy meg legyen adva. Ha viszont mégis megvan adva, az szerintem hiba, és akkor emiatt szólna a fordító, hogy kétszer van definiálva az _XTAL_FREQ.

5. Olyasmit nem ellenőriztem, hogy van-e nem használt láb bemenetté állítva, de erre figyelj, hogy a nem használt lábak sose legyenek lebegésben hagyva. Vagy fel/le kell húzni kívülről, vagy pedig kimenetté kell állítani a használaton kívüli lábakat.

6. a PIC az kontroller, nem processzor.
(#) edison14 válasza potyo hozzászólására (») Jún 19, 2011 /
 
Köszönöm az útbaigazítást. A lábakra figyeltem és az órajel sincs máshol megadva. Még egyszer köszönöm.
(#) Hp41C válasza gasparek hozzászólására (») Jún 19, 2011 /
 
Természetesen az MpLab V8.70 feljesztőkörnyezettel.
(#) edison14 válasza edison14 hozzászólására (») Jún 19, 2011 /
 
Helló közben átjavítottam a programot. Sokkal kisebb lett a program mérete és működik is.

multi.c
    
(#) Hp41C válasza Hp41C hozzászólására (») Jún 19, 2011 /
 
Arra már rájöttem, hogy az IDE felületről hiába választom ki a 24FC512 -t, az MPASM csak paramcssori kapcsolóval fordítana a 8 illetve 16 bites EEEProm -okra. A /PEEPROM8 -at nem érti meg, a /PEEPROM16 fordít, de a 0x3fff -nél nagyobb kódokra azt írja "Truncated to core size", ráadásul a byte-ok sorrendjét megfordítja..
A "README FOR MPASM ASSEMBLER.HTM" 7. pontjában leírtak szerint "Two "processor" selections are provided to generate byte data - EEPROM8 and EEPROM16."
Az MpLab V5 probléma nélkül lefordítja..
(#) gasparek válasza Hp41C hozzászólására (») Jún 19, 2011 /
 
Köszönöm a sok segétséget.
(#) zoz11 hozzászólása Jún 19, 2011 /
 
Sziasztok
PIC programozásból nagyon-nagyon kezdő vagyok még.
PIC Simultor IDE nevű programba próbálkozom, egy 16F628A szóra bírni.

A felállás a következő, leszimulálva nagyon szépen csinálja azt amit kell, viszont ha a kapott hex fájlt beírom a PIC be akkor az meg se mukkan.
Lehet, hogy valamit kihagytam a programból vagy rosszul csináltam, csatolom a .bas fájlt, meg a hex-et esetleg valaki ránézne?
Előre is köszönök mindent.
Üdv: Zoltán
(#) kissi válasza zoz11 hozzászólására (») Jún 19, 2011 /
 
A konfigurációs bitekkel mi a helyzet ( ha a szimuláció megy, akkor ilyen típusú problémád lehet vagy táp ! )?!

Steve
(#) zoz11 válasza kissi hozzászólására (») Jún 19, 2011 /
 
A szimuláció fut szépen!
Itt van róla kép, én jónak találom, bár, mondom még ilyennel nem volt dolgom.
A tápfesz tuti megvan

Kivágás.jpg
    
(#) potyo válasza zoz11 hozzászólására (») Jún 19, 2011 /
 
Áramkör hogy néz ki?
(#) kissi válasza zoz11 hozzászólására (») Jún 19, 2011 /
 
A beállítások az áramkörrel együtt érnek valamit ( remélem, hogy jó, de ha nem vagy biztos benne, akkor mellékeld a rajzot potyo kolléga felvetésének megfelelően! ) !

Steve
Következő: »»   984 / 1318
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