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   1181 / 1189
(#) bitmixer válasza Bakman hozzászólására (») Okt 23, 2022 /
 
Kösz, közben én is előállítottam.
(#) alita válasza bitmixer hozzászólására (») Okt 23, 2022 /
 
Azért a not found-t írja ki mert a programozó nincs csatlakoztatva.Azért írja ki a procit,
mert ha nem jelölöm ki,nem tudom megnyítani a Filét.
(#) alita hozzászólása Okt 23, 2022 /
 
Nagyon köszönöm a segítő válaszokat.
(#) nedudgi válasza alita hozzászólására (») Okt 23, 2022 /
 
Emlékeim szerint a PICkit2 programja többször frissült, jelenleg a 2.61 verzió körül tart. Azt nem tudom, hogy milyen változások, hibajavítások voltak az utolsó, 7-8 éves verzióig. Valószínűleg a PK2DeviceFile.dat-ot sem frissítetted.
A képeiden láthatóprogramot az eredeti CD-ről telepítetted?
Help/About megmondja, mi fut a gépen.

Kezdd a Tools/Check Communication paranccsal, ahogy az utolsó képen javasolja a program.
(#) sonajkniz hozzászólása Okt 23, 2022 /
 
Sziasztok!

Lenne néhány kérdésem.
Mit jelent a "Brown-out reset"? Mert a fordító "Barna visszaállítás" értelmezésével nem vagyok előrébb.
Valamint PIC 12F1840-nél mit lehet kezdeni a Stack túlcsordulásával? Mivel nem ismeri a POP utasítást, amivel törölni lehet az utolsó bejegyzést.
Márpedig nagy szükségem lenne rá, mivel a megszakítási rutinból esetenként máshová kellene küldenem a programot, és ha betelik aStack, nyom egy resetet a PIC.
(#) pipi válasza sonajkniz hozzászólására (») Okt 23, 2022 /
 
A brown out reset azt jelenti hogy ha a tápfesz egy megadott érték alá csökken akkor resetben teszi/tartja a procit. Bővebben el kell olvsani az adatlapot A stack-hoz nincs köze...
Miért kellene a stack-al trükközni, C-ben a megszakításból a feltételednek megfelelően meghívod a "esetenként máshová" függvényeidet, azután kilépsz a megszakításból.... ASM-ben meg összevissza ugrálhatsz...
Persze olyat meg nagyon nem illik, hogy ugyanazt a programrészt a főprogramból is meg a megszakításból is hivogatjuk...
(#) nedudgi válasza sonajkniz hozzászólására (») Okt 23, 2022 /
 
Milyen programnyelv?
A PIC12F1840 hardver sztek 16 szintű, de azzal nem lehet mit kezdeni. Az egymásba ágyazott szubrutinhívásokat, és a megszakításokat kell limitálni.
A C és hasonló nyelvek szoftver szteket kezelnek, azzal lehetne mit kezdeni, viszont ahhoz nem értek.
(#) sonajkniz válasza pipi hozzászólására (») Okt 23, 2022 /
 
A két kérdésem nem kapcsolódik össze.
ASM-ben programozok, és PIC18-nál gyakran alkalmazom, hogy várakozik a program egy ponton, és egy lejáró időzítő, vagy egyéb dolog kivált egy megszakítást ami teljesen máshová küldi a programot. Ilyenkor POP-al törlöm az utolsóstack bejegyzést, és nincs gond. Persze bonyolult bitkapcsolgatások és feltételvizygálatok garmadával ez megkerülhető, mint ahogy az általad említett C-s rutin teszi, de minek bonyolítsam, ha nem muszály. Ezért kérdem, van-e rá megoldás.
(#) nedudgi válasza sonajkniz hozzászólására (») Okt 23, 2022 /
 
PIC12 esetén az elugrást a várakozásnál kell megoldani.
(#) sonajkniz válasza nedudgi hozzászólására (») Okt 24, 2022 / 1
 
Működik a dolog úgy, ahogy én akartam.
Igaz, hogy POP parancs nincs a PIC12-ben, de olyan van, hogy a konfigurációs beállításokban az STVREN-t OFF-ba állítom. Ekkor ugyanis körbeforgó tárrá teszi STACK-ot. Azaz a legrégebbi bejegytést írja felűl, és nem reseteli a PIC-et. Ez pedig nekem jelen programnál tökéletesen megfelel.
(#) patrik81 hozzászólása Nov 2, 2022 /
 
Sziasztok!

Van egy problémám, tudnátok benne segíteni? Írtam egy programot, de nem működik az órám a GPS-el. Lefagy a kijelző. GPS nélkül kiírja a pontos időt, de egy nap alatt egy fél percet siet, ezért gondoltam, hogy teszek bele GPS-t, de nem működik. PIC16F690 van az órámban, és a RB5-ön van a GPS TX lába egy 10 kohmos ellenálláson keresztül. Gondolom a programmal van a hiba.
  1. #include <pic.h>
  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <string.h>
  5. #define _XTAL_FREQ 4000000
  6. #pragma config FOSC = INTRCCLK
  7. #pragma config WDTE = OFF
  8. char ch,i;
  9. char gpstime[7];
  10. char gpsdate[7];
  11. char buffer[7];
  12. char gps_header[]="GPRMC,";
  13. bool getchar_active = false;
  14. char getch()
  15. {
  16.     getchar_active = true;
  17.     while (getchar_active)
  18.         continue;
  19.     return RCREG;
  20. }
  21. void GPSHivo()
  22. {
  23.     ch = getch();
  24.     if (ch == '$')    
  25.     {                  
  26.         for (i=0;i<6;i++)
  27.         {
  28.             ch = getch();
  29.             buffer[i] = ch;
  30.         }
  31.         if (strcmp(buffer, gps_header)==0)
  32.         {        
  33.             for (i=0;i<6;i++)
  34.             {
  35.                 ch = getch();
  36.                 gpstime[i] = ch;
  37.             }
  38.             for (i=0;i<12;i++)  
  39.                 ch = getch();
  40.             for (i=0;i<9;i++)  
  41.                 ch = getch();
  42.             for (i=0;i<3;i++)  
  43.                 ch = getch();
  44.             for (i=0;i<11;i++)  
  45.                 ch = getch();
  46.             for (i=0;i<12;i++)  
  47.                 ch = getch();  
  48.             for (i=0;i<6;i++)  
  49.             {
  50.                 ch = getch();
  51.                 gpsdate[i] = ch;
  52.             }
  53.         }
  54.     }
  55. }
  56. void Init()
  57. {
  58.     TRISC=TRISA=0;
  59.     TRISB4=1;                   //kapcsoló
  60.     //TRISB5=1;                 //GPS adat
  61.     TRISB6=0;                   //GPS vezérö
  62.     PORTBbits.RB6=1;
  63.     ANSEL=0;
  64.     ANSELH=0;
  65.     //OSCCON=0b01110000;        //8MHz
  66.     OPTION_REG=0;
  67.     T0IE=IOCB4=RABIE=RCIE=PEIE=GIE=1;
  68.     SPBRG = 25;                 //9600 baud,PIC16F690,4MHz
  69.     TXEN = 1;
  70.     BRGH = 1;
  71.     RCSTA = 0x90;
  72. }
  73. void interrupt isr()
  74. {
  75.     if (RCIF && RCIF)
  76.     {
  77.         getchar_active = false;
  78.         RCREG;
  79.     }
  80. }
  81. void main()
  82. {
  83.     Init();
  84.     GPSHivo();
  85.     while(1)
  86.     {
  87.         KiirGPS();
  88.     }
  89. }
(#) Bakman válasza patrik81 hozzászólására (») Nov 2, 2022 / 1
 
Mikor fagy le? Mindjárt az elején? A GIE bit 1-re állítása legyen az Init() utolsó lépése, a lépés után pedig nullázd az esetleges hibát, mert a GPS modul kb. azonnal szolgáltat adatot, amint áramot kap, az UART modul hibára futhat, miközben mással szöszöl a program:
  1. RCREG;
  2. CREN=0;
  3. CREN=1;
Hátha...
(#) patrik81 válasza Bakman hozzászólására (») Nov 2, 2022 /
 
Már az elején lefagy az óra. Hogy kell nulláznom a hibát? A CREN-nel nullázok? Arra gondoltam megnézem a GPS jelet a PICkittel hogy meg van-e a jel. Meg egy plusz ledet megszakítással, hogy legalább a led kapcsolható-e. Az init-et át fogom írni.
(#) Hp41C válasza patrik81 hozzászólására (») Nov 2, 2022 / 1
 
Minden vett karakter esetén a RCSTA egyszer olvasható. A kiolvasott adatból el kell dönteni, hogy sikeres volt a vétel vagy sem.
Sikeres vétel esetén az RCREG egyszer olvasható.
Hibás vétel esetén a SREN törölni kell (törli a FERR és az OERR biteket), a vett karaktert ki kell olvasni, majd újra engedélyezni a modult a SREN 1 -re állításával.

Mekkora a PIC tápfeszültsége? Mekkora a GPS modulé? Elég magas a jelszint az UART számára?
A hozzászólás módosítva: Nov 2, 2022
(#) Bakman válasza Hp41C hozzászólására (») Nov 2, 2022 /
 
SREN: aszinkron módban nem érdekes, valószínűleg összekeverted a CREN-nel.
Idézet:
„Sikeres vétel esetén az RCREG egyszer olvasható.”
Ezt nem tudtam. Olvasás után nullázódik a tartalma?
(#) patrik81 válasza Hp41C hozzászólására (») Nov 2, 2022 /
 
Egy 78L05-ös tranzisztort tettem egy 5V-os telefontöltő után. Ezt kapja a PIC és a GPS is, bár a GPS GND lábát egy BC337-es tranzisztor kollekotára kötöttem, hogy kapcsolható legyen. Azt kipróbáltam a GPS LED világít vagy sem. Először 1 kohm volt a GPS előtt (akkor ténylegesen lefagyott a PIC), de most 10 kohm van, és nem fagyott le egyből. Most meg fogom nézni, hogy tényleg lefagy a PIC, vagy csak a kijelzés nem jó.
(#) bbb válasza patrik81 hozzászólására (») Nov 2, 2022 / 1
 
Nekem úgy rémlik, hogy a 7805-ös feszstab legalább 7V-ot igényel a bemeneten... Ha 5V-ot kap, akkor a kimenetén akármi lehet.
(#) patrik81 hozzászólása Nov 2, 2022 /
 
Megvan a feszültség 4,85V.
(#) patrik81 hozzászólása Nov 2, 2022 /
 
Tettem az A5-re egy LED-et, és a B4-en lévő kapcsolóval tudom kapcsolgatni megszakítás-vezérelten, de amint kapcsolok a kapcsolóval, kialszanak LED-ek a kijelzőn(a GPS-t kivettem az órából). A GIE-t lettem az init aljára. A CREN-t hova tegyem?
Az interruptba ezt írtam:
  1. if (RABIE && RABIF)
  2.     {
  3.         if(PORTBbits.RB4==1)
  4.             RA5=1;
  5.         else
  6.             RA5=0;
  7.     }
(#) pipi válasza patrik81 hozzászólására (») Nov 2, 2022 / 1
 
Nem tudom melyik C-ben progizol...
75. sorban (RCIF && RCIF) az egyik nem inkább RCIE?
78. sorban "RCREG;"ez milyen "utasítás"? nem lehet hogy ez már kiolvassa a vett karakter, persze nem csinál vele semmit, de később már nem tudod kiolvasni......
A megszakítás rutinban illik kivenni a karaktert a sorosból és javasolt már itt eltenni a bufferba.
(#) Bakman válasza patrik81 hozzászólására (») Nov 3, 2022 / 1
 
UART esetében az RCREG kiolvasása törli az RCIF bitet, itt viszont neked kell törölnöd az RABIF bitet, miután olvastál vagy írtál a PORTA regiszterbe.
(#) Lamprologus válasza patrik81 hozzászólására (») Nov 3, 2022 / 1
 
5V-os telefontöltő után minek még egy 5V-os stabilizátor is???
(#) patrik81 válasza pipi hozzászólására (») Nov 3, 2022 /
 
Sima C. Az MPLAB XC8-al. Átírtam az első RCIF-et RCIE-re. Írtam a programkódban az RCREG elé "return" szót, de nem fordult le a program vele.
(#) Bakman válasza patrik81 hozzászólására (») Nov 3, 2022 /
 
Valószínűleg félreértetted, amit pipi írt.

A megszakítás rutinban az RCREG tartalmát mindjárt másold át valamilyen változóba, különben elvész. Valahogy így:
  1. void interrupt isr()
  2. {
  3.     if (RCIE && RCIF)
  4.     {
  5.         x=RCREG;
  6.         getchar_active = false;
  7.     }
  8. }

Akkor is "lefagy" a program, ha nem érkezik karakter az UART modulba, ebben az esetben végtelen ideig fog várakozni a getch() rész. A GPS modul kimenete 3.3 V-os, elvileg elég a jelszint ahhoz, hogy az 5 V-ról járó PIC ezt már magasnak érzékelje.
(#) patrik81 válasza Bakman hozzászólására (») Nov 3, 2022 /
 
Jó volt a megszakítás rutinban kitörölni a flag-et a RABIF=0-val, így már nem fagy le a program, de a kijelző még mindig lefagy az UART hívásakor. Egyébként az UART megszakításrutinban amikor beírtam, hogy RCIF=0, de semmi reakció, a program nem fagy le, mert tudom kapcsolgatni a segéd LED-et, de a kijelző vagy lefagy, vagy minden LED világít rajta.
(#) patrik81 válasza Lamprologus hozzászólására (») Nov 3, 2022 /
 
Ezen én is gondolkoztam. Csak azért tettem bele a stabilizátort, mert olvastam, hogy a telefontöltő feszültsége ingadozik.
(#) Bakman válasza patrik81 hozzászólására (») Nov 3, 2022 /
 
Az RCIF bit csak olvasható. Akkor nullázódik, automatikusan, ha olvasod az RCREG regisztert.
(#) nedudgi válasza patrik81 hozzászólására (») Nov 3, 2022 /
 
A stabilizátor csak túlfeszültség ellen véd, ha lecsökken a táp, csak ront a helyzeten.
Telefonadapter (töltő) esetén LDO (például HT7333, vagy valamelyik rokona segíthet, két-háromszáz mV feszültségveszteséggel.
(#) Hp41C válasza Bakman hozzászólására (») Nov 3, 2022 /
 
Köszönöm. Igen elírtam: nem SREN hanem SPEN
Idézet:
„The FERR bit can be forced clear by clearing the SPEN bit of the RCSTA register which resets the EUSART. Clearing the CREN bit of the RCSTA register does not affect the FERR bit. A framing error by itself does not generate an interrupt.”


Idézet:
„Ezt nem tudtam. Olvasás után nullázódik a tartalma?”

Nem, de ha már kész lesz a következő karakter vétele a második kiolvasásra már azt az értéket adja. Ugyanígy az RCSTA hibabitjei az RCREG kiolvasása után már a következő karakter hibái szerinti értéket adhatja.
A hozzászólás módosítva: Nov 3, 2022
(#) Hp41C válasza patrik81 hozzászólására (») Nov 3, 2022 / 1
 
A 78L05 stabilizátor helyes működéséhez a kimeneti feszültségnél minimum 3V -tal magasabb bemeneti szeszültség kell.
Következő: »»   1181 / 1189
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