Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   1091 / 1319
(#) ciw válasza nem hozzászólására (») Aug 30, 2012 / 1
 
Vagy voltak régen azok a dip tokos relék 3v-os tekercsel, azzal is lehetne kapcsolni az osztót egy pillanatra.
(#) nem válasza ciw hozzászólására (») Aug 30, 2012 /
 
Hát igen, mondjuk gondoltam kijelzem hogy "battery low, cserélni kéne".

De közben rátaláltam egy olyan fantasztikumra, amit DC/DC step-up konverternek hívnak és azon gondolkodom, mi lenne, ha ceruzaelemről menne a dolog.

És akkor elvileg a HE-s cikk szerint annak van olyanja (max856-ról beszélek), hogy szól az egyik lábán, ha kisebb a feszültség, mint kellene. Zseniális.
(#) nem válasza _vl_ hozzászólására (») Aug 30, 2012 /
 
Alakul a kép!

Bár, mint az előbb írtam ciw-nek írt válaszomban, lehet, hogy más irányba indulok, de ezt a FETes dolgot akkor is mindenképpen tudni szerettem volna, mert érdekelt és ki is fogom próbálni!

Köszönöm!
(#) nem válasza ciw hozzászólására (») Aug 30, 2012 /
 
Igen, ez sem egy hülye ötlet...
(#) vilmosd válasza ciw hozzászólására (») Aug 30, 2012 /
 
Ilyen megoldast ajanlottam a kolleganak. Azert jo igy elhelyezni, mert egyreszt csokkenti a kikapcsolaskor keletkezo ivet, a masik pedig, amikor az egocseres villanyreszelo kollega csereli a magneskapcsolot ugyis csak eldobna ezt a vackot, "mert minek ez a sz.r oda" . Utana mehetsz legelni mi okozza a zavart. Ugyanez a modszer hasznalatos a TRIAC aramkoroknel, ahol a dV/dT csokkentesere hasznalatos. Magyarul snubber.
De ennek a temanak keressunk valami mas topikot, mert a modulator uraktol kapunk. Igaz van benne PIC, ha az vezerli a relet.
(#) watt hozzászólása Aug 30, 2012 /
 
Át kéne nevezni a topicot...
(#) nem válasza watt hozzászólására (») Aug 30, 2012 /
 
Jogos, elnézést, abbafejezem a FET-jeimet, csak a PIC AD-láb miatt indítottam itt.
(#) Panzer576 válasza watt hozzászólására (») Aug 30, 2012 /
 
Helló!
A nyáktervezés alapjaival igazad van, nem rég óta vagyok a szakmában és SOOOOKAT kell még tanulnom!
El tudod küldeni a te áramköröd kapcsrajzát, hogy megpillanthassam? Mondjuk képként? Ha nem szeretnéd publikálni küldheted ide is: panzer576@citromail.hu
Vagy esetleg van erről valami leírás, mármint a nyáktervezés alapjai vagy ilyesmi, mert régóta keresek ilyet, de sajnos sehol sem találok!
Köszi:
Panzer
[OFF]
(#) Attila86 hozzászólása Aug 31, 2012 /
 
Tudtok nekem mutatni egy működő 24 bit bináris -> 8 bit decimális átalakító rutint assembly-ben? Vagy meg tudjátok mondani hogy ebben mely regiszterekbe kell bemásolnom az átalakítandó 24 bites számot?
  1. BINDEC:  CALLCLRDIG
  2.         MOVLW24
  3.         MOVWFCOUNTER1
  4.         GOTOSHIFT1
  5. ADJBCD:  MOVLWdigit1
  6.         MOVWFFSR2
  7.         MOVLW7
  8.         MOVWFCOUNTER2
  9.         MOVLW3
  10. ADJLOOP: ADDWFINDF2,F
  11.         BTFSSINDF2,3
  12.         SUBWFINDF2,F
  13.         INCFFSR2,F
  14.         DECFSZCOUNTER2,F
  15.         GOTOADJLOOP
  16. SHIFT1:  CALLSLCNT
  17. SLDEC:   MOVLWdigit1
  18.         MOVWFFSR2
  19.         MOVLW8
  20.         MOVWFCOUNTER2
  21. SLDLOOP:
  22.         RLCFINDF2,F
  23.         BTFSCINDF2,4
  24.         BSFSTATUS,C
  25.         BCFINDF2,4
  26.         INCFFSR2,F
  27.         DECFSZCOUNTER2,F
  28.         GOTOSLDLOOP
  29.         DECFSZCOUNTER1,F
  30.         GOTOADJBCD
  31.         RETURN
  32. SLCNT:   RLCFCOUNT0,F
  33.         RLCFCOUNT1,F
  34.         RLCFCOUNT2,F
  35.         RETURN
  36. CLRDIG:  CLRFdigit1
  37.         CLRFdigit2
  38.         CLRFdigit3
  39.         CLRFdigit4
  40.         CLRFdigit5
  41.         CLRFdigit6
  42.         CLRFdigit7
  43.         CLRFdigit8
  44.         RETURN
(#) trudnai válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Ugy erted 24 bites pakolt BCD-bol 8 bites binarisba?

Az nem minden esetben fog neked elferni (999 -et nehez 8 biten tarolni...), igy javaslom 16 bitesre alakitsd, es mikor megvan ellenorizd, hogy belefer-e 8 bitbe. Ha igen akkor jo, ha nem akkor hibakezeles...

Packed BCD to 16 bit binary conversion

Arra az esetre ha ugy ertetted, hogy 24 bites binarisbol szeretnel 8 szamjegyes pakolt BCD-t eloallitani:

Binary to BCD unpacked, 24 bit to 4 digits
(#) Attila86 válasza trudnai hozzászólására (») Aug 31, 2012 /
 
Nem, elírtam bocsi! Úgy értem hogy 24 bites binárisból 8 digitet kapjak meg 8 bájtban, BCD-ben.
(#) Attila86 hozzászólása Aug 31, 2012 /
 
Szenvedek ezekkel az átalakító rutinokkal. Eredetileg volt nekem egy csak most átültettem egy másik programba a szubrutint és itt nem akar működni. Próbálok rájönni hogy miért nem, egyenlőre még nem jöttem rá. Van benne néhány ehhez hasonló sor:
Idézet:
„rlcf TEMP,F,A”

Itt mi történik? A TEMP nevű regisztert forgatja balra, de mi az F és az A? Ott 0-át vagy 1-et szoktam látni, nem betűket. De sejtem hogy az F azt jeleni hogy a balra forgatás eredményét magába a TEMP regiszterbe írja vissza és nem a W-be, ugye? Na és mi az az A-betű?
(#) Attila86 hozzászólása Aug 31, 2012 /
 
Na most adom fel. Ma egész nap ezzel szenvedek de nem jövök rá hogy mi a hiba:
  1. KONV_24bit_8digit
  2.   ; Convert 24 bit binary number
  3.   ; in TEMP+7:TEMP+6:TEMP+5
  4.   ; to a 32 bit packed BCD number
  5.   ; in TEMP+3:TEMP+2:TEMP+1:TEMP
  6.  
  7. ; 24 bit binary to BCD converter
  8. rcall   ClearTemps
  9. movwf   PRODL
  10.    
  11. bcfSTATUS,C,A
  12. braBIN2BC2
  13.    
  14. BIN2L:
  15. lfsrFSR2,TEMP
  16. BCDADJ:
  17. movlw0x33
  18. addwfINDF2,F,A
  19. btfscINDF2,3,A
  20. andlw0xF0
  21. btfscINDF2,7,A
  22. andlw0x0F
  23. subwfPOSTINC2,F,A
  24. btfssFSR2L,2,A
  25. braBCDADJ
  26.    
  27. BIN2BC2:
  28. rlcfTEMP+5,F,A    ; Shift Binary bytes
  29. rlcfTEMP+6,F,A
  30. rlcfTEMP+7,F,A
  31.    
  32. rlcfTEMP,F,A      ; Shift BCD    bytes
  33. rlcfTEMP+1,F,A
  34. rlcfTEMP+2,F,A
  35. rlcfTEMP+3,F,A
  36.    
  37. decfszPRODL,F,A     ; Loop for 24 times
  38. braBIN2L
  39.  
  40. swapfTEMP+3, w
  41. andlw0x0F
  42. movwfdigit8
  43. movfTEMP+3, w
  44. andlw0x0F
  45. bankseldigit7
  46. movwfdigit7
  47.  
  48.  swapfTEMP+2, w
  49. andlw0x0F
  50. movwfdigit6
  51. movfTEMP+2, w
  52. andlw0x0F
  53. movwfdigit5
  54.  
  55. swapfTEMP+1, w
  56. andlw0x0F
  57. movwfdigit4
  58. movfTEMP+1, w
  59. andlw0x0F
  60. movwfdigit3
  61.  
  62. swapfTEMP, w
  63. andlw0x0F
  64. movwfdigit2
  65. movfTEMP, w
  66. andlw0x0F
  67. movwfdigit1
  68.  
  69. RETURN
  70.    
  71. ClearTemps:
  72. clrfTEMP,A
  73. clrfTEMP+1,A
  74. clrfTEMP+2,A
  75. clrfTEMP+3,A
  76. retlw   .24

Ez a 24 bit bináris -> 8 digit BCD átalakító szubrutin eddig működött a PIC-es panelmérő I és II áramköreimben. Most a panelmérő III fejlesztésekor valamiért nem megy. Bankváltás vagy lapszél problémája lehet esetleg de amennyire tudtam ezeket letesztelgettem és nem találtam hibát. Szóval nem tudom... Áttettem a szubrutint a program egy jóval távolabbi részére és ott sem megy és Watch ablakban azt is végignézegettem hogy ténylegesen változnak-e a regisztertartalmak. Nem tűnt fel semmi hiba pedig biztos hogy van mert a szubrutinból értelmetlen értékekkel tér vissza. A digit1-digit8 regiszterekben decimálisan rendre tizenvalahányas értékek vannak, pedig ugye maximum 9 lehetne merthogy decimálissá alakít elvileg.
(A program végén a "kicsomagolást" én írtam már hozzá, de eddig az is működött.)

Lehet írok magamnak egy saját kivonós konvertálást, ami kivonogat a számból tízmilliót, aztán milliókat, százezreket, tízezreket stb...
Csak hát mégiscsak egyszerűbb lenne ebbe életet lehelni ha már eddig működött.
(#) Attila86 válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Hmm, lehet esetleg hogy az a baj, hogy a TEMP regiszterek nem ott kezdődnek a memóriában ahol kellene lenniük? (Nálam 0x100-tól vannak.)
(#) Attila86 válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Igen, áttettem a 0x000-ra és így működik. Mit kellene benne átírni hogy menjen a 0x100 címről?
(#) Hp41C válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Szia!
Ebbe a csabdába nem most lépsz bele először...
E sor "24. btfssFSR2L,2,A" helyett kell az utolsó rekesz utáni címére komparálni.

Egyébként, ha a TEMP címe binárisan 00 -ra végződdik, jól működik módosítás nélkül.
(#) potyo válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Az A betű azt jelenti, hogy az ACCESS memóriaterületen értelmezendő a TEMP címe, vagyis ha a TEMP alsó bájtja 0x7F vagy kisebb, akkor az a nullás memóriabank alsó felére mutat, ha viszont nagyobb mint 0x7F, akkor az SFR zónára mutat. Tehát nálad hiába volt a TEMP változód a 0x100 címen, akkor is az RLCF TEMP, F, A azt mutatta, hogy RLCF 0x00, F, A, ami gyakorlatilag a 0x000 címen levő változót forgatta egy hellyel balra. Neked ezesetben be kell állítanod a BSR regisztert úgy, hogy az egyes memóriabankra mutasson, és RLCF TEMP, F, BANKED utasítást kell használnod, hogy az utasításban szereplő egybájtos címhez hozzávegye a BSR-ben található beállítást és így együtt mutasson a memóriaterületre. Vagy lehet, hogy BANKED helyett elég csak egy B betű is. Szimulátorban próbálgasd és meglátod, hogy működik a dolog.
(#) Attila86 válasza Hp41C hozzászólására (») Aug 31, 2012 /
 
Igen rémlett, vissza is olvastam. De akkor sem derült ki hogy hogyan lehet áttenni máshová a TEMP-eket.
Idézet:
„E sor "24. btfssFSR2L,2,A" helyett kell az utolsó rekesz utáni címére komparálni.”

Melyik az utolsó rekesz? A TEMP+7 címe azaz a 0x007, tehát a 0x008-ra kellene komparálni? Hogyan?
(#) Hp41C válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Idézet:
„E sor "24. btfssFSR2L,2,A" helyett kell az utolsó rekesz utáni címére komparálni.”

Ejnye... Ha b'xxxxxx00' a TEMP címe és a fenti sor vizsgálata jókor lép ki, akkor TEMP3+1 címének elérésekor kell kilépni a hurokból. Azaz a 32 bitnek megfelelően 4 byte -ot kell csak korrigálni...
Potyo bankolási észrevételét is vedd figyelembe.
(#) Attila86 válasza Hp41C hozzászólására (») Aug 31, 2012 /
 
Hát én ezt most nem értem. De nem baj, átraktam a 0x000 címre és örülök hogy most jó.
(#) compaqamplifier válasza nem hozzászólására (») Aug 31, 2012 /
 
Inkább Mosfet mint tranyó...
(#) Hp41C válasza Attila86 hozzászólására (») Aug 31, 2012 /
 
Szia!
Mit nem értesz?
- A komment is sugalja:
Idézet:
„; Convert 24 bit binary number
; in TEMP+7:TEMP+6:TEMP+5
; to a 32 bit packed BCD number
; in TEMP+3:TEMP+2:TEMP+1:TEMP
; 24 bit binary to BCD converter”

Az átalakítandó szám a TEMP+7:TEMP+6:TEMP+5 rekeszekben van, a 32 bites BCD eredmény pedig a TEMP+3:TEMP+2:TEMP+1:TEMP rekeszekbe kerül. Minden léptetés után a BCD értéket korrigálni kell, ez csak a TEMP+3:TEMP+2:TEMP+1:TEMP rekeszeket érint. Ha a TEMP címe b'xxxxxx00', akkor a btfss FSR2L,2,ACCESS a b'xxxxx100' cím elérésekor lép ki, azaz ha a TEMP címe + 4 értéket éri el.
Ha nekem kell elmagyaráznom Neked a programod működését, miért nem teszed szabaddá a forrását? Ha még az írója sem érti???
(#) Attila86 válasza Hp41C hozzászólására (») Aug 31, 2012 /
 
Idézet:
„Ha a TEMP címe b'xxxxxx00', akkor a btfss FSR2L,2,ACCESS a b'xxxxx100' cím elérésekor lép ki, azaz ha a TEMP címe + 4 értéket éri el.”

Na ezt már értem, köszi!
Idézet:
„Ha nekem kell elmagyaráznom Neked a programod működését, miért nem teszed szabaddá a forrását? Ha még az írója sem érti???”

Nem én írtam ezt a szubrutint hanem Te. Legalábbis anno te mutattad nekem. Ezt az egyet és a 32 bites osztásrutint lőttem csak a netről, a többit írtam én. Azokat értem is.
(#) Hp41C válasza Attila86 hozzászólására (») Szept 1, 2012 /
 
Sajnos nem az enyém a babér ezekért a rutinokért, de amikor átírtam 16F -ről 18F -re, kibővítettem 48 bitre, kénytelen voltam végigkövetni.
(#) cassis hozzászólása Szept 2, 2012 /
 
Írt már valaki PIC -el ModBus ra programot?
Én most ebben gondolkodom, és annyi lenne a dilemmám, hogy a ModBus protokollt felépítő 11 bites karaktereket elő tudom -e állítani a PIC UART moduljával.
Mivel a leírások alapján nem látok különbséget, így gyanítom, hogy igen. Viszont a neten bogarászva sehol nem találtam erre utaló forrást.
(A ModBus karakterében ugyanúgy használják a Start - Stop - Paritás biteket mint az RS232 -ben)
(#) _vl_ válasza cassis hozzászólására (») Szept 2, 2012 /
 
Ezek 9-bites karakterek. A Start és a Stop nem része az adatnak, azokat nem szokás számolni. Emlékeim szerint mindegyik PIC UART tud 9-bites adatot küldeni-fogadni. Viszont a modernebb PIC-ekben levők (pl. PIC32 széria tuti) HW-ből előállítják/ellenőrzik a paritásbitet, azzal sokkal kényelmesebben programozható ez.
(#) vilmosd válasza cassis hozzászólására (») Szept 2, 2012 / 1
 
Ez mitol lenne 11 bites? szabvany 8 bites adatatvitel. Egy byte (8 bit ) atvitele tortenik az altalaban hasznalt sorosatvitelnel. Persze a szabvany szerint 5, 6, 7 es 8 bites atvitel lehetseges. Az uzenet persze meg tartalmazza a start/stop boteket, valamint ha hasznalatos a rendszeren, a paritasbitet is. Termeszetesen a PIC USART hasznalhato erre a feladatra, viszont a frame csomagokat neked kell lezongorazni a PIC SW irasakor (Addr, Func, Data, CRC). Persze meg ugye csinalni kell egy RS485 illeszto HW-t is, hogy a szabvany Modbus-hoz tudjal csatlakozni. CCS C-ben van ra mintapelda is.
(#) cassis hozzászólása Szept 2, 2012 /
 
Köszi a válaszokat!
Lehet félreérthetően fogalmaztam, de 8 bites adatról van szó természetesen, csak a "maradék" 3 bit miatt neveztem a fizikai szinten 11 bitesnek.
Tudom, hogy a Start-Stop-Par sem számolódik bele a CRC be, és hogy a protokoll Addr, Func, Data, CRC frame SW -t nekem kell megírnom (RTU mode). A CRC programot már meg is írtam assemblyben, ez rendben működik a teszt byte -okkal. Az RS 485 illesztéshez MAX 485 öt vagy SN 75176 gondoltam.
Akkor ez egy sima PIC USART -al előaállítható karakter, ás a Start bitje Low, a Stop bitje High, mint az RS 232 nél?
Ha jól értem a ModBus működését már csak arra kell figyelni, hogy akkor kapok új framet, ha a vonalon min. 3,5 karakternyi hallgatás után (9600 nál ez 4 msec) a saját címemmel a mester megszólít?
A hozzászólás módosítva: Szept 2, 2012
(#) vilmosd válasza cassis hozzászólására (») Szept 2, 2012 / 1
 
Idézet:
„csak a "maradék" 3 bit miatt neveztem a fizikai szinten 11 bitesnek.”
Lehetoleg a szabvany elnevezest hasznaljuk, mert a masik csak nez mi az a 11 bites adatatvitel.
Idézet:
„Akkor ez egy sima PIC USART -al előaállítható karakter”
Persze, hiszen a Modbuszosok sem talatak fel a melegvizet, csak alkalmaztak a regi RS232C szabvanyt, es hozza a RS485 vonalillesztest. A Frame termeszetesen egy kotott keretrendszer, aminek az eloirasait illik betartani, mert maskepp nem tudsz kommunikalni a tobbi keszulekkel.
(#) cassis hozzászólása Szept 2, 2012 /
 
Köszi, sokat segítettél bizonytalanságomban
Egyébként igazad van a 8 - 11 bites dologgal kapcsolatosan.
Következő: »»   1091 / 1319
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