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   223 / 1211
(#) Hp41C válasza adamhollos hozzászólására (») Márc 16, 2012 / 1
 
(E)usart esetén az RB7 - RB5 és RB5 - RB7 a helyes összekötés.
(#) adamhollos válasza icserny hozzászólására (») Márc 16, 2012 /
 
Nem tudom! Az adatlap ezt írja:

In order to configure pins RB6/SCK/SCL and
RB7/TX/CK as the Universal Synchronous
Asynchronous Receiver Transmitter:
? SPEN (RCSTA<7>) bit must be set (= 1),
? TRISB<6> bit must be set (= 1), and
? TRISB<7> bit must be set (= 1).
(#) adamhollos válasza Hp41C hozzászólására (») Márc 16, 2012 /
 
Köszönöm!
(#) Pepebá válasza icserny hozzászólására (») Márc 16, 2012 /
 
Következőket ollóztam a projektből és egészítettem ki egy függvénnyel, amiben megnézem az adott bit állapotát és számolom az impulzusokat.
#if defined(USE_INTERRUPT)
#pragma interrupt hi_isr
void hi_isr() {
if (PIR1bits.TMR2IF){
jbit=1;
}
PIR1bits.TMR2IF = 0;
if(delay) delay--;
USBDeviceTasks();
}
#pragma interruptlow lo_isr
void lo_isr() {
dummy=PORTB;
INTCONbits.RBIF=0;
cFlag = 1;
impulzusok();
}
#endif //USE_INTERRUPT

unsigned int impulzusok (void){
if (cFlag) {
delay_ms(20);
cFlag = 0;
b2all=(b2all++);
if (be3==0){
b3all=(b3all+2);
}
}
}
a számlálás jól működik.
Üdv.
(#) Stefan válasza Pepebá hozzászólására (») Márc 16, 2012 / 1
 
Megszakításvektroban beállítod cFlag változót, utána meghívod az mpulzusok függvényt, ami megnézi hogy 1 -e. Ennek így nemsok értelme van szerintem. A delay_ms megszakításban használata bizonyos körökben halálos bűn. Ez az egész függvény? Nem szól a fordító hogy uint típusú a függvény de nincs visszatérése?
(#) dtocy hozzászólása Márc 16, 2012 /
 
Heló!

2x16-os LCD kijelzőre szeretnék egy float típusú számot kiírni, de a FloatToStr funkcióval 6 tizedesjegy jelenik meg, nekem csak 2 kellene. Sprintf-et nem tudok használni. Van valami más lehetőség a szám formázására?

Előre is kösz!
(#) icserny válasza adamhollos hozzászólására (») Márc 16, 2012 /
 
Nem tudom, hol olvastad. Nálam a 12.1.1.1 szekcióban ilyeneket írnak:
Idézet:
„The EUSART transmitter is enabled for asynchronous
operations by configuring the following three control
bits:
* TXEN = 1
* SYNC = 0
* SPEN = 1
All other EUSART control bits are assumed to be in
their default state.

Note 1: When the SPEN bit is set the RX/DT I/O pin
is automatically configured as an input,
regardless of the state of the corresponding
TRIS bit and whether or not the EUSART
receiver is enabled.”
(#) adamhollos válasza icserny hozzászólására (») Márc 16, 2012 /
 
Megírtam ez a két kis programocskát azonban nem működik. Az első pic-en egy kapcsoló állásától fügően küldeném az üzenetet, a második pedig egy kétfényű ledet változtatna, az üzenetnek megfelelően.

Szerintetek mi lehet a hiba?

*A progit a tab hiba miatt kivettem, ennyit tehettem .
(#) benjami válasza adamhollos hozzászólására (») Márc 16, 2012 /
 
Első ránézésre:
1. nincs analógról digitálisra állítva RX/TX láb
2. nincs az átviteli sebesség beállítva
3. TX nincs kimenetnek állítva
4. nincs figyelve hogy érkezett-e adat (csak akkor kerül érvényes adat RCREG-be)
(#) adamhollos válasza benjami hozzászólására (») Márc 16, 2012 /
 
1. alapértelmezetten digitális
2. az alapértelmezett beállítás az nem az ami a belső oszcillátorhoz jó?
3. jogos
(#) potyo válasza adamhollos hozzászólására (») Márc 16, 2012 /
 
2. állíts be valami alacsonyabb sebességet, pl. 9600bps-t. Nemtudom, mi az alapértelmezett érték, de ezeket mindig be kell állítani.

5. nincs figyelve az, hogy a TXREG kiürült-e. Így egymásra küldöd az adatokat, ami miatt lesz egy hibajelzés és leáll a küldés (ha jól emlékszem).

A kódodból a behúzásokat csak az oldal szedte ki, vagy tényleg nem használsz behúzásokat? Utóbbi esetben használj.
(#) trudnai válasza icserny hozzászólására (») Márc 16, 2012 /
 
Idézet:
„Csak szólok, hogy te is a karakterenkénti megszakítást javasoltad. Tehát a helyes válasz: nincs.”


Miert, ez most melyik PIC amiben nincs az asynchron kuldesnek megszakitasa?
(#) adamhollos válasza potyo hozzászólására (») Márc 16, 2012 /
 
5. Hogyan lehet megoldani ezt a problémát.

Íme a javított de még mindig nem működő programok (használok behúzást csak kiszedi az oldal):

  1. #include <pic.h>
  2. __CONFIG(FOSC_INTRCIO,WDTE_OFF,PWRTE_ON,MCLRE_
  3. OFF,
  4. CP_OFF,CPD_OFF,BOREN_ON,IESO_ON,FCMEN_ON);
  5. void main (void)
  6. {
  7. TXEN = 1;
  8. SYNC = 0;
  9. SPEN = 1;
  10. TRISC=0;
  11. TRISB7=0;
  12. SPBRG=0x80;
  13. SPBRGH=0x25;
  14. for(;;)
  15. {
  16. if(RCREG==1)
  17. {
  18. RC5=1;
  19. RC4=0;
  20. }else
  21. {
  22. RC5=0;
  23. RC4=1;
  24. }
  25. }
  26. }
(#) MPi-c válasza adamhollos hozzászólására (») Márc 17, 2012 /
 
5. -> PIR1 regiszterben figyeled a TXIF bitet.

A vételhez a CREN bitet is be kell kapcsolni! Olvasd az adatlapot!
(#) benjami válasza adamhollos hozzászólására (») Márc 17, 2012 /
 
A tabulátort nem szereti az oldal, cseréld szóközökre.
  1. #include <pic.h>
  2. __CONFIG(FOSC_INTRCIO,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,
  3. BOREN_ON,IESO_ON,FCMEN_ON);
  4. void main (void)
  5. {
  6.   TXEN=1;
  7.   SYNC=0;
  8.   SPEN=1;
  9.   TRISB7=0;
  10.   SPBRG=0x80;
  11.   SPBRGH=0x25;
  12.   for(;;)
  13.   {
  14.     if(TXIF)
  15.     {
  16.       if(RA5==1)
  17.       {
  18.         TXREG=1;
  19.       }
  20.       else
  21.       {
  22.         TXREG=0;
  23.       }
  24.     }
  25.   }
  26. }
  27.    
  28. #include <pic.h>
  29. __CONFIG(FOSC_INTRCIO,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,
  30. BOREN_ON,IESO_ON,FCMEN_ON);
  31. void main (void)
  32. {
  33.   TXEN = 1;
  34.   SYNC = 0;
  35.   SPEN = 1;
  36.   CREN = 1;
  37.   TRISC=0;
  38.   TRISB7=0;
  39.   SPBRG=0x80;
  40.   SPBRGH=0x25;
  41.   for(;;)
  42.   {
  43.     if(RCIF)
  44.     {
  45.       if(RCREG==1)
  46.       {
  47.         RC5=1;
  48.         RC4=0;
  49.       }
  50.       else
  51.       {
  52.         RC5=0;
  53.         RC4=1;
  54.       }  
  55.     }
  56.   }
  57. }
(#) Pepebá válasza Stefan hozzászólására (») Márc 17, 2012 /
 
A cFlag változó figyelése az első próbálkozásból maradt, amikor a főciklusban figyeltettem a bemenet változását (persze az ciklus sok teendője miatt lassúnak bizonyult) azért is próbálkoztam függvénnyel.
Arra persze nem gondoltam hogy annak hívása tulajdonképpen a megszakítás része és nem szabad a pergésmentesítés miatti késleltetést itt alkalmazni. Arra viszont szükség van, a hardveres pergésmentesítésen kívül van esetleg más egyéb szoftveres megoldás?
Most nézegetem a PICOLLO projekt számlálók/időzítők fejezetét és itt látom a pergésmentesítés mintavételezéssel részt, talán megoldás lehet a problémámra. Jól gondolom?
A fordító egyébként nem szólt hogy a függvénynek nincs visszatérési értéke (eredetileg úgy csináltam) lefordult és működött is a számlálás, csak mint kiderült a rossz helyen alkalmazott késleltetés miatt az USB adatforgalomba némi zavar keletkezett.
(#) Mengyán hozzászólása Márc 17, 2012 /
 
Sziasztok!

Bocs, ha rossz topikba írok, 8000 közül nehéz kiválasztani az egyetlen tökéleteset. A kérdésem az volna, hogy ezen a párhuzamos portos égetőn el lehet-e hagyni a D3 és a D4 közül az egyiket. Más LPT-s égetőket megvizslatva, számomra feleslegesnek tűnik. Mivel ez lesz az első égetőm, inkább kérdezek hülyeséget, mint csinálok.
(#) icserny válasza Pepebá hozzászólására (») Márc 17, 2012 / 1
 
Idézet:
„a pergésmentesítés mintavételezéssel részt, talán megoldás lehet a problémámra.”
Igen.
(#) vilmosd válasza Mengyán hozzászólására (») Márc 17, 2012 /
 
Attol fugg hogy a kezeloprogram mit hasznal.
(#) pittosi hozzászólása Márc 17, 2012 /
 
A Hexet mivel lehet visszaforditani besikre ?
(#) vilmosd válasza pittosi hozzászólására (») Márc 17, 2012 /
 
Mi az a "besik" ?? Basic nyelv van. Vannak programok amik visszaforditanak HEX forrast ASM-re ugy hivjak hogy disassembler. De basic-re vagy mas magasabb szintu nyelvre meg nem lattam.
(#) Pepebá válasza icserny hozzászólására (») Márc 17, 2012 /
 
Köszi, próbálkozom. Nem egyszerű, de még mindíg könnyebb mint a hardveresen.
Üdv.
(#) adamhollos válasza benjami hozzászólására (») Márc 17, 2012 /
 
Bocsánat, hogy megint begányolom a programjaim, de még mindig nem működnek. Az RA4-es lábra egy ledet tettem kontrol gyanánt. A vevőnél ez a led egyáltalán, ki sem gyullad.
  1. #include <pic.h>
  2. __CONFIG(FOSC_INTRCIO,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,
  3. BOREN_ON,IESO_ON,FCMEN_ON);
  4. void main (void)
  5. {
  6.     TXEN=1;
  7.     SYNC=0;
  8.     SPEN=1;
  9.     TRISB7=0;
  10.     TRISA4=0;
  11.     SPBRG=0x80;
  12.     SPBRGH=0x25;
  13.     for(;;)
  14.     {
  15.         if(TXIF==1)
  16.         {
  17.             if(RA5==1)
  18.             {
  19.                 TXREG=1;
  20.                 RA4=1;
  21.             }else
  22.             {
  23.                 TXREG=0;
  24.                 RA4=0;
  25.             }
  26.         }
  27.     }
  28. }


  1. #include <pic.h>
  2. __CONFIG(FOSC_INTRCIO,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_OFF,CPD_OFF,
  3. BOREN_ON,IESO_ON,FCMEN_ON);
  4. void main (void)
  5. {
  6.     TXEN = 1;
  7.     SYNC = 0;
  8.     SPEN = 1;
  9.     CREN=1;
  10.     TRISC=0;
  11.     TRISB7=0;
  12.     TRISA4=0;
  13.     SPBRG=0x80;
  14.     SPBRGH=0x25;
  15.     for(;;)
  16.     {
  17.         if(RCIF==1)
  18.         {
  19.             if(RCREG==1)
  20.             {
  21.                 RC5=1;
  22.                 RC4=0;
  23.             }else
  24.             {
  25.                 RC5=0;
  26.                 RC4=1;
  27.             }
  28.             RA4=1;
  29.         }else
  30.         {
  31.             RA4=0;
  32.         }
  33.     }
  34. }

Az adatlapot olvasva sem sikerült megoldanom.
(#) Hp41C válasza adamhollos hozzászólására (») Márc 17, 2012 /
 
A vételi oldalon meg kell írni a hibakezelést. Le kell kezelni a ráfutási hibát (is), amit csak a vevő kikapcsolásával lehet törölni. Egy karakter esetén előbb a státus kell kiolvasni, aztán a vételi regisztert. Ez utóbbi a státust is frissíti... Hibás vétel esetén a vételi regisztert is ki kell olvasni.
(#) adamhollos válasza Hp41C hozzászólására (») Márc 17, 2012 /
 
Kiolvasás alatt törlést értesz? Nincs valahol egy minta program erre?
(#) Hp41C válasza adamhollos hozzászólására (») Márc 18, 2012 /
 
Szia!
Ki kell olvasni a RCSTA -t az értékét el kell menteni egy változóba, annak alapján kell eldönteni, hogy jó-e a vett karakter vagy történt valami hiba. Ha ráfutás hiba történt, ki kell kapcsolni a modult (SEN=0), majd visszakapcsolni (SEN=1). Mindenképen ki kell olvasni a RCREG regisztert, ha hibás volt a vétel, a karaktert nem szabad feldolgozni...
(#) benjami válasza adamhollos hozzászólására (») Márc 18, 2012 /
 
Az adó működik?
Nem ismerem ezt a fordítót (hitech ?) de #define-val vannak az sfr regiszterek definiálva vagy extern változóként?
Nem kell használni a memóriacím.bit módszert (pl. TRISB7 helyett TRISBbits.TRISB7) ?
Ha define-val vannak megadva akkor ugye simán lefordítja ezt is, csak épp a bitszám megadást memóriacímként értelmezi a fordító.
Még egy ötlet: próbáld meg a sebességet nagyon lassúra venni (hogy látni lehessen a villogást) és egy ledet rakni a TX lábra is.
(#) matheattila válasza benjami hozzászólására (») Márc 18, 2012 /
 
Sziasztok, bocsi, hogy közbeszólok, de nekem is vannak valami emlékeim Hi-Tech C -vel kapcsolatban:
- úgy emlékszem, hogy kell a htc.h is: #include < htc.h >
- meg kell adni az órajelet is: #define _XTAL_FREQ 4000000, itt pl. 4MHz
- a _config-nál nekem is sokszor akadt gondom, itt egy példa:
__CONFIG(LVPDIS & WDTDIS & INTCLK & UNPROTECT & INTIO & BORDIS);, az INTCLK és INTIO azt harározza meg, hogy belső órajelről fut és a clk lábakat lehet használni I/O-nak.
- a TRISx -et már nem emlékszem, hogy lehet használni pl. TRISB7 megadással, de úgy lehet, hogy TRISB = ..., ebben nem kell úgy mint C18-ban (TRISBbits.TRISB7), a portoknál lehet használni pl. RB7-et, vagy PORTB = ... (lehet hexában pl. 0x01, vagy binárisan 0b00000001, vagy csak simán decimálisan).
A config-ot be lehet állítani valahol a menüben is de akkor a fordításnál nem elég csak simán compilálni, hanem exportálni kell (File -> export).
Kb ennyi jutott eszembe most, mert már majdnem egy éve a mikroC-t használom, abban van help és minen függvényre/parancsra példa program részlet is van
(#) adamhollos válasza matheattila hozzászólására (») Márc 18, 2012 /
 
Ti milyen nyelven programozzátok a pic-jeiteket?
(#) Hp41C válasza adamhollos hozzászólására (») Márc 18, 2012 /
 
Assemblyben - mert minden a én kezemben van...
Következő: »»   223 / 1211
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