Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   732 / 1320
(#) icserny válasza zoox hozzászólására (») Ápr 27, 2010 /
 
Idézet:
„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”
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.
(#) PajaTEC válasza watt hozzászólására (») Ápr 27, 2010 /
 
Köszönöm szépen, sokat segítettél!
(#) Hp41C válasza lidi hozzászólására (») Ápr 27, 2010 /
 
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.
(#) potyo válasza Hp41C hozzászólására (») Ápr 27, 2010 /
 
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...
(#) watt válasza potyo hozzászólására (») Ápr 27, 2010 /
 
Ja.
(#) Hp41C válasza Hp41C hozzászólására (») Ápr 27, 2010 /
 
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ő...
(#) watt válasza Hp41C hozzászólására (») Ápr 27, 2010 /
 
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.
(#) Hp41C válasza watt hozzászólására (») Ápr 27, 2010 /
 
Szia!

L@mex BS170 TO92 30Ft+áfa, BS250 TO92 37 Ft+áfa...

Tényleg hagyjuk, a kapcsolás működik..

(#) zoox válasza icserny hozzászólására (») Ápr 27, 2010 /
 
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)
(#) Hp41C válasza zoox hozzászólására (») Ápr 27, 2010 /
 
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...)
(#) zoox válasza Hp41C hozzászólására (») Ápr 28, 2010 /
 
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)....
(#) potyo válasza zoox hozzászólására (») Ápr 28, 2010 /
 
Rakjál a PIC-re ledeket, aztán azokat gyújtsd ki a FERR, OERR, stb. bitektől függően.
(#) Hp41C válasza zoox hozzászólására (») Ápr 28, 2010 /
 
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ó...
(#) pixels válasza zoox hozzászólására (») Ápr 28, 2010 /
 
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

  1. wait 0 sec
  2. wait 10 ms
  3. fb 02 03 02 03 03 04 03 02 03 02 02 01 00 01 02 00
  4. wait 1 sec


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.
(#) Hp41C válasza pixels hozzászólására (») Ápr 28, 2010 /
 
Szia!

Ugyanez a fájlos megoldás megadható a "Register Insertion" stimulusnál is "Message" Trigger esetén a "Datafile name" -nél ...
(#) pixels válasza Hp41C hozzászólására (») Ápr 28, 2010 /
 
Ezt nem is figyeltem eddig. A megszakítást is jól kezeli ilyenkor?
(#) Hp41C válasza pixels hozzászólására (») Ápr 28, 2010 /
 
Szia!
A megszakítás is jó, de sajnos a vételi is jó mindig... Nem lehet ráfutást csinálni.
(#) zoox hozzászólása Ápr 28, 2010 /
 
Köszi mindenkinek a segitséget
(#) zoox hozzászólása Ápr 28, 2010 /
 
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.
(#) trudnai válasza zoox hozzászólására (») Ápr 29, 2010 /
 
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?
(#) vilmosd válasza trudnai hozzászólására (») Ápr 29, 2010 /
 
Hali
A RCSTA.CREN bit vagy a RCSTA.SPEN bit torlesevel. Maskepp nem torlodik. Lasd doku USART leiras.
Udv Vili
(#) vilmosd válasza vilmosd hozzászólására (») Ápr 29, 2010 /
 
Bocs ez zoox-nak szolt.
(#) Hp41C válasza zoox hozzászólására (») Ápr 29, 2010 /
 
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.
(#) vicsys hozzászólása Ápr 29, 2010 /
 
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!
(#) zoox válasza Hp41C hozzászólására (») Ápr 29, 2010 /
 
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....
(#) Hp41C válasza zoox hozzászólására (») Ápr 29, 2010 /
 
Szia!

Az alábbit használom:

  1. movf            RCSTA,w ; Check for error
  2.                 andlw   (1<<FERR) | (1<<OERR)
  3.                 btfss           STATUS,Z
  4.                 goto            UART_ERR        ; If error not to store char
  5.                 movf            RCREG,w ; Read character
  6.                                 ; Write it to buffer
  7.  
  8. ; ....
  9.                 goto            INT_UART_TX
  10.  
  11. UART_ERR                                ; Receive error, reenable receive
  12.                 bcf             RCSTA,CREN      ; Turn off receiver
  13.                 movf            RCREG,w ; Clear receive interrupt flag, drop character
  14.                 bsf             RCSTA,CREN      ; Turn on  receiver
  15.  
  16. INT_UART_TX
(#) vicsys válasza (Felhasználó 15355) hozzászólására (») Ápr 29, 2010 /
 
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?
(#) vilmosd válasza vicsys hozzászólására (») Ápr 29, 2010 /
 
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
(#) vicsys válasza (Felhasználó 15355) hozzászólására (») Ápr 29, 2010 /
 
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?
(#) potyo válasza vicsys hozzászólására (») Ápr 29, 2010 /
 
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:
  1. if (x<=ertek1) { ... }
  2. else if (x<=ertek2) { ... }
  3. else if (x<=ertek3) { ... }


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.
Következő: »»   732 / 1320
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