Fórum témák
» Több friss téma |
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: számítással nem jön ki rendesen.„/*((FOSC/Desired Baud Rate)/64) – 1*/” 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
Idézet: „Köszi.” Nincs mit. A hozzászólás módosítva: 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.
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
64kbyte.. Az jó lehet.
6szor gyorsabb mint az USART most. A hozzászólás módosítva: 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
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.
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.
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.
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.
Ü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
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.
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"...
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.
Becsatolnád nekem a forrásodat egy txt fileba , hogy át tudjam nézni?
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.
Ü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.
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 !
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.
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.
Ez a 2 sor már az enyém, nem gyári:
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.
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.
Nem! A hardverek között nem nagyon van átjárhatóság. Szinte kizárt, hogy működne.
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...
Ü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?
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.
É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
Szia!
Esetleg a soros porton az adatok fogadására lehetne a PIC a mester, ekkor ő diktálná az "űtemezést"
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.
És hogyan tudom megadni a prioritásokat?
Sajnos ez nem megy, egy meglévő eszközhöz kell ez a kiegészítés. Csak slave lehet.
|
Bejelentkezés
Hirdetés |