Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
Idézet: Ha a FIFO buffert kiolvasod, akkor abban nem marad. Viszont az inicializálás után még érkezhet újabb karakter, ha a hiba egy üzenetcsomag közepén történt. Ezt az esetet hogyan kezeled le? Van valami felismerhető szünet két üzenetcsomag között? Ha igen, akkor hiba után még minden karaktert el kellene dobni, ami a várt szünetnél rövidebb időközzel követi az előző karaktert. „ha valami hibára fut FERR vagy OERR akkor van a nagy probléma mert attól kezdve ez az adat csomagot én el akarom dobni”
Szia!
Működik... Több készülékben használtam fel, mind kifogástalanul működik.... A kondi nem kell, helyette az adó pnp tranzisztor kollektor ellenállása egy (a PC-n kimenet) a kommunikációban nem használt modemvezérlő jel vonalára mehet. (Egy dióda a föld felé jó szolgálatot tehet, ha a kábel nincs csatlakoztatva). Nagyobb sebességnél a negatív táp fele húzás is megoldható egy npn tranzisztorral egy másik modemvezérlő jel vonalának felhasználásával. A jelszint konverzióhoz egy inverter és egy második pnp tranzisztor is kell. A kimeneten a két kollektor közé célszerű egy kis ellenállást is betenni. Idézet: „Nagyobb sebességnél a negatív táp fele húzás is megoldható egy npn tranzisztorral egy másik modemvezérlő jel vonalának felhasználásával. A jelszint konverzióhoz egy inverter és egy második pnp tranzisztor is kell. A kimeneten a két kollektor közé célszerű egy kis ellenállást is betenni.” Ez már nagyjából ott van, mintha egy MAX232-t betenne az ember...
Tovább lehet egyszerűsíteni, ha tranzisztor helyett mosfet-et (bs170 - bs250) használunk, ekkor a 2-3 fet, a két dióda és a 2-3 ellenállás összemérhető helyfoglalású (és olcsóbb), mint a xx232 -ic és a hozzá szükséges 4 db kondenzátor. Persze mindenki tegye bele a belátása szerinti illesztőt. Itt nem az volt a kérdés, hogy mekkora a helyigénye, anyagköltsége az áramkörnek, hanem az, hogy működik-e....
Ha rendelni kell az xx232 -t, napokat lehet rá várni, ez az áramkör az otthoni maradékból megépíthető...
159Ft miatt(helyett) nem fogok nekiállni mókolni, ez tuti. Ráadásul 2 egység van a 232-ben.
Abban egyetértek, hogy mindenki a belátása szerint... szerk: Nem hagyott nyugodni, megnéztem egy bs250 83Ft, a bs170 30Ft. Ebből kettő(2 egységhez) 226Ft és a hecsedliket nem is számoltam, ami kb 100Ft. Erről ennyit... Jé, most látom, itt a HS-en még drágább.
A csomagok között kb 2s az idő de lehet hogy kicsivel több is.
Wait1 btfsc RCSTA,FERR goto e_rror btfsc RCSTA,OERR goto e_rror btfss PIR1,RCIF goto Wait1 bcf PIR1,RCIF ; megszakítás jelzőbit törlése movfw RCREG ;küldött adat olvasása movwf em1 ;adat mentése em1 -be Wait2........8-ig és az e_rror rutinban inicializálom a rs232 portot .(lehet hogy nem igy kellene de most még nincs jobb ötletem.)korábban nem használtam a rs232 portot és nincs tapasztalatom(még)
Szia!
Vételi hiba esetén nem elég a uart egység újrainicializálása, az RCREG regisztert is ki kell olvasni, mert ez törli a RCIF bitet (ami csak olvasható, a bcf PIR1,RCIF nem tudja törölni... Hasonlóan a TXIF sem törölhető csak a TXREG írásával...)
Oké ezt tényleg nagyon benéztem ,szóva az RCREG kiolvasása törli az RCIF-rendben.Ugy tünik hogy mindig OERR hibára futok (csak sejtésem van hogy ez a hiba mert nem tudom a MPLAB SIM ben hogyan lehet szimulálni az RS232 komunikációt)....
Rakjál a PIC-re ledeket, aztán azokat gyújtsd ki a FERR, OERR, stb. bitektől függően.
Szia!
Valamennyire lehet: - Debugger/Settings/Uart1 IO fülön az Enable Uart1 IO és a Output Window beállítása. - Stimulus létrehozása az RCREG -re vonatkozó Register Injection-nal Nem tejes a szimuláció, így a vétel mindig jó, de a programban az adatok kezelése vizsgálható...
Az RCREG-es stimulus helyett van egy hatékonyabb megoldás is, ha fájlból veszi az adatokat. Lehet várakozni és hexadecimális karakterekkel lehet byte-os adatokat beírni, pl. így
Ezt kimentet egy szöveges fájlba, majd az "Uart1 I/O" fülön betöltöd az "Input File" mezőbe. Fájl végén befejeződik az szimulálás, vagy kezdi az elejéről, ha bepipálod a "Rewind Input" -ot.
Szia!
Ugyanez a fájlos megoldás megadható a "Register Insertion" stimulusnál is "Message" Trigger esetén a "Datafile name" -nél ...
Ezt nem is figyeltem eddig. A megszakítást is jól kezeli ilyenkor?
Szia!
A megszakítás is jó, de sajnos a vételi is jó mindig... Nem lehet ráfutást csinálni.
A potyo 5letéből kiindulva rácsaptam 1 karLCD és valóban OERR hibára futok,de ezt a bit-et hogyan lehet törölni?
Mivel csak olvasható bit. Idézet: „(csak sejtésem van hogy ez a hiba mert nem tudom a MPLAB SIM ben hogyan lehet szimulálni az RS232 komunikációt)....” Rateszel egy LED-et egyik labara, es az csak es kizarolag csak akkor gyullad ki, ha OERR hibara futsz... Amugy nem tudtam mostanaban kovetni az esemenyeket, de az az SPBRG hiba ki lett javitva?
Hali
A RCSTA.CREN bit vagy a RCSTA.SPEN bit torlesevel. Maskepp nem torlodik. Lasd doku USART leiras. Udv Vili
Szia!
- Egy szabadon hagyott RxD pic bemenet képes mindenféle hibát okozni. Ellenállással el kell érni, hogy kábel nélkül passzív szinten legyen a bemenet. Az OERR hiba csak az uart tiltásával és újraengedélyezésével törölhető, de ez nem elég, az RCREG-et is ki kell olvasni, mivel ez törli a megszakítás (RCIF) bitet. - Ha az összeköttetés jó, akkor a vett üzenet feldolgozásánál van olyan eset, hogy a feldolgozás ideje összemérhető (netán nagyobb), mint a két karakter vétele között eltelő idő. Javaslatom, hogy a programot alakítsd át megszakításos, fifo-s uart kezelésre: Az uart vétel kérjen megszakítást. Az esetleges hibát a megszakítás kiszolgáló rutinja kezelje le, a hibátlanul vett karaktert írja be egy körforgó fifo-ba (célszerűen 8, 16, stb karakter helyel rendelkezzen). Az adást is célszerű így megoldani. Az adandó karaktereket is egy (másik) körforgó fifo-ba írja a feldolgozás és a beíráskor engedélyezze az adási megszakítást. Az adó, ha kiürül az adási regisztere, megszakítást kér. Az adási megszakítás kiszolgáló rutin feltölti a TXREG-et, ha van adásra váró karakter, ha nincs, letiltja az adási megszakítást. A táviratok közötti időnek akkorának kell lennie, hogy a feldolgozás lefusson, a fifo-ban tárolt karakterek ne szaporodjanak.
Sziasztok
Van egy megoldandó feladatom és véleményeteket kérném ki a kivitelezéssel kapcsolatban. Nagyvonalakban: Egy hőmérő szenzor adatait dolgoznám fel és a változás függvényében vezérelném egy 230V-os ventilátor fordulatszámát. Mivel jó lenne megadni 4-5 referencia pontot nem tudom eldönteni, hogy milyen szerkezetet alakítsak ki. (CCS C-ben). Elsőre egy IF vagy Switch-case jutott eszembe, de biztosan létezik elegáncsosabb megoldás is. Mivel float változókkal dolgozom, nem szeretnék 5 különböző változó értéket kezelni, tárolni. (Spórolnék a hellyel) A másik, a venti vezérlése. Addig oké, hogy PWM jellel mondjuk SSR-t hajtok meg, de hogyan oldjam meg a nullátmenet szinkronizálását? A fázishasítás szerintem elég lenne egy 50-70W-os motor elindításához, szabályzásához. Szeretném ha bombáznátok, jobbnál jobb ötletekkel. Ha valaki épített hasonlót, szívesen fogadnám a méretezéssel kapcsolatos (és egyéb) instrukciókat, tapasztalatokat. Előre is köszi!
Szia.
Az adat csomag 8 byt hosszu és az adat csomagok között minimum 2-3s van.A rendszer tökéletesen müködik (az RFID infókat tudom fogadni)mindaddig amig valamiért hibára futok OERR és itt akadok el,hogy hogyan töröljem ezt a bit-et.(vagy ujra inicializálni a USARTot) Próbálkoztam hiba esetén 1 movfw RCREG clrw movfw RCREG clrw RCIF törölve(elvileg) (ha jól láttam a FIFO 2 byt-ot tud tárolni) nem a legszebb de hirtelen ez jutott az eszemb 2 bcf RCSTA,SPEN bcf RCSTA,CREN USART tiltás 3 bsf RCSTA,SPEN bsf RCSTA,CREN ujból engedélyezve az az USART A progi most nem csinál mást csak a USART portot figyeli és ha jön adat eltárolja (kiolvassa a RCREG-ből)és egy" tömbe"rakja ami 8 szóhosszuságu. Akkor van a probléma ha valamiért OERR-re fut és attól kezdve nem tudok mit kezdeni,mivel figyelem az OERR bitet hogy ha hiba lép fel dobjam a fullos csomagot. Akár mit teszek az OERR bit mindig 1 marad Csak akkor kell a csomag ha nincs hiba(azaz nem tudom a USARTot alapállapotba állitani,hogy tudja fogadni az ujabb csomagot. Csak RXkell mivel ez 1 kódzár és ha nem jó vagy hibás a bejövö kód(csomag) akkor el lehet dobni a csomagot,ugy is megismétlődik az olvasás 2-3 s mulva stb....
Szia!
Az alábbit használom:
Nem fűtés lenne, hanem ventilátor fordulatszám szabályzó. Miért nem kell a PWM-nél vagy a fázishasításnál a nullátmenetet figyelnem? Nem ahhoz kell szinkronizálnom a bekapcsolás időpontját? Ha durván pwm-mel nyitogatok egy ssr-t akkor az minden lesz, csak teljesítményszabályzó nem.
Miért kell nekem külön trafós leágazás meg graetz meg optó? Nem értem. Részleteznéd egy kicsit?
Hali
Kerdes hogy milyen motor van a ventillatorban? Ha arnyekolt polusu, vagy segedfazisos az nem nagyon szeresse a fazishasitasos szabalyzast. Gyorsan fustot ereget. Csak az univerzalis (kefes) motorokat lehet szabalyozni fazishasitasos modszerrel. Udv Vili
Nos, én arra gondoltam, hogy egy potival leosztom a tápfeszt (+5V) biztosító trafó+graetz feszültségét és ezzel a lüktető jellel nyitogatok egy tranyát. A tranya kollektora indítja a megszakítást amiben adott kimenetet, egy változó értékével nyitva tartok adott ideig (majd L szinttel zárom a kimenetet) Ezen a kimeneten lenne az SSR. Így mindig nulláról indulok és a hálózati szinusz púpjának csak egy részén lenne teljesítmény leadás. Ekkor nincs szükség pwm-re, de továbbra is marad a szinkronizálás. Én ezt a szinkronizálást szeretném megúszni. Nincs erre valamilyen egyszerű teljesítmény elem? Mondjuk amit simán lehetne pwm-mel meghajtani?
Idézet: „de hogyan oldjam meg a nullátmenet szinkronizálását?” Kell-e galvanikus leválasztás? Ha nem, akkor két soros 470k ellenálláson keresztül rávezeted a 230V-ot a PIC egy külső megszakítást okozó lábára, PIC-nél megfogod még egy 4V7 vagy 5V1 zenerrel és már megis van a szinkronizáláshoz a bejövő jel. Ha kell galvanikus leválasztás, akkor hálózati oldalon soros kondenzátoros opto ledjét táplálod, kontroller oldalon meg szintén egy ilyen megszakításos lábra beküldöd a jelet, és adott sietéssel (mondjuk ezt szkóppal legjobb megnézni) kapod a PIC-en a megszakítást a hálózati nullátmenethez képest, aztán ehhez szinkronizálsz. Vagy esetleg valami mini trafó, annak a szekunderéről szintén az ellenállás-zener párossal mehet. Firmwarerel kapcsolatban nem teljesen értem a referencia dolgot. Van 4-5 féle hőmérsékleti tartomány, amiben ha belül van, akkor adott fordulattal kell hajtani a motort? Erre legjobb valami ilyesmi:
Mellesleg ha spórolni akarsz a hellyel, akkor ne használj float-ot. Egyébként se hallottam még olyan feladatról kontrolleres környezetben, amihez nélkülözhetetlen a float tipus. A te feladatod meg (ha jól értem) aztán pláne nem igényli a float-ot. |
Bejelentkezés
Hirdetés |