Fórum témák
» Több friss téma |
Fórum
Jaja, épp a több modult álmodtam meg este, de azon kívül még nem gyulladt ki a lámpa.. látok számlálót, SR tárolókat, komparátorokat, kereszt reteszelést, de még nem állt össze egésszé. Meg csak holnap tudom megnézni, hogy a több modulos RS232 receiver hogyan is fest assembly fordításban.
Ha előkerülne a gsm modemes cuccod, szívesen venném, ha segítenél. Addig agyalok tovább.
Volt hasonló gondom, amikor gsm modemmel való kommunikációt csináltam. Elvileg valahol megvan, majd ránézek. Addig is előljáróban, vételi és adási modulból is több darabot lehet használni és az engedélyezéseket kapuzni is lehet...
Szia, nem azon rugózom, mert alsó 8 bit, felső 8 bit, ezt megoldom a küldő odalon, ezzel semmi gondom nincs. A byte-ok sorrendje a vevő modulban ennek megfelelően áll össze. Ha mind a 16 byte mindig megérkezik rendben, nincs is semmi gond.
A bajom az, hogy pl. jönnek az adatok, ámde mondjuk a 16 byte helyett jön 12, mert error van adó oldalon. Ekkor nem kezdhetem el a feldolgozást. Meg kell várni a másik 4 adatot. Nyomtam egy szimulációt rá: ha az adónál van a hiba, azt a parsic modul ACT kimenettel érzékelem, nincs feldolgozás, error kiír. De nem jelzi sehol a parsic, hogy épp melyik vett byte-nál tart a 16-ból. Amint az adó helyreáll és elkezdi ismét küldeni a 16-os csomagot (és nem onnan, ahol befejezte, hanem mondjuk elölről, mert resetelve lett), a parsic vevő nem az első byte-tól, hanem a 12.-ik, utoljára vett hibamentes byte-tól kezdi rögzíteni az adatokat. Amint eléri a 16-ot, kezdi beírni őket az elejéről. El is ment a szinkron, hiába érkezik be minden byte. Ha azt mondom, hogy van bevezető karakter, azzal sem megyek sokra, mert a parsic-ban nem indíthatom újra a vételt az első byte-tól, nem "resetelhetem" a vevő modult, hanem ahol tart éppen, onnantól rögzíti a következő bytokat. Így a cheksum is felesleges, mert nem oda érkezik, ahová várom. Ezt kellene megoldani, hogy megfelelő helyre érkezzen minden adat hiba esetén. Na ezen rugózom. Onnan már lenne értelme kezdő/befejező/cheksum adatnak.
Szerintem, beállítasz adatforrás modullal 8db 16 bites változót. elnevezed őket valami "móricka névvel, pl: A_RX1, A_RX2...) Az Uart vételi modullal beállítod őket vételre, egyesével A_RX1, A_RX1_1, A_RX2, A_RX2_1, ..stb...pontosan 16 db-ot. A checksum az van(?) Esetleg bevezető, befejező ASCII. Ezt deríts ki a terminálprogrammal ,vagy az RS check exe progival, amit a topic elején többször föltettem. Gondolom leginkább azon "rugózol", hogyan lesz a 8 bites adatokból egy komplett 16 bites érték. Hát így, ahogy leírtam...Ha a felső byte-ot adják először, akkor páronként felcserélgeted.
A hozzászólás módosítva: Feb 12, 2015
Köszi, C-ben én is bármikor megcsinálom, de jelenleg ezzel a progival kell megoldanom a saját korlátaival..
Azt arduino-ban csináltam, csak az elvet mondtam. Ott egy '\n' karakter vételekor kezdem el vizsgálni az adatot. Vagy csináld úgy, hogy számold az érkező csomagokat és ha megjött a 16byte, akkor dolgozd fel.
Nincs, de akár megoldható lenne egy záró byte küldése, de ezzel nem nagyon vagyok előrébb. Van valami publikus rajzod a GPS-es cuccodról?
Nincs a jelsorozat végén valamilyen újsor vagy kocsivissza karakter? (0A 0D)
Ha van, akkor azt kell figyelembe venni. Én a GPS jel vételénél így oldottam meg. Ha nincs, akkor időzíteni kell a feldolgozást. Ha eltelt valamennyi idő, és nem jött semmilyen karakter, akkor dolgozhatja fel.
RS232-n kellene vennem 8db 16bites adatot. Ergo 16 byte egymás után. Feldolgozás pedig csak akkor, ha már mind a 16 byte beérkezett. Az 16 byte-os "csomag" 1s-onként érkezik, tehát bőven van idő feldolgozni. Hogyan oldanátok meg a 16 byte vételét, és csak akkor elkezdeni a feldolgozást, ha már mind egészen biztosan beérkezett?
Ha 20Mhz-s quartz-ot használsz helyből közte lesz az érték. Továbbá a mellékelt kép szerinti mintaprogram (működő!) alapján INC modul beillesztve az INIT végére. az értékekkel kell variálni az adatlap szerint, illetve a kissé föntebbebb belinkelt PWM_info segít.
Figyelembe kell venni, hogy a 255 (PR2) értéke ha változik, akkor ez is befolyással lesz a kitöltési tényezőre, -mindamellett, hogy az alap modul byte-s bemenete is erre szolgál. A 2ms alap időt nem célszerű használni mert nagyon leterheli a procit bizonyos esetekben, helyetee 20 vagy nagyobb értéket. A PWM-hez (és egyéb esetben ahol CF bementre van kötve ott az adott adat frissítés ideje) Tehát PWM esetén is, - nem sok köze van a kimeneti frekihez. A hozzászólás módosítva: Feb 4, 2015
Sziasztok!
A régi PARSIC-al lehet-e 1-3 KHz között frekvenciát generálni. Az alap órajel 2 msec ami 500 Hz? Üdv: Gábor
Sziasztok!
Köszönöm mindenkinek a segítő szándékát. "snapscan" Az említett adatlapnál én az alábbi táblázat ajánlását vettem figyelembe 10 bit-es felbontásnál. Ezek szerint nem jól értelmeztem a leírást, az iránymutatásod alapján sikerült csökkentenem a frekvenciát, még egyszer köszönöm. Idézet: „TABLE 8-3: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 20 MHz TABLE 8-4: REGISTERS ASSOCIATED WITH CAPTURE, COMPARE AND TIMER1 PWM Frequency 1.22 kHz 4.88 kHz 19.53 kHz 78.12kHz 156.3 kHz 208.3 kHz Timer Prescaler (1, 4, 16) 16 4 1 1 1 1 PR2 Value 0xFFh 0xFFh 0xFFh 0x3Fh 0x1Fh 0x17h Maximum Resolution (bits) 10 10 10 8 7 5.5”
Ja, lemaradt, hogy ha beállítottad az előosztást, onnan már felfelé hangolhatsz a PR2-vel, azaz a jelenleg 255-ön lévő érték csökkentésével. Fenti képlet alapján...
A hozzászólás módosítva: Feb 3, 2015
Vegyük alapul a 16F87x procit.
Ha PR2 értékét, vagyis a 255-öt csökkented, csökken a periódus, ergo nő a freki: PWMperiod = [ (PR2) + 1 ] x 4 x Tosc x (TMR2 prescale value) Innen marad a Tosc és a TMR2 prescale value, mint befolyásoló tényező. Tosc-hoz kellemetlen nyúlni, marad a TMR2 előosztás, ami a T2CON alsó két bitje. 00: 1-es (tehát nincs) osztás, 01: 4-es osztás, 1x: 16-os osztás. A második bit mindenképp 1-ben kell legyen, hiszen az kapcsolja a Timer2-t ON-ba, tehát ha 1-et vagy 16-ot írsz a 4-es érték helyett, azzal kikapcsolod a TMR2-t, persze, hogy nem működik a PWM. Tehát ha a 4-es értéket lecseréled 5-re, akkor 4-es osztást kapsz, ha 6-ra vagy 7-re, akkor 16-ost. Ha ez a két osztás nem megfelelő, marad a fenti képlet alapján a Tosc változtatása. Mindez benne van az adatlapban...
Kérdés az, hogy mért kell csökkenteni. Ha az a cél, hogy a motor csendesen működjön, véleményem szerint a pwm frekvenciát növelni kell, nem csökkenteni, ugyanis a felharmonikus hullámok is zavaróak tudnak lenni. A legutóbbi munkámnál kipróbáltam többféle kristály használatát. A legjobban 20 mhz kristállyal tetszett a motor hangja.
Ebben a felállásban most már én is úgy látom ez nem vezet eredményre. A napokban rámértem szkóppal. A quartz freki amivel lehet vaktában csökkenteni. Vagy az ASM-et módosítíni, vagy INC filet betenni. ( a Timer2 előosztást beállítani) Most nincs időm, de hamarosan nekem is szükségem lesz rá. Ha nem juttok előbbre, majd felteszem ide, mire jutottam. Addig is egy forrás...PWM_info
Sziasztok!
Nemrégen szó volt a PWM körfrekvencia csökkentésének lehetőségéről, parsic-os környezetben. Most nekem is adódott egy projektem amihez szükséges lenne a frekvencia csökkentése. Megpróbáltam az előző hozzászólásokban tárgyalt lehetőségeket, de nem jártam sikerrel. Idézet: „MOVLW 255 BSF STATUS,RP0 ; Bank 1 BCF STATUS,RP1 ; Bank 1 MOVWF PR2 MOVLW 12 BCF STATUS,RP0 ; Bank 0 MOVWF CCP1CON CLRF CCPR1L ; 0 -> f MOVLW 4 MOVWF T2CON” Ha a 255-ös értéket csökkentettem akkor nőtt a frekvencia, de hát nem ez a cél. Ha a 4-es értéket változtattam meg 1 re vagy 16 ra MPLAB fordítás után a PWM nem működött a program többi része viszont igen. Ha visszaírtam 4 re az értéket ismét megfelelően működött minden. A kérdésem az lenne, jutott-e valaki előrébb ez ügyben? Előre is köszönöm!
Nézz szét a konfig (bitek) körül, tuti ott lesz a bibi, mert a HW pwm-nek mindegy, hogy mi adja az órajelet. Ha kaviccsal rendesen megy, akkor intRC-ről is mennie kell!
ok, köszönöm, akkor még próbálkozom, de a 887-el megy a belső oszcillátorral is. 1840 pedig nem elég a láb a külső oszcillátorral
Külső kristállyal pedig a 12F1840 megy! A 16f88 nálam sem okés. Szerk.: de, megy az is, csak rosszul állítottad be a config biteket! Mindhárom működik!
A hozzászólás módosítva: Jan 26, 2015
itt van 3 file. Ugyanaz 3 controllerre, pic16f887-ben működik, de pic12f1840-ben és pic16f88-ban nem. A clock itt belső, de használhatok külsőt is kristállyal, nem változtat a helyzeten, nincs hardware pwm az 1840-ben és a 88-ban
Végre jelentkezett egy olasz a parsic italiatól, küldött egy frissítést, nem a legújabbat, de semmi változás vele
Egy ötlet: a fórumon itt-ott előforduló hőérzékelő ugrálásra. Ha a HW renden van. méretes szűrőkondi a kijelzőre pl 10µF ker, vagy TA...stb A melléklet szerinti SW egy változó adatot késleltet, illetve a változását késlelteti, (ami állítható) ha éppen ugrálna. ez jó lehet hőérzékelőnél esetleg AN bemenetnél, stb...mindkét Parsic alatt megy...Ha nem akarjuk menüből állítani akkor a SET1 változó helyett egy számot írunk pl 10 ekkor 1sec a késleltetés. Képet közlök, hogy a régebbi verzióhoz is lehessen használni.
A hozzászólás módosítva: Jan 22, 2015
a régi parsikkal én is 877a-t használtam, ott működött a pvm.
Köszönöm válaszodat. A spi működik, Pic16f887-ben a pwm is, tehát rendesen tudom vezéreli a bldc motort, szuper minden, De ugyanaz a szoft átírva egy pic16f88-ra nem működik a pwm, Néztem a generált asm filet, a tmr2 nincs meghatározva. A 16f88 hardware jó, más alkalmazással megy, pl ezzel vezérelem az uv levilágítómat, szándékosan rosszul szűrve, zajos környezetben, stabilan megy.
Ha érdekel a pic file, fel tudom tenni holnap, mert ugye nekem a parsic csak az xp-s gépemen megy, amelyet most bonyolult lenne elindítani, de pofon egyszerű, a spi csak ír, nem olvas ez határozza meg a forgási irányt és indítja a motort. A sebesség pedig kitöltésfüggő. A biztonsági és egyéb jellegzetes funkciókat az A4960 gyári beállításokkal tudja. Próbáltam változtatni rajta, kíváncsiságból, de ez a motorral az alap beállításokkal megy a legjobban.
Erre a feladatra bármelyik tok alkalmas gyakorlatilag, amelyikben van HW PWM. Az SPI ha jól értelmezem az SW. én használtam már egy szerre kettőt is. Eddig ahol használtam: 877A, 4550, 8722. A quartz használata fontos lehet. A P4 szerint a 16FXXX 18 lábú processzorok is szóba jöhetnek. A 18F1XXX, csak egy két példány van. Vegyél először dip tokosat és drótozz össze lyukas panelom egy próba áramkört, ha nincs kéznél hasonló átalakítható cucc. Keress egy SPI szolgát... akár próbára. A rutin részeit neked kell összeraknod, lásd Help. és lementeni az elérési ut szerinti helyhez A pwm biztosan megy, eddig nem volt vele gondom. Az SPI-nél én is játszottan egy két órát mire ment...(példa)
felteszem a kérdést kedves Csabi, hogy 14-18 lábas pic-et melyiket használnád amelyikben van spi, és működik a hardware pwm is a Parsicban.
Én erre a feldatra biztosan nem 8 lábú tokot használnék. Pontosan a 12f1840-el játszottam néhány hete. Aztán evés közben jött meg az étvágy, ez is meg az is kéne bele. Aztán elfogyott a láb, meg a modbusz sem akart menni Quartz nélkül... Ekkor döntöttem a már bizonyított 4550 mellett. A fejlesztő, az egy olyan hobbista mint mi (csak éppen más gazdasági környezetben) és nem biztos, hogy naprakészen megold minden igényt. A windows XP-t évek után is módosítgatták, lásd SP-ok.
Ha valakinek, egyedi "félvezető" igénye van jelezze, hátha tudok segíteni. Van HK kapcsolat, még nem sikerült olyant kérnem ami nem volt! (De "1db" 74HCT661G ne kérjetek) A hozzászólás módosítva: Jan 19, 2015
|
Bejelentkezés
Hirdetés |





