Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   708 / 1210
(#) rolandgw válasza Hp41C hozzászólására (») Okt 12, 2015 /
 
Ezért írtam,hogy jó C fordító és direkt nem akartam ellenpéldát felhozni külföldi fórumról,ahol már akkor is megmosolyognak ,ha csak egy karakteres LCD vezérlésnél is asm-el próbálkozol...de ez egy más történet,nem szeretnék "haragosokat" szerezni itt ez ügyben
(#) Bell válasza sonajkniz hozzászólására (») Okt 12, 2015 1 /
 
Egy program attól jó, ha csak egyszer kell megírni, teljesíti az elvárásokat és hardverfüggetlen.
Mennyi idő kell asm-ben, hogy egy PIC16-ra írt egysoros LCD helyett PIC32MX-re írt, más típusú négysoros LCD-t használj?
(#) sonajkniz válasza Bell hozzászólására (») Okt 12, 2015 / 1
 
Nem tudom, mert soha nem foglalkoztam PIC16-al, és nem is fogok, a PIC 32-től meg még messze járok. Azért a hardverfüggetlenséggel bánjunk óvatosan. Amúgy az említett példádban, szereplő tételt nem érzem akkora pukk-nak, bár még csak egysoros és kétsoros közti váltást csináltam ugyanazon PIC-en belűl, de azt úgy, hogy egy PIC hajtotta mindkét LCD-t, ugyanazon az adatvonalon. Még a R/W láb is azonos volt, csak az engedélyező nem. Ráadásul ugyanaz a rutin írta, csak néhány paramétert átkapcsolt.
(#) nedudgi válasza Bell hozzászólására (») Okt 12, 2015 /
 
A hardverfüggetlenség nem lehet kritériuma egy jó programnak. A jó program úgy van megírva, hogy egy másik programozó is tudja módosítani. Assembly nyelven írt program is lehet olyan, hogy egyszeri megírás után többször felhasználható.
Ha valami "teljesíti az elvárásokat", attól még lehet rosszul megírt kódsorozat. Ha valamit másik hardverre kell átvinni, az azt jelzi, hogy tervezéskor rosszul mérték fel az erőforrásokat és igényeket.
(#) Hp41C válasza Bell hozzászólására (») Okt 12, 2015 /
 
Idézet:
„Egy program attól jó, ha csak egyszer kell megírni, teljesíti az elvárásokat és hardverfüggetlen.”

Nagyon szép és jó megközelítés egy nagy kapacitással, rengeteg féle kiépítéssel forgalomban levő környezetben. Ld. PC, stb.
Egy kontroller sokkal közelebb van az áramköréhez. Csak igen ritkán készül rájuk olyan nagy elvonatkoztatási szintű program (FFT), aminél lényeg lenne a hordozhatóság. Az
A/D átalakító kezelése jelentősen eltér még a PIC típusok között is. Használhatom a "gyári könyvtári" függvényt az eredmény kiolvasására, de akkor oda lesz a sávszélesség.
Egyszer kell megírni...
Ha elkészítem azt az emlegetett LCD kezelés eljárás gyűjteményt olyan szinten, ahol a bitek a kontroller tetszőleges portjának tetszőleges bitje lehet. Ekkor a 8 bites értéket a port bitekre rendkívül időigényes lesz. Ha a 8 adatbit csak egy 8 bites port megfelelő portja lehet, akkor ugyan gyors a rutin, de nem elég általános.
Ki olvasott már az RTOS-os autós botrányról? A stack belemászott a változók közé...
A hozzászólás módosítva: Okt 12, 2015
(#) don_peter válasza Pali79 hozzászólására (») Okt 12, 2015 /
 
Idézet:
„2-3ezer sor már nem hobbi kategória”

Én hobbi szinten írtam a forrasztóvezérlőm programját és több mint 3e soros, C18-ban.
Pl. a 18F452-őt azért kellett már cserélnem mert nem fért el a memóriában az új v3-as programja ami már GLCD-t, alsó, felső fűtésvezérlésű + saját setup rendszere van.
Ezt már másik egy dupla akkora PIC-et kellett alkalmaznom mint a 18F452.
Kb 4-5e sornál járok és még nincs kész

Ezt csak azért, hogy simán lehet hobbiból is több ezer soros kódokat írni..
(#) siemenstaurus hozzászólása Okt 12, 2015 /
 
Sziasztok! Kezdő kérdés, régen foglalkoztam a témával, de tuti csak vmi kis dolgot somtam el, segítséget szeretnék kérni. A lényeg:
-nyomógomb RC0 lenyom --> RB7 led világít majd elalszik
-RC0 és RC1 lenyom ---> RB6 led vilagit elalszik
-RC0 és RC2 lenyom ---> RB5 led vilagit elalszik.
Áramkörileg a nyomógomb 10k-val felhúzva, rámértem, meg is vannak a logikai HL szintek a lábakon, szerintem programilag leszek béna. Nem érzékeli a gombokat, csak végigfutnak a ledek.

  1. #include <p18f14k50.h>
  2. #include "delays.h"           //beepitett fuggv hasznalata
  3. #pragma config LVP = OFF
  4. #pragma config WDTEN = OFF
  5. #pragma config MCLRE = OFF
  6. main ()
  7. {TRISB = 0;               // PORTB összes kimenet
  8.         LATB = 0b00000000;
  9.         TRISCbits.TRISC0 = 1;
  10.         TRISCbits.TRISC1 = 1;
  11.         TRISCbits.TRISC2 = 1;
  12.  
  13. while(1)
  14.         {
  15. if(PORTCbits.RC0 == 0)
  16.                 {
  17.                         LATB = 0b10000000;
  18.                         Delay1KTCYx(1000000);
  19.                         LATB = 0b00000000;
  20.                 }
  21.                
  22.  
  23.                 if (PORTCbits.RC1 == 0 && PORTCbits.RC0 == 0)
  24.                 {
  25.                         LATB = 0b01000000;
  26.                         Delay1KTCYx(1000000);
  27.                         LATB = 0b00000000;
  28.                 }
  29.                 if (PORTCbits.RC2 == 0 && PORTCbits.RC0 == 0)
  30.                 {
  31.                         LATB = 0b00100000;
  32.                         Delay1KTCYx(1000000);
  33.                         LATB = 0b00000000;
  34.                 }
  35.                
  36.                 else
  37.                 {
  38.                         LATB = 0b00000000;
  39.                 }
  40.         }                      
  41.  
  42. }
A hozzászólás módosítva: Okt 12, 2015
(#) Pali79 válasza don_peter hozzászólására (») Okt 12, 2015 /
 
Látod? Ha assembly -ben írtad volna elég lett volna a kisebb PIC is. Viccet félretéve a glcd- re kíváncsi lennék ha nem titkos. Milyen kijelzőt használsz?
(#) cross51 válasza siemenstaurus hozzászólására (») Okt 12, 2015 /
 
Analóg digitális port beállítás, az RC0..RC2 mind analóg amíg nem kell analóg port addig az inicializálás részhez ezt írd be:
  1. TRISB = 0;               // PORTB összes kimenet
  2.         LATB = 0b00000000;
  3.         TRISCbits.TRISC0 = 1;
  4.         TRISCbits.TRISC1 = 1;
  5.         TRISCbits.TRISC2 = 1;
  6.         ANSEL = 0;
  7.         ANSELH = 0;
(#) Hp41C válasza Pali79 hozzászólására (») Okt 12, 2015 /
 
Egy C nyelvű rutin, ahogy elsőre megirnánk:
  1. void CalAndSetCCP1(unsigned char ccp1_upper, unsigned char ccp1_lower)
  2. {
  3.  
  4.     signed long short cal_value = (ccp1_upper * 0x100) + ccp1_lower;
  5.     cal_value >>= 6;
  6.     cal_value += VoltageCalibration.vdd_offset;
  7.     cal_value *= VoltageCalibration.vdd_calfactor;
  8.     cal_value >>= 1;
  9.     CCPR1L = (unsigned char) (cal_value >> 8);
  10.     cal_value &= 0xFF;
  11.     CCP1CON = (CCP1CON & 0xCF) | (cal_value >> 2);
  12. }

Ez így 375 utasításra fordul.
Egy kicsit átdolgozva:
  1. {
  2.         TWORD_VAL cal_value;
  3.         cal_value.bytes.UB = 0;
  4.         cal_value.bytes.HB = ccp1_upper;
  5.         cal_value.bytes.LB = ccp1_lower;
  6.         cal_value.Val >>= 6;
  7.     cal_value.Val += VoltageCalibration.vdd_offset;
  8.     cal_value.Val *= VoltageCalibration.vdd_calfactor;
  9.         cal_value.Val >>= 1;
  10.         CCPR1L = cal_value.bytes.HB;
  11.         cal_value.bytes.LB >>= 2;
  12.         CCP1CON ^= (cal_value.bytes.LB ^ CCP1CON) & 0x30;
  13. }

Ez csak 176 utasítás...
(#) Pali79 válasza Hp41C hozzászólására (») Okt 12, 2015 /
 
Hát nekem egyik sem mond semmit. Lehet az Mplab Program memory nézetében többet látnék.
(#) don_peter válasza Pali79 hozzászólására (») Okt 12, 2015 /
 
Igen, sejtem, hogy ASM-ben gazdaságosabb lenne, de sajnos az nekem nem megy.
Lehet majd egyszer neki fogok, de úgy vélem jelen pillanatban nem írok olyan programokat amelyeknél ennyire és élesen számítana az optimalizáció.
De a tény az tény, ASM == nehéz, de cserébe optimalizáltabb, C == könnyebb, de cserébe nagyobb az erőforrás igénye.

GLCD-ből már 2-ővel foglalkoztam eddig, a könnyebb és jobb a t6963c, és a nehezebb és rosszabb az st7920.
A t6963c-ről van egy kis videó is fent: DPTP System - V3 Forrasztást vezérlő prototípus
Itt sokat beszéltünk róla: Bővebben: Link

Az ST7920 még programozás alatt, éppen az x y tengelyenkénti pixelezést írom hozzá, de elég gány ez a kijelző..
Később erről is lesz majd kis videó, egy elektromos kerékpár vezérlőjének lesz az LCD kijelzője, ha kész lesz.
A hozzászólás módosítva: Okt 12, 2015
(#) siemenstaurus válasza cross51 hozzászólására (») Okt 12, 2015 /
 
Első lépés: nagyon szépen köszönöm! Működik.
Második: kicsi én állj a sarokba 10 percre és gondolkodj el...
Köszönöm!
(#) kitartás hozzászólása Okt 12, 2015 /
 
Sziasztok! 12C508A típusú picet kéne égetnem a kazánban biztosan menne . Ami rendelkezésre áll az egy pickit2 (és a hex file), de úgy látom a támogatott eszközök listáján ez a típus nem szerepel. Van valakinek tapasztalata a fenti piccel kapcsolatban?
(#) Bell válasza Hp41C hozzászólására (») Okt 12, 2015 /
 
A hardverfüggetlenség itt gyakorlatilag azt jelenti, hogy nem kell újra, nulláról kitalálni az egészet.
Persze a C nyelv és az OO okozhat meglepetéseket. Egy kritikus alkalmazásnál megnyugtató az, ha az ember bit szinten ismeri minden regiszter tartalmát.
A 18-as sorozatnál talán még megvan ez az illúzió, de fentebb már nincs.
(#) benjami válasza cross51 hozzászólására (») Okt 12, 2015 /
 
Régebben már javasoltam, hogy vegyék be ezt is témakörhöz tartozó fenti sárga szövegbe, mert rendszeresen visszatérő hiba, de eddig sajnos nem történt meg.
(#) edison14 hozzászólása Okt 12, 2015 /
 
Sziasztok!

Kicsit követtem a C és ASM nyelvek közti beszélgetést és rászántam magam, hogy PIC24-re írjak egy tényleg nagyon egyszerű programocskát ami egy LED-et hajt meg PWM-el. A programot először assemblyben dobtam össze és a lehető legkisebbre próbáltam összegyűrni minden felesleges dolog nélkül. Az eredmény egy 177 bájtos program lett. Ennek pont egy az egyben C-s másolatát készítettem el melyet XC16-os PRO licenszes fordítóval fordítottam. A legkisebb eredmény amit ki tudtam belőle hozni az 423 bájt lett. Tehát mondhatjuk hogy bő kétszerese az eredeti asm programnak. Nekem mondjuk sokkal egyszerűbb, átláthatóbb és logikusabb volt megírni assemblyben mint C-ben de lehet hogy csak én vagyok nagyon béna C-ben (mondjuk ez volt a második programom C-ben). Csatoltam a disassemblyt és az asm forrásfájlt, aki szeretné megnézheti a különbséget.
(#) benjami válasza edison14 hozzászólására (») Okt 12, 2015 /
 
A C program esetében nézz meg első körben egy teljesen üres programot, ahol csak a main függvény van, de az is üres. Nézd meg azt mekkorára fordítja, és utána nézd meg mennyivel lesz nagyobb ha berakod a PWM forrásodat is. A C fordító ugyanis akkor is kitölti a teljes megszakítás ugrótáblázatot is, ha nem is használod + még a startup kód is bele kerül.
(#) sonajkniz válasza edison14 hozzászólására (») Okt 13, 2015 /
 
Szia!
Még nem foglalkoztam PIC24-el, ezért érdeklődnék.
Ennek a szériának ennyire eltér az asm.-je a régebbiektől?
Mert én semmit nem tudtam ebből kihámozni.
Mit csinál voltaképpen?
(#) Bell válasza edison14 hozzászólására (») Okt 13, 2015 /
 
Az összehasonlítás szemléletesebb lenne, rávilágítana néhány fontos részletre, ha közölnéd a C forrást és az asm forrást PIC16-ra, 18-ra, 24-re, 32-re.
Köztudott, hogy a forgalomban lévő C fordítók nem csontig optimalizáltak, de nem is az a cél.
A fordító egy szoftver eszköz, egy szerszám, eltérő lehetőségekkel, amit célszerű megismerni annak, aki ezen a területen ténykedik.
Miután megismerte, akkor lesz választási lehetősége eldönteni, hogy mikor melyiket használja.
De ha fogalma sincs a C nyelvről és csak innen-onnan hallott féligazságokat szajkózva áll ki, vagy tör lándzsát valamelyik fordító mellett, fölött, az siralmas.
Mert a lustaság és a tudatlanság áll mögötte.
(#) edison14 válasza Bell hozzászólására (») Okt 13, 2015 /
 
Szia!
Nem beszélek a c nyelv ellen ugyanis nem ismerem annyira a lehetőségeit. De mindenképp szeretném megismerni. Most csak egy egyszerű programot írtam meg c és assembly nyelven majd a c nyelvből fordított assembky kódot hasonlítottam össze az én általam megírt kóddal. Persze assemblyben sokkal lassabban ment a megírása mint c-ben. És persze ismerni kell az assembly által adott és a c által adott kehetőségeket is.
(#) edison14 válasza sonajkniz hozzászólására (») Okt 13, 2015 /
 
Szia! Nem tér el nagyban. Voltaképp ez egy ledet vezérel hardveres PWM-el. Először növeli a Led fényerejét azután csökkenti. Ha megnézel egy-két példaprogramot akkor el tudsz indulni.
(#) sonajkniz válasza Bell hozzászólására (») Okt 13, 2015 / 1
 
Láss egy kicsit a dolgok mögé.
Mit is csinál gyakorlatilag egy magasabb szintű programnyelv, illetve annak fordítója?
Kész függvényekből megpróbálja a leginkább a programkörnyezetbe illőt beilleszteni.
Minnél profibb a fordító, annál több előre megírt függvényből válogathat.
Leginkább az Inventor 3D-s tervezőszoftveréhez lehetne hasonlítani. Alapból a legolcsóbbal is bármit megcsinálhatsz, de kicsi pl. a raktárkészlete, így nem tud mindent készen felkínálni.
(pl: fogaskerekek) Tehát vagy megrajzolod magadnak (asm.), vagy azt rakod bele, ami van (C könyvtár).
(#) sonajkniz válasza edison14 hozzászólására (») Okt 13, 2015 /
 
Idézet:
„Először növeli a Led fényerejét azután csökkenti”

Szia!
Ehhez képest 177 byte-ot kissé soknak érzek!
Egy gázkarról vezérelt PWM motormeghajtás programja gyorsításvezérléssel és relés fék vezérléssel PIC12-re írva asm.-ben 107 byte.
(#) Pali79 válasza sonajkniz hozzászólására (») Okt 13, 2015 /
 
Szia!
Találomra megnéztem egy adatlapot. Elég korrekt leírás van az utasításokról a végén. Nem nagyon tér el, az általános parancsok ugyan azok csak itt az értékeket 16 biten kell megadni és van vagy 70 egynéhány utasítás.
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 13, 2015 /
 
Upsz!
Na jó! Úgy erzem, nekem a 24-es család még odébb van.
Még a 18-as szériának is vannak számomra sötét foltjai.
(#) Topika hozzászólása Okt 13, 2015 /
 
Szia sonajkniz!
Miért nem használjátok a kettő programozási nyelvet együtt? A c kódba be lehet illeszteni az asm kódot, így azt használod amelyik előnyösebb. Igaz a beillesztésnél bizonyos szabályokat be kell tartani. _asm és az _endasm parancsok közé kell az asm kódrészletet beírni.
(#) Pali79 hozzászólása Okt 13, 2015 /
 
Srácok!
Nem gondoljátok, hogy sokkal több szót pazaroltunk el erre az egészre, mint amennyit megér?
Aki a C-ben hisz úgysem fogja az asm-et használni és fordítva is így van! Az értelmes dolgok helyett teleszemeteltük a fórumot ezzel az értelmetlen és soha véget nem érő vitával.
(#) Hp41C válasza Pali79 hozzászólására (») Okt 13, 2015 /
 
A C18, XC8 azon fele, ami a 18F -re fordít, a 16 bites és a 32 bites C fordító elég korrekt kódot fordít. Az a legfőbb probléma velük, hogy a korrekt kód a PRO optimalizálásnál elfogadható (családonként 290000 Ft+Áfa), de a standard és a free mód inkább belepakol felesleges utasításokat mintsem optimalizál.
Az XC8 12F és 16F magokra fordító része még PRO optimalizálásnál sem ad elfogadható kódot.
Ez nem attól van, hogy szeretem a C -t vagy utálom az assembly -t...
(#) sonajkniz válasza Pali79 hozzászólására (») Okt 13, 2015 /
 
Szerintem ezeket a vitákat a moderátorok élvezik.
Van külön C-s és külön asm.-es topic is, mégis mindenki ide írkál.
Ha itt tényleg csak a kezdők kérdései jelennének meg, azaz mindenki oda írna, ahova kell, vagy a moderátorok áthelyeznék, ezeknek a vitáknak a kialakulására esély sem lenne.
Következő: »»   708 / 1210
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