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   1053 / 1203
(#) Hp41C válasza silent15 hozzászólására (») Okt 28, 2018 /
 
A main függvényből ne lépj ki, hanem egy végtelen ciklust készíts az alábbi utasításokból:
  1. LATCbits.LATC2 = 1;
  2.     __delay_ms(2500);
  3.     LATCbits.LATC2 = 0;
  4.     __delay_ms(2500);
(#) silent15 válasza Hp41C hozzászólására (») Okt 28, 2018 /
 
Betettem egy végtelen whileba, de ígyse, nemértem. A PIC lábán 1,6V-ot mérek, de más kódrésszel rendesen 0-5V van más lábon. Nem tudom mit nem veszek észre...

UI: Azért a C2-t próbálom most váltogatni, mert az terheletlen, ki tudom deríteni rajta hogy elindul -e , ha elindulna akkor már tudnék továbbmenni, de így csak toporgok :/
(#) Bakman válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Milyen tokozású a kontroller? DIP? Ha igen, lehetséges, hogy egyszer fordítva beült a foglalatba és a Vdd kilőtte a lábat. Más típussal de nekem sikerült már ilyet csinálnom.
(#) silent15 válasza Bakman hozzászólására (») Okt 28, 2018 /
 
DIP de most tettem be és nem került be fordítva, ez nem jöhet szóba. Egy saját tervezésű panelbe került, van cserekontroller, de ha a panellel lenne gond azt ki akarom deríteni, de tényleg az az érdekes, hogy más lábak meg "mocorognak" rendesen, de nem mind.
(#) silent15 válasza Bakman hozzászólására (») Okt 28, 2018 /
 
Keresgélés közben belefutottam árnyékregiszteres megoldásba (shadow register), ez mennyire jöhet szóba?

De tényleg a C2 lábon semmi sincs, szóval nem értem
(#) Bakman válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Tudtommal az árnyékregiszterekhez a felhasználó nem fér hozzá semmilyen formában.
(#) silent15 válasza Bakman hozzászólására (») Okt 28, 2018 /
 
Valami ideiglenes regiszter megoldást mondanak. Hogy a felhasználó egy másik regiszterbe dolgozik mint a láb saját regisztere, de mégis odakerül valahogy. Közös címre van állítva vagy valami hasonló, nem teljesen értettem.
(#) Bakman válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Ha jól tudom (messze nem biztos), a kontroller árnyékregisztereket használ bizonyos beállításokhoz. A regisztert lemásolja magának az árnyékregiszterbe és innentől kezdve te hiába módosítod az általad hozzáférhető részen, hatása nem lesz semmire, mert az árnyékregiszterből dolgozik.

Amit te találtál, az valószínűleg programozástechnikai dolog. A hozzáférhető regiszter tartalmát gyakorlatilag lemásolod magadnak egy általad létrehozott változóba majd később összehasonlítod az eredeti regiszterrel, hogy változott-e.

Remélhetőleg valamelyik feketeöves PIC programozó benéz ide és helyre rakja a dolgokat.
(#) silent15 válasza Bakman hozzászólására (») Okt 28, 2018 /
 
Betettem közben a cserekontrollert és ugyanezt a jelenséget csinálja ugyanezzel a kóddal.
Azt sikerült, hogy MPLAB-os debuggolással rájöttem arra, hogy az A port szépen működik, de a C port nem akarja az igazat. Nem minden állapotot tesz ki, és van ahol ez a 1,5-1,7V van állandóan.
(#) eSDi válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Üdv!

Ezeknél az új fajta 16-osoknál nem olyan egyszerű a dolog mint régen, egy csomó mindent be kell állítani, mert kismillió modult pakoltak bele.
Ez egy 16F18324-re írt progi részlete:
  1. void main(void) {
  2. TRISA = 0b11101011;             //PORTA - RA7_x|RA6_x|RA5_IN|RA4_OUT|RA3_IN|
  3. RA2_OUT|RA1_IN|RA0_IN
  4. ANSELA = 0x00;                  //PORTA - Analog OFF
  5. WPUA = 0x00;                    //PORTA - Pull-Up OFF
  6. ODCONA = 0x00;                  //PORTA - Open Drain OFF
  7. SLRCONA = 0x00;                 //PORTA - Slew Rate MAX
  8. INLVLA = 0xff;                  //PORTA - ST Input Level
  9. TRISC = 0b11011100;             //PORTC - RC7_x|RC6_x|RC5_OUT|RC4_IN|RC3_IN|RC2_IN|RC1_OUT|RC0_OUT
  10. ANSELC = 0x00;                  //PORTC - Analog OFF
  11. WPUC = 0x00;                    //PORTC - Pull-Up OFF
  12. ODCONC = 0x00;                  //PORTC - Open Drain OFF
  13. SLRCONC = 0x00;                 //PORTC - Slew Rate MAX
  14. INLVLC = 0xff;                  //PORTC - ST Input Level
  15. PMD0 = 0b01111111;              //PMD - SYSCMD:ON|FVRMD:OFF|NVMMD:OFF|CLKRMD:OFF|IOCMD:OFF
  16. PMD1 = 0b11111001;              //PMD - NCOMD:OFF|TMR6MD:OFF|TMR5MD:OFF|TMR4MD:OFF|TMR3MD:OFF|TMR2MD:ON|TMR1MD:ON|TMR0MD:OFF
  17. PMD2 = 0b11111111;              //PMD - DACMD:OFF|ADCMD:OFF|CMP2MD:OFF|CMP1MD:OFF
  18. PMD3 = 0b11111110;              //PMD - CWG2MD:OFF|CWG1MD:OFF|PWM6MD:OFF|PWM5MD:OFF|CCP4MD:OFF|CCP3MD:OFF|CCP2MD:OFF|CCP1MD:ON
  19. PMD4 = 0b11111111;              //PMD - UART1MD:OFF|MSSP1MD:OFF
  20. PMD5 = 0b11111100;              //PMD - CLC4MD:OFF|CLC3MD:OFF|CLC2MD:OFF|CLC1MD:ON|DSMMD:ON
  21. ...

Érdekesség, hogy a progi csak egy ledet villogtatott, a feladatot a hardverek összekapcsolásával oldottam meg IC-n belül.
A hozzászólás módosítva: Okt 28, 2018
(#) pipi válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Komparátor van még rajta, azt is tiltsd le.
Próbáld másik biten, esetleg az összes bitre írva. A PORTA-n működik?
(#) silent15 válasza pipi hozzászólására (») Okt 28, 2018 /
 
Letiltom azt is, de most összeraktam próbapanelen egy alap környezetet és ott teljesen másképpen viselkedik (elvárt módon) mint a panelen a helyén, szóval kezdem azt érezni, hogy vakvágány volt a kód átnézése, mert lehet a panelen lesz a hiba...

A lábak kimenetein egy ilyen van. Ez leterhelheti annyira, hogy tiltson a kimenet?
(#) eSDi válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Nem szólhat bele, hacsak nem nézted el az 1k ellenállás értékét és valami jóval kisebbet tettél bele.
(#) pipi válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Van debuggered? Ott mit látsz a port kimeneteken?
(#) Bakman válasza silent15 hozzászólására (») Okt 28, 2018 /
 
Ha zárlatos a tranzisztor, éppen lehetséges.
(#) silent15 válasza pipi hozzászólására (») Okt 28, 2018 /
 
Épp most estem neki egy PICkit3-al, de elötte kivettem egy tévesen az RA3 hoz tervezett 5V - 12V szintillesztőt (legalábbis kiszedtem a tranzisztort), nem tudom mi köze volt ehhez (a tranzisztor nem volt zárlatos), de megoldódott a probléma.

Egy HV5122-vel kommunikálok, és már szépen beíródik az adat, semmi gond nincs. Viszont továbbra sem értemi miért zavarta be az egész kontrollert az RA3-on lévő tranzisztor bázisa.

Az adatlap eleje General purpose I/O ként hivatkozik rá, szóval simán odaterveztem kimenetnek (régebbi adatlapon láttam, hogy akkor csak Inputot írtak, ebből gondoltam akkor ez I/O lesz), viszont nem , nem az, csak bemenet.

Mindenesetre mindenkinek nagyon szépen köszönöm a segítséget!
(#) eSDi válasza silent15 hozzászólására (») Okt 28, 2018 /
 
A válasz a kérdésedre:
Idézet:
„#pragma config LVP = ON // Low Voltage Programming Enable bit (Low Voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE configuration bit is ignored.)”
(#) silent15 válasza eSDi hozzászólására (») Okt 28, 2018 /
 
Erre egyáltalán nem figyeltem, köszönöm!
(#) usane válasza eSDi hozzászólására (») Okt 29, 2018 /
 
A válasz a kérdésére az amit már megtalált mivel kimenetként akarta használni.
A MCLR láb mindig csak bemenet lehet, legutóbbi tudásom szerint. Egy ideje PIC-ezik már, ezt már tudhatná, de hát mindenki lehet szétszórt.
(#) eSDi válasza usane hozzászólására (») Okt 29, 2018 /
 
Idézet:
„Viszont továbbra sem értemi miért zavarta be az egész kontrollert az RA3-on lévő tranzisztor bázisa.”


Ha nem LVP-t használt volna, nem is lett volna baj. Maximum nem csinál semmit az RA3-on lévő tranyó. De így folyton reszetet szedhetett össze.
(#) Hp41C válasza silent15 hozzászólására (») Okt 29, 2018 /
 
Milyen volt a RA3 -hoz kapcsolt 5 - 12V szintillesztőt?
Két eset lehetséges:
- A RA3 a GND -re került - A MCLRE = OFF nem kapcsolja ki a reset funkciót, mert az LVP aktív (LVP = ON). Így alacsony szint a RA3 -on resetben tartja a kontroller.
- A RA3 -ra Vpp szint kerül - A szintillesztő nem jól működik. Ekkor a kontroller programozási módba kerül.
(#) usane válasza eSDi hozzászólására (») Okt 29, 2018 /
 
Igen, erre a kérdésre valóban ez a válasz.

Idézet:
„Maximum nem csinál semmit az RA3-on lévő tranyó.”

Ezzel kezdte, erre reagáltam.
(#) silent15 válasza Hp41C hozzászólására (») Okt 29, 2018 /
 
GND-re került valószínűleg és resetben tartotta. Sok pic-et nem ismerek, csak párat használtam részletesebben. Képen mellékelem mi zavart meg, bár tényleg nyilvánvalónak kellett volna lennie, hogy csak bemenet, hirtelen nem pörgettem le a regiszterekig és már csak használat közben vettem észre.
(#) silent15 hozzászólása Nov 1, 2018 /
 
Sziasztok!

Egy új kérdést intéznék hozzátok: XC8 fordító, használom az eeprom_read() makrót, viszont "Unable to resolve identifier eeprom_read" hibát dob a saját sorában, viszont szépen fordul.

Olyan megoldást találtam a neten, hogy egy saját header fájlban megadom a makrók szignatúráját:
  1. unsigned char eeprom_read(unsigned char address);
  2. void eeprom_write(unsigned char address, unsigned char value);

Ez megoldja, ellenben ha ez nincs ott akkor is fordul, szóval valahol megtalálja. Ez az IDE hibája?

Köszönöm!
(#) david10 hozzászólása Nov 3, 2018 /
 
Sziasztok,
PIC18F2550-el és egy SIM300-as modullal szeretnék SMS-t küldeni, viszont problémába ütköztem.

Az üzenetküldés gond nélkül megy, viszont írtam egy ilyen függvényt:
  1. void sendmsg(char kuldeni2){
  2.       puts("AT+CMGF=1"); putc(0x0D); putc(0x0A);      
  3.       delay_ms(1000);
  4.       printf("AT+CMGS="); putc(0x22); printf("+4072*******"); putc(0x22); putc(0x0D); putc(0x0A);
  5.       delay_ms(1000);
  6.       puts(kuldeni2);
  7.       putc(26);
  8. }

amit így hívok meg: sendmsg("proba uzenet");
A gond az, hogy ilyenkor mindig 7@¥ és d?o@¥ szövegeket kapok SMS-ben. Ha a puts(kuldeni2);-t kicserélem puts("teszt");-re, akkor jól megkapom a teszt szót.
Szerintem a gond a kuldeni2 változó használatában van, debugger jelen esetben luxus, PIC C compiller-rel fordítok és egy MiniPro-val írom fel.

Szerintetek mivel lehet a gond?
A választ előre is köszönöm!
(#) bbb válasza david10 hozzászólására (») Nov 3, 2018 / 1
 
Első blikkre azt mondanám, hogy a char, mint típus nem jó neked. Hiszen a char az nem más, mint egy 8 bites szám. Mi történik, ha kicseréled mondjuk char[], vagy string típusra?
(#) Hp41C válasza david10 hozzászólására (») Nov 3, 2018 / 1
 
Melyik fordítót használod?
A pic -es világban kétféle karaktertömböt lehet használni a tárolása szerint:
- RAM -ban tárolt karaktertömb: char[] szoveg1
- A program memóriában karaktertömb: const char[] szoveg2

Mindenesetre a paraméter átadáskor a karaktertömbre mutató pointer -t kellene átadni:
  1. void sendmsg(char* kuldeni2)

és
  1. void sendmsg(const char* kuldeni2)


Továbbá ellenőrizi kell, hogy a puts() melyik memóriából szeretné elővenni az elküldendő karakter sorozatot.
A hozzászólás módosítva: Nov 3, 2018
(#) david10 válasza david10 hozzászólására (») Nov 4, 2018 /
 
Köszönöm a válaszokat!
Végül ez lett a jó megoldás:

a program elejére ezt a sort be kell szúrni ezt a sort:
char StrBuffer[20]; // allocate space for char array

Majd amikor használni szeretném, ezt a két sort kell lefuttassam:
strcpy(StrBuffer,"Hello World"); // copy a string into the array
sendmsg(StrBuffer); // pass the pointer to the array to the function

Meg ez a függvény/funkció definiciója (szép szavak...):
void sendmsg(char *String)

További szép bug mentes napot mindenkinek!
(#) usane hozzászólása Nov 4, 2018 /
 
Üdv!

Egy kommunikációval kapcsolatos kérdés.
A Saleae szoftvere nem tudja a 1-wire-t analizálni?
Bináris formátumban lenne jó exportálni, de a hex is megfelel, de nekem csak a reseteket és azoknak idő paramétereit mutatja. Vagy esetleg valamelyik más analizálóval meg lehet oldani? (pl SPI ?) A jel 1:3 arányú NRZ. 1 bit magas 3 alacsony, vagy fordítva.
(#) kissi válasza usane hozzászólására (») Nov 4, 2018 /
 
Szia!

Tudtommal tudja !

Idézet:
„A jel 1:3 arányú NRZ. 1 bit magas 3 alacsony, vagy fordítva.”
De ez nem 1-wire ( Dallas szabvány!)!
A hozzászólás módosítva: Nov 4, 2018
Következő: »»   1053 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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