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   759 / 1210
(#) don_peter hozzászólása Márc 9, 2016 /
 
Uraim, szeretnék 128000-es Baudratet beállítani.
40MHz az MCU sebessége, hogy tudom azt kiszámolni hogy SPBRG regisztrbe mennyit kell írnom?
A szokásos
Idézet:
„/*((FOSC/Desired Baud Rate)/64) – 1*/”
számítással nem jön ki rendesen.
Amikor 9600-nál magasabb számolást végzek akkor változik a számítás menete?
Előre is köszi.

ui: BRGH beállítva.
Közben rájöttem: ((FOSC/Desired Baud Rate)/16) + 1
Köszi.
A hozzászólás módosítva: Márc 9, 2016
(#) zenetom válasza don_peter hozzászólására (») Márc 9, 2016 /
 
Idézet:
„Köszi.”

Nincs mit.
A hozzászólás módosítva: Márc 9, 2016
(#) don_peter válasza zenetom hozzászólására (») Márc 9, 2016 /
 

Na jó, akkor csak azért és kérdezek
USB használatával milyen átviteli sebességet tudok elérni?
Úgy látszik az UART-os megoldásból nem tudok többet kipréselni mint 11kb/s
Az adapter nem tud többet sajna..
Előre is köszi.
(#) Hp41C válasza don_peter hozzászólására (») Márc 9, 2016 / 1
 
USB - CDC -vel 64 byte-s csomagokkal, 1ms lekérdezési idővel, egyszer sem elakadva (stall) 64kbyte / sec. A gyorsabb átvidelhez Vendor specific eszköz és host (PC, Linux, Android, stb) oldali driver írása kell.
A hozzászólás módosítva: Márc 9, 2016
(#) don_peter válasza Hp41C hozzászólására (») Márc 9, 2016 /
 
64kbyte.. Az jó lehet.
6szor gyorsabb mint az USART most.
A hozzászólás módosítva: Márc 9, 2016
(#) zenetom válasza don_peter hozzászólására (») Márc 9, 2016 /
 
Biztosan többet, egy kis olvasnivaló: Bővebben: Link.
Illetve anno én ezt is kipróbáltam: Bővebben: Link.
Szerk.: na igen, a HID talán nem a legalkalmasabb, inkább már a CDC.
A hozzászólás módosítva: Márc 9, 2016
(#) don_peter válasza zenetom hozzászólására (») Márc 9, 2016 /
 
Jaja, PICCOLO projektet olvasgattam anno és azt hiszem most is annak nyomán fogok elindulni.. Jó kis irodalom.
Meg már ha USB akkor a bootloadert is kihasználom, így frissítő lesz majd a dolog.
Csak fontos a gyorsaság, mert ez a mostani USART-os feltöltés 1MB-os file esetén majd 3 percet vesz igénybe.
Most meg egy 64Mbit-es Flash-t gondoltam kipróbálni és itt ügy 4MB adatot kell majd feltölteni rá.
Szóval piszkos mód fel kell pörgetni az adatátvitelt, mert a PIC azt hiszem lazít két adat fogadása közt.
(#) Elektro.on hozzászólása Márc 10, 2016 /
 
Sziasztok!
Akadt némi problémám HW UART-al kapcsolatban.(PIC16F690, PIC16F689) Egyszerű karaktereket küldenék egyenlőre próba képen PC re. MikroPaskal minta kódjából nézetem az infókat.
  1. void main() {
  2.   ANSEL  = 0;                     // Configure AN pins as digital
  3.   ANSELH = 0;
  4.  
  5.   UART1_Init(9600);               // Initialize UART module at 9600 bps
  6.   Delay_ms(100);                  // Wait for UART module to stabilize
  7.  
  8.   UART1_Write_Text("Start");
  9.   UART1_Write(10);
  10.   UART1_Write(13);
  11.  
  12. }

Szépen le is fordítja.Szimulátoron látom, hogy a PIC regiszterei teszik a dolgukat(Hardware UART szimulator -on), de kimeneten valójában semmi. Teszteltem egy 16f690 -en PicKit2 uart tool-al de ott sem jön át adat. Több youtube-os videót is láttam ugyan ezzel a minimális kóddal szimulátoron simán működik a kommunikáció. Csatolok egy képet a szimulációról. Nekem jelenleg semmi ötletem merre induljak tovább. Esetleg ha volna használható tippetek nagyon megköszönném.
(#) Hp41C válasza Elektro.on hozzászólására (») Márc 11, 2016 /
 
A szimulátor képén megjelenik a "Start" üzenet. Lehet, hogy működik...
A kiíratás csak egyszer fut le, valószínűleg a PICkit2 -s mérésnél lekésted. A kiíratást tedd be egy ciklusba.
(#) eSDi válasza Elektro.on hozzászólására (») Márc 11, 2016 /
 
Üdv!

Szedd ki a delay-t ideiglenesen, ez szimulációban baromi sok idő.

Megvetted a PIC Simulator-t és a beépített BASIC Compiler helyett C-t használsz?
A hozzászólás módosítva: Márc 11, 2016
(#) Elektro.on válasza Hp41C hozzászólására (») Márc 11, 2016 /
 
Ahol a start üzenetet látod az a pic belső regiszrere. Volt már ciklusban is és kifelé semmi.
Egyébként este kipróbáltam a szoftveres uartot is szimulátoron és az megjelent rendesen.A képen amit korábban csatoltam a jobb alsó ablak a soros terminál. ami ott megjelenik az van a PIC lábain. Egyébként resettel ujra indítottam a PIC -et direkt a "lemaradás" miatt illetve volt, hogy 5000ms késleltetést adtam neki.
(#) Hp41C válasza Elektro.on hozzászólására (») Márc 11, 2016 /
 
Memóriatartalmat nem látok sehol a képen. A jobb alsó sarokban a "Software UART Simulation Inter..." látható, itt nincs nyoma az adásnak. A bal felsőben a, "Hardware UART Simulation Inter...", az "UART Transmission Output" -nál látható a "Start"...
(#) Hp41C válasza Elektro.on hozzászólására (») Márc 11, 2016 /
 
Nem használtam sem a BASIC -et, sem a PIC Simulátort, de assembly megoldásommal gyönyörően működik a 16F690 UART -ja.
(#) Elektro.on válasza Hp41C hozzászólására (») Márc 11, 2016 /
 
Becsatolnád nekem a forrásodat egy txt fileba , hogy át tudjam nézni?
(#) Elektro.on válasza Hp41C hozzászólására (») Márc 11, 2016 /
 
Még egy észrevételem van. A szimulációk során amikor a szofveres UART-ot próbáltam a TX láb (RB7) végig magas színten volt ahogy kell, mivel innen indítja a start bitet. A hardveres UART tesztnél viszont lent maradt.
(#) Kapagerenda hozzászólása Márc 11, 2016 /
 
Üdv,
16F887-nél szeretnék olyat, hogy a PORTB0-án levő kapcsoló zárásának hatására előjön az interrupt, majd a kapcsoló nyitása hatására kilép az interruptból és folytatja a main programot.
Megírtam a programot az interrupt elő is jön a kapcsoló zárására, viszont nem tudok visszalépni a main programba ( a kapcsoló jól van bekötve!). A következőt csináltam:

unsigned short i,k,l ;

void interrupt() {

*
*
*
*

INTCON.F3 = 1; // RBIE=1
INTCON.F7 = 0; //GIE = 0
}




void main() {

ANSELH = 0;
ANSEL = 0;

PORTB = 0;
TRISB = 0b00000000;

IOCB = 0b00000001;
INTCON.F3 = 1; // RBIE = 1
INTCON.F7 = 1; // GIE = 1

*
*
*

}
A program többi részét direkt csillagoztam ki. A hiba valószínű a megszakitás parancsok kezelésében lesz. Előre is kösz a segítséget.
(#) kissi válasza Kapagerenda hozzászólására (») Márc 11, 2016 /
 
Szia!

Nem igazán jó amit csinálsz, a megszakítás nem arra való, hogy "belépek, majd megvárom míg visszakapcsolják a kapcsolót és kilépek", kicsit olvasgasd át a fórumot vagy bármilyen releváns irodalmat!

Ami viszont az elven kívül biztos nem jó a programodban az az, hogy a GIE bitet nem kell a globális megszakítás engedélyező bitet törölnöd ( GIE ), viszont a megszakítást jelző bitet törölnöd kell, mert akkor rögtön újra visszalép! Sokat segít egy szimulátor vagy PK2-es debuggolás !
(#) ha1drp válasza Kapagerenda hozzászólására (») Márc 11, 2016 /
 
Az interruptot kiváltó okot szoftveresen kell törölni. Jelen esetben a megszakításban törölni kellene az RBIF bitet. Az RBIE=1, GIE=0 ugyanitt felesleges, ha csak nincs vele egyéb célod.
(#) don_peter hozzászólása Márc 13, 2016 /
 
Uraim, 18F442-es linker állományát lehet úgy módosítani, hogy lehetőség szerint minimum 256byte vagy maximum 512byte tömböt tudjak létrehozni?
Jelenleg sajnos valahol 200byte környékén szál el.
  1. // File: 18f442_g.lkr
  2. // Generic linker script for the PIC18F442 processor
  3.  
  4. LIBPATH .
  5.  
  6. #IFDEF _CRUNTIME
  7.   FILES c018i.o
  8.   FILES clib.lib
  9.   FILES p18f442.lib
  10. #FI
  11.  
  12.   CODEPAGE   NAME=page       START=0x0               END=0x3FFF
  13. CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
  14. CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
  15. CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
  16. CODEPAGE   NAME=eedata     START=0xF00000          END=0xF000FF       PROTECTED
  17.  
  18. ACCESSBANK NAME=accessram  START=0x0               END=0x7F
  19. ACCESSBANK NAME=accesssfr  START=0xF80             END=0xFFF          PROTECTED
  20. DATABANK   NAME=gpr0       START=0x80              END=0xFF
  21. DATABANK   NAME=gpr1       START=0x100             END=0x1FF
  22. DATABANK   NAME=gpr2       START=0x200             END=0x2FF
  23.  
  24. //DATABANK   NAME=buff1      START=0X200             END=0x2FF PROTECTED
  25. //SECTION    NAME=buff1      RAM=buff1
  26.  
  27. #IFDEF _CRUNTIME
  28.   SECTION    NAME=CONFIG     ROM=config
  29.   #IFDEF _DEBUGSTACK
  30.     STACK SIZE=0x100 RAM=gpr1
  31.   #ELSE
  32.     STACK SIZE=0x100 RAM=gpr2
  33.   #FI
  34. #FI

Ez a 2 sor már az enyém, nem gyári:
  1. //DATABANK   NAME=buff1      START=0X200             END=0x2FF PROTECTED
  2. //SECTION    NAME=buff1      RAM=buff1

Csatoltam egy képet a szabad memóriáról.
A program memóriából is lehetne lecsípni, ha másképp nem megy.
Előre is köszi a segítséget.

szabadmem.JPG
    
(#) csdancsi55 hozzászólása Márc 13, 2016 /
 
Sziasztok! A Digitális hőmérő AVR - el (EM-50220) (http://www.hobbielektronika.hu/cikkek/digitalis_homero_avr_-_el.html?pg=5) -ben lévő .hex - et csak be kell másolni a pic - be?, nem kell vele semmit sem csinálni? A válaszokat előre is köszönöm.
(#) Pali79 válasza csdancsi55 hozzászólására (») Márc 13, 2016 /
 
Nem! A hardverek között nem nagyon van átjárhatóság. Szinte kizárt, hogy működne.
(#) dokidoki válasza Pali79 hozzászólására (») Márc 13, 2016 /
 
Lehet, hogy PIC-nek gondolja - hívja a cikkben szereplő AVR-t, bár a "csak bele kell másolni" is ez esetben rejt némi kihívást...
(#) don_peter válasza don_peter hozzászólására (») Márc 13, 2016 /
 
Köszönöm, megoldottam.
(#) elektroszala hozzászólása Márc 14, 2016 /
 
Üdvözletek!

A következő problémát kellene megoldanom.
A Pic egy 18f26k22 . Egyebek mellett fordulatszámot mérek és szabályzok vele (közben azért mást is csinál) de eközben soros porton kell RxInt -re adatokat fogadnom, kb 15 byte nagyságrendeben.
A probléma az, hogy ha épp benne vagyok a makróban, ami a fordulatot méri (B0 megszakítással), egyrészt nem tudom, mit reagál a program , ha közben az RxInt jelez , másrészt mégjobb lenne, ha valahogy tudnám pufferelni mind a 15 byte-ot, amíg a fordulatmérés makrója lefut.
Mi a megoldás?
(#) benjami válasza elektroszala hozzászólására (») Márc 14, 2016 /
 
Mivel nem látjuk a kódodat, így elég nehéz bármit mondani, de annak alapvető dolognak kellene lenni, hogy megszakításban nem végzünk hosszú ideig tartó műveletet. Ha mégis szükség volna rá, akkor egy jelzőbittel jelezzük a főprogramnak az eseményt és az időigényes dolgokat abban végezzük el. Az Rx/Tx küldést/fogadást meg szoftveres pufferrel érdemes megoldani, ahol az Rx/Tx megszakítás csak a puffert tölti és üríti.
(#) elektroszala válasza benjami hozzászólására (») Márc 14, 2016 /
 
Én a következőképp matekoltam:
500 Rpm -nél 8,3fordulat/mp, tehát 120ms 1kör. Én a B0 -n , két impulzus között eltelt időt mérem, ebből kifolyólag , legrosszabb esetben akár ~239ms -be is telhet 2 impulzus beérkezése 500Rpm-nél (ha a jeladó a makró hívásakor már éppen elhaladt). Ez nagyon hosszú idő, és jó esély van rá, hogy éppen ekkor kezdjenek bejönni az adatok. Ráadásul nem kizárt, hogy 250 Rpm -re is szükségem lesz, ott már ~500 ms is lehet a szükséges idő. Maga a mérési művelet makrója nincs megszakításban, az a főprogram része, csak a B0 Int van a mérés idejére engedélyezve. A kérdés az, hogyan tudom lekezelni a bejövő adatokat, mivel az arra szükséges idő is 10-20ms-es nagyságrendű. És meg egy fontos dolog: a mérést 250- 10.000 rpm között kell tudjam megcsinálni, tehát igen tág határok között. Most jelenleg ott tartok, hogyha mérés közben jelez a RxInt, akkor "félbehagyom" a mérést, letárolom a bejövő adatokat, aztán visszatérek a méréshez, de ez nem az igazi, viszont a Pic alapból csak 2 byte-os pufferrel rendelkezik -ha jól tudom. Ezt nem lehet megnövelni valahogy?
A hozzászólás módosítva: Márc 14, 2016
(#) foxi63 válasza elektroszala hozzászólására (») Márc 14, 2016 /
 
Szia!
Esetleg a soros porton az adatok fogadására lehetne a PIC a mester, ekkor ő diktálná az "űtemezést"
(#) benjami válasza elektroszala hozzászólására (») Márc 14, 2016 /
 
Itt egy Rx/Tx puffer program. B0 Int-ben csak lenulláznék egy számlálót, amit a következő megszakításban kiolvasnék. Célszerű a kétszintű megszakításkezelést használni, ahol az RB Int-et magas prioritással, a többit meg alacsony prioritással működteted.
(#) elektroszala válasza benjami hozzászólására (») Márc 14, 2016 /
 
És hogyan tudom megadni a prioritásokat?
(#) elektroszala válasza foxi63 hozzászólására (») Márc 14, 2016 /
 
Sajnos ez nem megy, egy meglévő eszközhöz kell ez a kiegészítés. Csak slave lehet.
Következő: »»   759 / 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