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   747 / 1210
(#) kissi válasza Prendick hozzászólására (») Feb 1, 2016 /
 
Ez igaz, de start + 8 bit + stop bitet visz át és a bit közepeknél vesz mintát a start lefutó éltől kezdve... azaz 10 bitet visz át, ami azt jelenti, hogy elég nagy hiba kell hozzá, hogy rossz értéket érzékeljen ( előző vagy következő bitbe mérjen bele!), nem 1,3 % !
A hozzászólás módosítva: Feb 1, 2016
(#) Prendick válasza kissi hozzászólására (») Feb 1, 2016 /
 
De gondolj bele, egy több kilobájtos folyamatos adatcsomagról van szó. Az első startnál a közepén lesz a mintavétel, utána a lassabb vevő végigmegy a bájton a maga ütemében. Közben a gyorsabb adó nem vár, tehát a következő bájtnál már nem a bit közepén lesz a mintavétel, hanem kicsit arrébb. Aztán ezt a hibát addig göngyöli a rendszer, hogy egyszer egy bájtban lévő 0-át érzékel startnak vagy stopnak.
Egyébként nagyon egyszerű kipróbálni. Egy pic kell hozzá, meg egy Pickit2. Állíts be két eltérő sebességet és nézd meg mit kapsz.
(#) don_peter válasza kissi hozzászólására (») Feb 1, 2016 /
 
Idézet:
„szerk: most néztem a képet... a szimulátornál nem lehet gond, tuti, hogy jól szimulálja a windows-on belüli átviteleket ?!”

Ezt nem tudom megmondani, de eddig amit teszteltem adat küldés és fogadást az mind működött, tehát elvileg jól szimulálja a kapcsolatot.
Az, hogy nagy sebességnél is, így tesz e, azt nem tudom megmondani..
Arra gondolsz esetleg, hogy a szimulátor kekeckedik velem, téveszt nagy sebességnél?

Hp41C: "Ráfutás történik"
Ez szinte biztos.
Csak nem értem hogyan lehetséges, hiszen a főprogram addig nem küld ki visszaigazoló adatot ameddig PIC nem végez a dolgával.
Ha végzet, csak utána, utolsó műveletként küldi ki a visszaigazolást PC-nek.
PC meg erre vár, ha érkezik akkor ismét küldi a soron következő adatot.
Nem értem, ha tartják a protokollt, akkor nem lehetne ráfutás.

Idézet:
„Az elsőnek vett adatot nem olvassa ki a programod mielőtt a következő vétele befejeződik.”

Nem biztos, hogy jól értem, de az első adatokat sok esetben veszi, de random képes leállni az egész.

Közben gyorsan leellenőriztem úgy a programot, hogy egy Error változót tettem be a megszakításba az adatvesztések figyelésére.
Nincs adat vesztés, csatolom a képet.
(#) don_peter hozzászólása Feb 1, 2016 /
 
Nos a következő a helyzet, hátha tudunk belőle következtetni valamire.
PC-s programban az adatküldéshez tettem be elsőnek 1ms-os késleltetést.
Ezzel valamelyest stabilizálódni látszót, de sokadjára csak sikerült neki leállni.
Majd megnöveltem 2ms-ra és stabilizálódott az adatfolyam, nem áll meg.

Ez nagyszerű is lenne kisebb adatcsomagok esetében, de már egy 16Kb vagy a maximum 1Mbit-es fájl átpréselése komoly időt venne igénybe.
Szóval a késleltetésnek nem szabad benne lennie.
(#) kissi válasza Prendick hozzászólására (») Feb 1, 2016 /
 
Idézet:
„Az első startnál a közepén lesz a mintavétel, utána a lassabb vevő végigmegy a bájton a maga ütemében. Közben a gyorsabb adó nem vár, tehát a következő bájtnál már nem a bit közepén lesz a mintavétel, hanem kicsit arrébb. Aztán ezt a hibát addig göngyöli a rendszer, hogy egyszer egy bájtban lévő 0-át érzékel startnak vagy stopnak.”

Ez így valóban okozhatna hibát ( ezt is ki lehet olvasni kerethibaként!), de a kérdező ezt írta korábban:
Idézet:
„1. PC adat küldés PIC-nek
2. PIC adat fogadásának vissza igazolása (adat küldés PC-nek)
3. PIC feldolgozza az adatot
4. PC várakozik PIC visszaigazoló adatra
5. Ismétlés az elejétől.”

Így szerintem "ül", amit írtam !
A hozzászólás módosítva: Feb 1, 2016
(#) Hp41C válasza Prendick hozzászólására (») Feb 1, 2016 /
 
1. A PIC18F442 -ben levő usart a Baud Rate 16 szorosával vagy 64 szeresével vezérel egy "Data Recovery" egységet. Adatlap Figure 16-4. Ennek feladata a Start bit felismerése és a további mintavételezés idejének beállítása. A "szinkronizáció" minden keretnél megtörténik. A hibát nem göngyöli tovább, hiszen a következő start érzékeléshez 16 ill. 64 szeres órajelet használ.

2. Elcsúszásnál az a kritikus, ha a startbitnél beállított idő az utolsó bit közepéről elcsúszik a bit elejére vagy a bit végére. Mivel 10 bit egy keret 8n1 formátumban és fél bitidő a legnagyobb csúszás, így maximálisan 5% órajel eltérés okozza a fenti esetet. 1,3% a bitidő 0.13 szorosának megfelelő elcsúszást okoz, ami bőven biztosítja a hibátlan vételt.

Idézet:
„Egyébként nagyon egyszerű kipróbálni. Egy pic kell hozzá, meg egy Pickit2. Állíts be két eltérő sebességet és nézd meg mit kapsz.”

Ezen jót múlattam....
A PICkit2 2.61.00 programban szoftverrel van megoldva a soros vétel / adás. Nézd csak meg, hogy hova csatlakozik a PGD ill PGC vonal. A RA2 és RA3 lábakra. A belső UART pedig a RC7 - RxD és RC6 - TxD.
Első módosításom volt a TxD láb felszabadítása, egy komparátorral az RxD -re vezetni a PGD vonalat. Így a PICkit2 1.4V -os jelszintű kapcsolatot is kezelni képes akár 115200 Baud -ig.
Annyi viszont elérhető a PICkit2 UART tool -jával, hogy a felhasználói Baud beállítással 9600 helyett 9120 illetve 10080 közötti értékekkel próbáljunk a küldeni adatot a PC -n 9600 Baud -dal működő soros vonalának (szint illesztéssel).
A hozzászólás módosítva: Feb 1, 2016
(#) kissi válasza Hp41C hozzászólására (») Feb 1, 2016 /
 
Idézet:
„A hibát nem göngyöli tovább, hiszen a következő start érzékeléshez 16 ill. 64 szeres órajelet használ.”
Igaz, legfeljebb a STOP idő rövidül vagy nyúlik egy kicsit a byte-ok között!
(#) Prendick válasza kissi hozzászólására (») Feb 1, 2016 /
 
Közben észrevettem, hogy nem pontosan ugyanarról írunk. Szinkronhiba. Én az eredeti felvetés (min. 16kb adatfolyam) alapján jegyeztem meg mellékesen, hogy ahhoz komoly pontosság kell. Egy bájton értelemszerűen nincs ez a hiba. Úgyhogy mindkettőnknek igaza van, csak éppen a probléma más-más stádiumában járunk.
(#) Prendick válasza Hp41C hozzászólására (») Feb 1, 2016 /
 
A Pickit pont azért jó UART játékokra, mert szoftveresen kezeli a dolgot. Vagyis egészen egzotikus Baud értékeket lehet megadni és így tesztelni az eltérő sebességek közötti driftet.
Arra céloztam, hogy eltérő Baud értékeket beállítva és binárisra konvertálva az adó és a vevő értékeit, úgy lehet látni a csúszást, mint egy logikai analizátoron.

Idézet:
„1,3% a bitidő 0.13 szorosának megfelelő elcsúszást okoz, ami bőven biztosítja a hibátlan vételt”

Csak hát Péter, (mint jeleztem) 3,5%-os hibával használja az USART-ot, amihez ha a PC program hozzácsap még egy keveset, hibahatáron lehet.

A többi evidencia és ugyanaz a félreértés benne, amit az előbb írtam, ti. én végig ping-pong nélküli, folyamatos adatfolyamról beszéltem, nem egy bájtról.
(#) don_peter válasza Prendick hozzászólására (») Feb 1, 2016 /
 
Valójában nem is pár byte-ról van szó, hanem maximum 8Mbit hosszúságú adatról.
Ha csak pár bájt kellene nem pattognék a dolgon

Az előbb visszavettem a sebességet 9600-ra és persze mindent ennek megfelelően állítottam be, hogy elkerüljem az esetleges elcsúszást.
Ezt az értéket azért elég pontosan be lehet állítani szóval ennek az elcsúszásnak a hibáját ki is lehet zárni.
Sajnos ugyan úgy megakad az adatfolyam.
(#) Hp41C válasza don_peter hozzászólására (») Feb 1, 2016 /
 
Nem fogod megúszni a buffereket...
Az alábbi kéen egy 18F2550 egyszerre tart kapcsolatot USB -n és UART -tal a PC -n futó programokkal, közben veszi a DCF adást, kezeli az infra távirányítót és még az időt is számolja (a dátumból a hét napját is). Meg sem kottyan neki...
(#) Hp41C válasza don_peter hozzászólására (») Feb 1, 2016 /
 
A PIC vette az első karaktert, és beírja a TXREG -re majd megvárja, míg az adó elküldi. Azonban a PC ez alatt az idő alatt beküldhet két adatot is. Az elsőt már akkor elkezdte venni a PIC, amikor az előzőt az RCREG -be tette, a másodikat pedig a TXIF -re való várakozás alatt. Az RCIF kiszolgáló rutin szépen kiolvassa a második adatot is és felülírja a még fel nem dolgozottat a Result nevű változóban.

Pontosan ezért írtam, hogy vegyél fel egy vételi buffert és abba sorban tedd bele a vett adatokat. Az előbb linkelt képhez tartozó PIC programban az UART vételi és adási puffer 64 - 64 byte.
(#) don_peter válasza Hp41C hozzászólására (») Feb 1, 2016 /
 
Van rá lehetőséged, hogy leteszteld a PC-s programom? (Vagy bárkinek)
Egyszerre 0x20-tól 0x32-ig küld egy sorozatot.
Port kiválasztássávalt azonnal küldi az adatot.
Valamilyen Microsoft keretrendszer kell majd a futtatáshoz.
Bár nem biztos.
Közben kipróbáltam benjami programját és az övével is ugyan ez a bibi.
A hozzászólás módosítva: Feb 1, 2016
(#) don_peter válasza Hp41C hozzászólására (») Feb 1, 2016 /
 
Előzőben csatoltam a teljes proteus projektet is, hátha valamit nem veszek észre..
Bár már elvileg minden úgy van ahogyan kell legyen..

De át tudom tenni MPLAB-ba is ha az jobb. (csatoltam)
A hozzászólás módosítva: Feb 1, 2016

USART.zip
    
(#) benjami válasza don_peter hozzászólására (») Feb 1, 2016 /
 
Nálam ez a PC-s program nem indult el, sem 64bites Win7, sem 32bites XP alatt, pedig mindkét gépen volt COM port a gépen.
(#) don_peter válasza benjami hozzászólására (») Feb 1, 2016 /
 
Mit ír ki? Valami keret rendszer kell hozzá.
Win7 64Bit-esem van..
(#) benjami válasza don_peter hozzászólására (») Feb 1, 2016 /
 
A mellékletben a hibaüzenet képe
(#) don_peter válasza benjami hozzászólására (») Feb 1, 2016 /
 
Win 64-es alkalmazás és kell hozzá "Microsoft Net Framework 4.5" keretrendszer.
Elvileg innen tölthető: Bővebben: Link
A hozzászólás módosítva: Feb 1, 2016
(#) apromax válasza Hp41C hozzászólására (») Feb 1, 2016 /
 
Én is mindig Rx - Tx buffert használok a kommunikációhoz. Az Rx buffer használatának okát értem pl ráfutás hibák elkerülése végett. Persze a buffer is betelhet de az egy másik történet.
Viszont Tx buffert azért használok mert minden ajánlás szól róla. Ugyanakkor nem értem miért van rá is szükség. Ott nem tudok ráfutásos TXREG írás hibát elkövetni, mert az monitorozható.
Akkor miért is kell a Tx buffer?
(#) benjami válasza apromax hozzászólására (») Feb 1, 2016 /
 
Tx buffer? Pl. azért mert a programod el szeretne küldeni mondjuk 23 bájtot. Ha buffer van gyorsan belesöpri és már megy is tovább a programod a többi dolgát elvégezni. Buffer nélkül? Akkor meg ott várakozhat amíg az utolsó bájtot is be nem taszigálta a TX-be.
(#) Hp41C válasza apromax hozzászólására (») Feb 1, 2016 /
 
Egy vett üzenetre lehet egy több karakteres válsz is. Ha nincs TX buffer, a feldolgozás elakad addig, amíg a válasz utolsó karakterét is elküldte az UART. Ha van buffer, a várakozás leválik a feldolgozásról, a küldés nem fecsérel el CPU időt. A válasz karaketrei bekerülnek a TX bufferbe, onnan egy kicsike megszakítás kezelő elküldeti, ahogyan az adó tudja...
(#) don_peter hozzászólása Feb 1, 2016 /
 
  1. Bocs az előbb még debug módban volt a program lehet ezért nem indult.
  2. Nézetek meg amit most csatoltam.
(#) cross51 válasza don_peter hozzászólására (») Feb 1, 2016 / 1
 
Nálam se nem és nálam az összes .NET fent van a Visual Studio miatt, de system.io.filenotfoundexception hiba kód arra utalhat, hogy nincs meg egy DLL fájl az exe mellet nincs valami dll fájl?
A hozzászólás módosítva: Feb 1, 2016
(#) don_peter válasza cross51 hozzászólására (») Feb 1, 2016 /
 
Ne haragudjatok srácok, hogy túráztatlak benneteket ..
Tiszta bugyuta vagyok, hogy azt nem csomagoltam mellé.
Itt szívók vele egy órája egy másik gépen, hogy mi lehet és eszembe sem jutott, hogy a dll-t hiányolja
Már kicsit el vagyok kámpicsorodva az UART miatt, hogy már 1 hete küzdök vele és csak nem akar összejönni és még előttem a memória kezelés..

Működése:
Port csatlakozás után azonnal küldi az adatokat, jelen esetben : 0x20-tól 0x32-ig.
Ha lefutott, akkor megszakítjuk a kapcsolatot majd újra kapcsolódunk, akkor ismét lefut az adatküldés sorozat.
A hozzászólás módosítva: Feb 1, 2016

Release.zip
    
(#) cross51 válasza don_peter hozzászólására (») Feb 1, 2016 /
 
Ezt a programot te írtad?
(#) don_peter válasza cross51 hozzászólására (») Feb 1, 2016 /
 
Persze. Tudom nem nagy szám de egyelőre elég lesz. Majd kicsit kibővíteni.
(#) cross51 válasza don_peter hozzászólására (») Feb 1, 2016 /
 
Én összedobtam egyet gyorsan. Remélem működik. (proteusba ment)

Szerk.: a send special-al jelöltem, hogy 0x20-0x32 ig aztán kapcsolatbontás kapcsolódás és 0x10-0x32 újra.
A hozzászólás módosítva: Feb 1, 2016
(#) don_peter válasza cross51 hozzászólására (») Feb 1, 2016 /
 
Mit kell néznem, ezt produkálja, 115200-ra állítottad a comport baudrate-t?
Amúgy egyel visszább ott a teljes proteus projektem abban meg tudod nézni a kódot is amit írtam hozzá.

x jelentése: annyiszor valósult meg a főprogramban a feltétel vagy is ennyiszer észleli az adatot
Size: ennyiszer volt megszakítás.
Result: ez az utolsó adat amit beolvasott
Hiba: ha nincs vagy hibás adat érkezik
A hozzászólás módosítva: Feb 1, 2016
(#) Beles hozzászólása Feb 2, 2016 /
 
Sziasztok!
Kell-e módosítani a PIC18F2550 hid bootloader projektben a linker scripten valamit ha PIC18F2550-hez szeretném használni? Ugyanis felismeri a bootloader program, de törlés közben lefagy, és ha újra rádugom az USB-re akkor már nem is indul el többet a bootloader.
(#) don_peter válasza Beles hozzászólására (») Feb 2, 2016 /
 
Húú ezzel én is szívtam anno, ha jól tudom akkor a memória területet le kell foglalni a HidBootlader-nek. Azt hiszem ehhez van is külön linker állomány, azzal működnie kellene.
A hozzászólás módosítva: Feb 2, 2016
Következő: »»   747 / 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