Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   376 / 1210
(#) kissi válasza icserny hozzászólására (») Márc 2, 2013 /
 
Idézet:
„LCD karaktergenerátora válogatja.”
Olyannyira, hogy van amelyikben benne sincs, mert a felső 128 kódnak megfelelő kép már egyedi karaktereket tartalmaz ( pl. kínai vagy japán írásjelek egy része ) !
Steve
(#) tom75 válasza icserny hozzászólására (») Márc 2, 2013 /
 
Köszi
(#) kokesz185743 hozzászólása Márc 2, 2013 /
 
Valaki tud segíteni abban, hogy az MPLAB-ban hogy lehet megnézni, hogy pickit 2-vel milyen processzorokat lehet égetni?
(#) tom75 válasza kokesz185743 hozzászólására (») Márc 3, 2013 /
 
Ne az mplab-ba nézd meg hanem a gyári doksiba, vagy a saját programjába.
De különben szerintem majdnem mindegyik pic-et.
(#) tom75 válasza vicsys hozzászólására (») Márc 3, 2013 /
 
Köszi
rákerestem a kulcsszóra, de amit találtam azt be írtam pic programba de nem változott a karakter.
Vagy rosszul csináltam ami nincs kizárva vagy nem jó kódot írtam be.
C-és assembler d között van különbség ilyen szempontból?
(#) nedudgi válasza kokesz185743 hozzászólására (») Márc 3, 2013 /
 
(#) tom75 válasza (Felhasználó 15355) hozzászólására (») Márc 3, 2013 /
 
Kód ami nekem kell benne van a táblázatban, de nem az jelenik meg aminek kéne.
Omega helyett micro. micro helyet azt meg nem is tudom valami értelmezhetetlen,
  1. ;==========================
  2.        
  3. Table   addwf   PCL,F
  4. omega   dt      b'00000'       
  5.                 dt      b'01110'
  6.                 dt      b'10001'
  7.                 dt      b'10001'
  8.                 dt      b'10001'
  9.                 dt      b'01010'
  10.                 dt      b'11011'
  11.                 dt      b'00000'
  12.        
  13. mu              dt      b'00000'
  14.                 dt      b'00000'
  15.                 dt      b'10010'
  16.                 dt      b'10010'
  17.                 dt      b'10010'
  18.                 dt      b'11110'
  19.                 dt      b'10001'
  20.                 dt      b'10000'


Program ezt a részét változtattam, esetleg máshol is kell?
(#) kissi válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Képzelj el egy 5*7-es mátrixot, ahova '1'-et írsz ott pötty van, ahova '0'-t ott nincs és ezt látod (rajzold fel egy kockás papírra az 5*7 pontot és ahol az omega mintáidban soronként '1'-es van, oda tégy pontot, ezt fogja kirajzolni! ) !
Steve!
(#) tom75 válasza kissi hozzászólására (») Márc 3, 2013 /
 
Ami a programba van és az ki rajzolom papírra akkor jó az omega és mikrojel is de az lcdn nem jó vagyis mikro jel az van csak nem jó helyen. Mi okozhat ilyet?

Előzmény: ez a progi p16f873-as ra íródott én szerettem volna átírni p16f883-ra, de mivel assemblyben nem tudok programozni ezért itt kérdeztem, hogy meglehet e csinálni egyik fórum társunk segítet átírni részben már működik a program, de a mértékegységek nem jól jelennek meg.
(#) tom75 válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Becsatolt program részletben a omega rész és a mu rész felcserélődve jelenik meg az lcd ennek mi lehet az oka?
(#) kissi válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Nem tudom, hogy mi az oka, de akkor cseréld meg ( elöl legyen a u, később az omega definíciója! ), ha nem valami hibás működés, hanem fordított kiolvasási logika, akkor így meg kell oldódnia!
Steve
(#) tom75 válasza kissi hozzászólására (») Márc 3, 2013 /
 
Köszi, de nem biztos, hogy ez lesz a megoldás mert még valami nem kerek a programban
A hozzászólás módosítva: Márc 3, 2013
(#) mohapower válasza bbalazs_ hozzászólására (») Márc 3, 2013 /
 
Köszi szépen a választ! Közbe már nekem is eszembe jutott ez. csatoltam egy képet arról, hogy hogyan gondoltam. remélem helyes. (a műverősítőn 10 és 90k-s ellenállások lennének).

arammeres.jpg
    
(#) mohapower válasza kly hozzászólására (») Márc 3, 2013 /
 
Köszi a választ!
Én is gondoltam hall elemes árammérésre, de a max. áramom 1.5A, és erre nem nagyon találtam megfelelőt.
(#) tom75 válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Meg cseréltem a két értéket, de nem oldotta meg a problémát.
Omega helyet valami értelmezhetetlen karakter jelent meg.
(#) kissi válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Az előbb a u-re írtad az értelmezhetetlent, ezek szerint csak megcserélődtek !
Ha ez értelmezhetetlen, akkor a mintát kell valahogy megjavítani szerintem ( bár ránézésre elfogadhatónak tűnik, de javítsd ki egy vonalra és meglátod, hogy jól írja-e ki és utána annak megfelelően folytasd a hibakeresést )!
Steve
(#) tom75 válasza kissi hozzászólására (») Márc 3, 2013 /
 
Csak az a baj, hogy ez a kisebb probléma nem mér ellenállást a műszer és tuti program hiba csak gondoltam ezt magam is megtudom oldani.
(#) tom75 hozzászólása Márc 3, 2013 /
 
ADC_Value = ADC_Read(2)

Fenti kód részlet egy programból azt szeretném kérdezni, hogy a"ADC_READ" tartalmát lehet e egy gombbal változtatni?

Beállításhoz, hogy ne kelljen potméterrel állítani a pontos értékre?
(#) tom75 hozzászólása Márc 3, 2013 /
 
Az alábbi programot valaki letudná fordítani hex file-ba?
Mert az Mplab egy csomó hibát ad és én nem tudok assemblert.

  1. ;
  2. ; Capacitance meter and ESR electrolytic capacitors
  3. ; C / ESR meter
  4. ; Author Hinze Oleg
  5. , Version 1.01
  6. ; Date 20/04/2007
  7. ;
  8. ; The program used snippets meter FLC
  9. ; Alexander Buevskogo, Minsk, Belarus
  10.  
  11. ; PIN ASSIGNMENT CONTROLLER PIC16F873A
  12. ;************************************************* **************************************
  13. ;* FOOT * * FUNCTION NAME
  14. ;************************************************* **************************************
  15.  
  16. ;, 1 * MCLR / Vpp * Reset
  17. ;2 * RA0/AN0 * output control (gain = 330)
  18. ;3 * RA1/AN1 * output control (gain = 33)
  19. ;4 * RA2/AN2/Vref- * KH. Set coeff. / Set "0"
  20. ;, 5 * RA3/AN3/Vref + *
  21. ;, 6 * RA4/T0CKI * KH. + / Test
  22. ;, 7 * RA5/AN4/SS * KH .-
  23. ;, 8 * Vss * GND
  24. ;, 9 * OSC1/CLKIN * Quartz 20 MHz
  25. ;, 10 * OSC2/CLKOUT * Quartz 20 MHz
  26. ;, 11 * RC0/T1OSO/T1CKI * Yield Cl, I = 10mA
  27. ;, 12 * RC1/T1OSI/CCP2 * Rank Cx
  28. ;: 13 * RC2/CCP1 * Comparator top-level charging Cx
  29. ,: 14 * RC3/SCK/SCL * Rin. "-" On the ground
  30.  
  31. ,, 15 * RC4/SDI/SDA * Rin. "+" On Cx
  32. ;, 16 * RC5/SDO * Rin. "-" On Cx
  33. ;: 17 * RC6/TX/CK * Comparator lower charge level Cx
  34. ,, 18 * RC7/RX/DT *
  35. ;: 19 * Vss * +5 V
  36. ;, 20 * Vdd * GND
  37. ;: 21 * RB0/INT * LCD_D4
  38. ;: 22 * RB1 * LCD_D5
  39. ;: 23 * RB2 * LCD_D6
  40. ;: 24 * RB3/PGM * LCD_D7
  41. ;, 25 * RB4 * LCD_R / S
  42. ;: 26 * RB5 * LCD_E
  43. ;: 27 * RB6/PGC *
  44. ;, 28 * RB7/PGD *
  45.  
  46. ;************************************************* ***************************************
  47.  
  48. Port_A_Config equ 0xFF
  49. ; Port A bit equates
  50. Kn_Set equ 2
  51. Kn_Plus equ 4
  52. Kn_Minus equ 5
  53.  
  54. Port_B_Config equ b'11000000 '
  55.  
  56. Port_C_Config equ b'11000100 '
  57. ; Port C bit equates
  58. Cap_Charge equ 0
  59. Cap_Discharge equ 1
  60. Comp_Up equ 2
  61. In_N_Gnd equ 3
  62. In_P_Cx equ 4
  63. In_N_Cx equ 5
  64. Comp_Low equ 6
  65.  
  66. ESR_ready equ b'00110011 '; incl. discharge, "+" and "-" control at the Cx
  67. ESR_start equ b'00110000 '; incl. charge, "+" and "-" control at the Cx
  68. Cap_ready equ b'00011011 '; incl. razdyad "-" control on the ground, "+" on Cx
  69. Cap_start equ b'00011000 '; incl. charge, "-" control on the ground, "+" on Cx
  70. Cap_start2 equ b'00110000 '; incl. charge, "-" control at Cx, "+" on Cx
  71.  
  72. Max_Count equ .70; the maximum number (1 byte, not more than 256) when TMR0 overflows account
  73. ; Step account - 0.2 ms, 65536 * 0.2 = 13107.2 ms - one overflow
  74. , Or when I = 10mA 15 counts / µF 65536/15 = 4369 microfarads - one overflow
  75. ; Let Cx = max 150000mkF, 150000/4369 = 34
  76. ; Given time charge to the lower boundary of the constant need to redouble
  77. ;************************************************* ***************************************
  78.  
  79.  
  80.          list      p=PIC16F883
  81.      #include  P16F883.inc ;    ; 20.000 MHz
  82.         __CONFIG _CONFIG1, _CP_OFF & _BOR_OFF & _HS_OSC & _WRT_OFF & _WDT_OFF & _PWRTE_ON & _CPD_OFF & _LVP_OFF
  83.         __CONFIG _CONFIG2, _WRT_OFF & _BOR40V
  84.        
  85.        
  86. ;list p = PIC16F873a
  87.    ;  # Include P16F873a.inc;; 20.000 MHz
  88. ;__CONFIG _CP_OFF & _BODEN_OFF & _HS_OSC & _WRT_OFF & _WDT_OFF & _PWRTE_ON & _DEBUG_OFF & _CPD_OFF & _LVP_OFF
  89.  
  90. ; # Define _BAT PORTA, 1, 0 - low bat
  91.  
  92. # Define _RS PORTB, 4
  93. # Define _E PORTB, 5
  94.  
  95.  
  96. CBLOCK 0x35; 0x20-0x34 for FLOATING POINT LIBRARY
  97. ; Data blocks
  98. W_TEMP; preserve the context of interrupted
  99. STATUS_TEMP
  100. PCLATH_TEMP
  101.  
  102.  
  103. Dly0; Stores 3 bytes of data for the delay count
  104. Dly1; Dly0 is the least significant byte
  105. Dly2; while Dly3 is the most significant byte
  106.  
  107. ; Temp
  108. Temp1
  109. Temp2
  110. Temp3
  111. Temp4
  112.  
  113. Count1
  114. Count2
  115.  
  116. T0
  117.  
  118.  
  119. ; Data blocks
  120. T2; High Byte
  121. T3
  122. T4
  123. T5; Byte
  124.  
  125. AX; High Byte
  126. A0
  127. A1
  128. A2; Byte
  129.  
  130. A3
  131. A4
  132. A5
  133.  
  134. BCD0; Byte
  135. BCD1
  136. BCD2
  137. BCD3
  138. BCD4; High Byte
  139.  
  140. U330_L; voltage output  the controller, gain = 330, low byte
  141. U330_H; voltage output  the controller, gain = 330 byte
  142. U33_L; voltage output  the controller, gain = 33, low byte
  143. U33_H; voltage output  the controller, gain = 33, byte
  144.  
  145. TMR1_Count; TMR1 counter overflows
  146. TMR0_Count; TMR0 counter overflow
  147. Flags
  148. EE_ADR; helper cell to work with EEPROM
  149. EE_DATA
  150. NZ; number of significant digits for output to display
  151. NC; number of constants
  152. Const_ADR; address constants in the EEPROM
  153. ENDC
  154.  
  155. CBLOCK 0xB5
  156. W_TEMP1; preserve the context of interrupted
  157. ENDC
  158.  
  159. ;=========================
  160. ; MACROS
  161. ;=========================
  162. bank0 macro
  163. bcf STATUS, RP0
  164.     endm
  165.  
  166. bank1 macro
  167. bsf STATUS, RP0
  168.     endm
  169.  
  170. Dly24 MACRO DLY
  171. ; Take the delay value argument  the macro, precalculate
  172. ; The required three RAM values and load the The RAM values Dly2, Dly1
  173. ; And Dly0.
  174. banksel Dly0
  175. movlw DLY & H'FF '
  176. movwf Dly0
  177. movlw DLY>> D'08 '& H'FF'
  178. movwf Dly1
  179. movlw DLY>> D'16 '& H'FF'
  180. movwf Dly2
  181. ; Bytes are shifted and anded by the assembler to make user
  182. ; Calculations easier.
  183. endm
  184.  
  185. ;==========================
  186.  
  187. ORG 0x2100; Area EEPROM
  188. ; Data; Address in EEPROM
  189.  
  190. ; Correction coefficients for:
  191. USR_1 DE 0x00, 0x00, 0x03, 0xE8; 1 - limit 1 ohm
  192. USR_10 DE 0x00, 0x00, 0x03, 0xE8; 1 - limit of 10 ohms
  193. USR_Cx DE 0x00, 0x00, 0x03, 0xE8; 1 - measurement of capacity
  194.  
  195. ; K_ESR_1 DE 0x7F, 0x00, 0x00, 0x00; 1 - limit 1 ohm
  196. ; K_ESR_10 DE 0x7F, 0x00, 0x00, 0x00; 1 - limit of 10 ohms
  197. ; K_Cx DE 0x7F, 0x00, 0x00, 0x00; 1 - measurement of capacity
  198.  
  199. ; Numbers in FLOATING POINT LIBRARY format
  200. U0_ESR_1 DE 0x85, 0x16, 0x00, 0x00; 75 = 85160000 - "0" at the limit of 1 ohm
  201. U0_ESR_10 DE 0x81, 0x60, 0x00, 0x00; 7 = 81600000 - "0" at the limit of 10 ohms
  202.  
  203. ; Factors for the calculations:
  204. M_ESR_1 DE 0x75, 0x40, 0x30, 0x0C; 1 / 682 = 7540300C
  205. M_ESR_10 DE 0x78, 0x74, 0x89, 0x8D; 1 / 67 = 7874898D
  206. M_Cx DE 0x74, 0x2E, 0xC3, 0x3E; 1 / (15 * 100) = 742EC33E
  207. sub_Cx DE 0x80, 0x40, 0x00, 0x00; 3 = 80400000 - is subtracted  the readings TMR1
  208.  
  209. ;==========================
  210. org 0x700; posdelnie 256 bytes 1-th page of program memory
  211. Table addwf PCL, F
  212. omega dt b'00000000 '; sign omega
  213. dt b'00001110 '
  214. dt b'00010001 '
  215. dt b'00010001 '
  216. dt b'00010001 '
  217. dt b'00001010 '
  218. dt b'00011011 '
  219. dt b'00000000 '
  220.  
  221. mu dt b'00000000 '
  222. dt b'00000000 '
  223. dt b'00010010 '
  224. dt b'00010010 '
  225. dt b'00010010 '
  226. dt b'00011110 '
  227. dt b'00010001 '
  228. dt b'00010000 '
  229. _Const Dt "Coeff. For", 0
  230. _ESR Dt "ESR", 0
  231. _Cx Dt "Cx", 0
  232. _Time_out Dt "Cx ---", 0
  233. _1_ohm Dt "1", 1,0
  234. _10_ohm Dt "10", 1,0
  235. _tst_1 dt "1", 1 ,"=", 0
  236. _tst_10 dt "10", 1 ,"=", 0
  237. _write_U0 dt "U0 ---> EEPROM", 0
  238. _ready dt "It is ready!", 0
  239. org 0x00
  240. ;************************************************* ******************************
  241. ; START PROGRAM
  242. ;************************************************* ******************************
  243. nop; for MPLAB-ICD2
  244. goto init
  245. ;------------------ Interrupt ------------------
  246. org 0x004
  247.  
  248. movwf W_TEMP; save W
  249. swapf STATUS, W; swap STATUS, W
  250. clrf STATUS
  251. movwf STATUS_TEMP; save status
  252. movf PCLATH, W
  253. movwf PCLATH_TEMP; save PCLFTH
  254.  
  255. decfsz TMR0_Count
  256. goto restore_context
  257. bsf Flags, 0; Time Out!
  258. goto stop_TMR1
  259.  
  260. restore_context
  261. bcf INTCON, T0IF; clear interrupt flag
  262.  
  263. movf PCLATH_TEMP, W
  264. movwf PCLATH
  265. swapf STATUS_TEMP, W; fetch status, reswap nibbles
  266. movwf STATUS; restore status
  267. swapf W_TEMP, F; swap nibbles in preparation
  268. swapf W_TEMP, W; for the swap restoration of w
  269. retfie; return  interrupt
  270. ;-----------------------------------------------
  271.  
  272. init
  273. banksel INTCON
  274. clrf Flags
  275. clrf INTCON
  276. clrf PCLATH
  277. clrf PORTA
  278. clrf PORTB
  279. movlw ESR_ready; incl. discharge, "+" and "-" control at the Cx
  280. movwf PORTC
  281.  
  282. banksel TRISA
  283. movlw Port_A_Config
  284. movwf TRISA
  285. ; Initialize ADC
  286. movlw b'10000100 '; right aligned, Vdd, Vss, AN0, AN1, AN3
  287. movwf ADCON1
  288.  
  289. movlw Port_B_Config
  290. movwf TRISB
  291. movlw Port_C_Config
  292. movwf TRISC
  293.  
  294. ; Initialize the LCD in 4 bit mode
  295. InitLCD
  296.         call Delay_5_ms
  297.         call Delay_5_ms
  298.         call Delay_5_ms; pause of 15 ms after power ON
  299. banksel PORTB
  300. movlw 3
  301. movwf Count1
  302. movwf PORTB
  303. SetLoop
  304.         bsf _E; to initialize the LCD 3 times sending command 0x30
  305. nop
  306. nop
  307. nop
  308. bcf _E
  309. call Delay_5_ms
  310. decfsz Count1, f
  311. goto SetLoop
  312.  
  313. movlw 2; 4-x-bit
  314. movwf PORTB
  315. call Send
  316. movlw 28; 4-bit, 2 lines, 5x7
  317. call CmdLCD
  318. movlw 0C; Enable Display
  319. call CmdLCD
  320. movlw 6
  321. call CmdLCD
  322. call Load_ZG; Load symbols of mu and omega
  323.         call ClrDSP; Clear screen
  324. ;------------------------------------------------- -
  325. btfsc PORTA, Kn_Set;
  326. goto Main
  327. ;------------ Installation mode constants ------------
  328. goto c_1
  329. Const_Loop
  330. btfss PORTA, Kn_Plus
  331. call IncB
  332. btfss PORTA, Kn_Minus
  333. call DecB
  334. btfsc PORTA, Kn_Set
  335. goto Const_Loop
  336.  
  337. btfss Flags, 5; flag change constants
  338. goto c_3
  339. call Save_Const; constant change, we must keep
  340. c_3
  341. incf NC, F
  342. movf NC, W
  343. sublw 3, the number of constants
  344. btfss STATUS, Z
  345. goto $ +2
  346. c_1 clrf NC
  347. bcf Flags, 5 Clear the flag change in the constants
  348.         call ClrDSP; Clear screen
  349.    movlw LOW _Const
  350. call Read_String
  351. movlw HIGH $
  352. movwf PCLATH
  353.         movf NC, W
  354.         addwf PCL, F; table transition
  355.         goto const_1_ohm; +0
  356.         goto const_10_ohm; +1
  357.         goto const_Cx; +2
  358. c_2 call ShowX
  359.         goto Const_Loop
  360.  
  361. const_1_ohm
  362. movlw LOW USR_1
  363. movwf Const_ADR
  364. call EEPROM_To_B
  365. movlw LOW _1_ohm
  366. call Read_String
  367. goto c_2
  368. const_10_ohm
  369. movlw LOW USR_10
  370. movwf Const_ADR
  371. call EEPROM_To_B
  372. movlw LOW _10_ohm
  373. call Read_String
  374. goto c_2
  375. const_Cx
  376. movlw LOW USR_Cx
  377. movwf Const_ADR
  378. call EEPROM_To_B
  379. movlw LOW _Cx
  380. call Read_String
  381. goto c_2
  382. ;------- Initialize ADC module ------
  383. Main
  384. ; Banksel ADCON1
  385. ; Movlw b'10000100 '; right aligned, Vdd, Vss, AN0, AN1, AN3
  386. ; Movwf ADCON1
  387.  
  388. ESR_measure
  389. banksel PORTC
  390. movlw ESR_start; incl. charge, "+" and "-" control at the Cx
  391. movwf PORTC
  392.  
  393. movlw 0x4; 3.6mks Delay (18 cycles) to finish pereh.protsessov - to pick up!
  394. call Delay_go
  395.  
  396. bcf PORTC, In_P_Cx; disable SZAP  Cx
  397. nop;???
  398. bsf PORTC, Cap_Charge; off. Izar.
  399.  
  400. , Measures the voltage output  dif.usilitelya with Ku = 330
  401. banksel ADCON0
  402. movlw b'10000001 '; Fosc/32, channel 0, A / D incl.
  403. movwf ADCON0
  404. call Delay_20_us
  405. bsf ADCON0, 2; start analog-digital conversion
  406. btfsc ADCON0, 2
  407. goto $ -1; waiting for the end of conversion
  408. movf ADRESH, W
  409. movwf U330_H
  410. banksel ADRESL
  411. movf ADRESL, W
  412. banksel U330_L
  413. movwf U330_L
  414.  
  415. , Measures the voltage output  dif.usilitelya with Ku = 33
  416. banksel ADCON0
  417. movlw b'10001001 '; Fosc/32, channel 1, A / D incl.
  418. movwf ADCON0
  419. call Delay_20_us
  420. bsf ADCON0, 2; start analog-digital conversion
  421. btfsc ADCON0, 2
  422. goto $ -1; waiting for the end of conversion
  423. movf ADRESH, W
  424. movwf U33_H
  425. banksel ADRESL
  426. movf ADRESL, W
  427. banksel U33_L
  428. movwf U33_L
  429.  
  430. ;------------ If ESR> 10 ohms, capacitance measurement does not perform ------------
  431. clrf Flags
  432. movlw 0x03
  433. subwf U33_H, W; if evidence ADC> = 0x300 (768)
  434. btfss STATUS, Z
  435. goto Cx_0; transition to measure the capacitance
  436. bsf Flags, 0; platoon flag Time Out
  437. goto Cx_3
  438. ;------------ Measurement capacitor ------------
  439. Cx_0
  440. movlw Cap_ready; incl. razdyad "-" control on the ground, "+" on Cx
  441. movwf PORTC
  442. call TMR0_init; Run TMR0 to prevent deadlocks in the measurement of capacitance
  443.  
  444. call Delay_200_us
  445. btfss PORTC, Comp_Low; 1 - Cx is discharged
  446. goto $ -2; forward again, 200 microseconds
  447. call Delay_200_us; for reliability even delay
  448. call TMR1_init
  449.  
  450. movlw 0x03
  451. subwf U330_H, W; if evidence ADC> = 0x300 (768)
  452. btfss STATUS, Z; ie ESR> 1 Ohm, capacitance is measured with ESR compensation
  453. goto Cx_1
  454. movlw Cap_start2; incl. charge, "-" control at Cx, "+" on Cx
  455. movwf PORTC
  456. movlw 0x4; 3.6mks Delay (18 cycles) for a charge with the "-" input control
  457. call Delay_go
  458. bcf PORTC, In_N_Cx; disable the "-" input control of Cx
  459. goto Cx_2
  460. Cx_1
  461. movlw Cap_start; incl. charge, "-" control on the ground, "+" on Cx
  462. movwf PORTC
  463. Cx_2
  464. btfsc PORTC, Comp_Low; 0 - Cx been charged to the lower limit
  465. goto $ -1
  466. bsf T1CON, TMR1ON; start the timer
  467.  
  468. tst_charge
  469. btfss PORTC, Comp_Up; 0 - Cx charged to the upper boundary
  470. goto stop_TMR1
  471. btfsc PIR1, TMR1IF; TMR1 full?
  472. call Inc_count
  473. goto tst_charge
  474.  
  475. stop_TMR1
  476. clrf T1CON; stop TMR1
  477. clrf INTCON; prohibit termination
  478. btfsc PIR1, TMR1IF; check the last time on the timer overflow
  479. call Inc_count; was overrun
  480. Cx_3 movlw Cap_ready; incl. razdyad "-" control on the ground, "+" on Cx
  481. movwf PORTC
  482.  
  483. ;------------------------------------------------- -------
  484. ; Outputs results to display
  485. ; Call CursorHome
  486. call ClrDSP
  487. ; Timeout
  488. btfss Flags, 0
  489. goto Disp_Cx
  490. movlw LOW _Time_out
  491. call Read_String
  492. goto Disp_ESR
  493.  
  494. ;------------------------------------------------- -------
  495. clrf FPFLAGS
  496. bsf FPFLAGS, RND; flag rounding in calculations
  497. Disp_Cx
  498. movlw LOW _Cx
  499. call Read_String
  500.  
  501. clrf AEXP
  502. movf TMR1_Count, W
  503. movwf AARGB0
  504. movf TMR1H, W
  505. movwf AARGB1
  506. movf TMR1L, W
  507. movwf AARGB2
  508.  
  509. btfsc PORTA, Kn_Plus
  510. goto Calc_Cx
  511. call BCD; If the button is pressed, plus, the test output
  512. movlw BCD4; timer without treatment
  513. call Disp_Full
  514. goto Disp_ESR
  515. Calc_Cx
  516. call FLO2424; Integer to float conversion
  517. movlw low sub_Cx
  518. call EEPROM_To_B
  519. call FPS24; A = A-3
  520. movlw low M_Cx
  521. call EEPROM_To_B
  522. call FPM24; A = A * M_Cx
  523. movlw low USR_Cx
  524. call X_To_B
  525. call INT2424; Output: 24 bit two's complement integer right
  526. ; Justified in AARGB0, AARGB1, AARGB2
  527. clrf AEXP
  528. call BCD
  529. bsf Flags, 1; not display leading zeros
  530. movlw 3
  531. movwf NZ; number of significant digits, the rest will be 0
  532. bsf Flags, 3, to include verification means. discharges at the derivation
  533.  
  534. movlw BCD3
  535. call DispBCD
  536. movlw BCD3; readings increased by 10 times,
  537. call DispBCD; there are hundreds of thousands of uF
  538.  
  539. movlw BCD2; tens of thousands of uF
  540. call DispBCD
  541. movlw BCD2; thousands of uF
  542. call DispBCD
  543.  
  544. And if the front were only zeros, the separator does not derive
  545. btfsc Flags, 1
  546. goto next_1
  547. movlw ","; thousands separator
  548. call CharLCD
  549. next_1
  550. movlw BCD1; hundreds of uF
  551. call DispBCD
  552. btfsc Flags, 1; to hundreds nebylo digits,
  553. bsf Flags, 2, will display tenths of a microfarad
  554. movlw BCD1; tens of uF
  555. call DispBCD
  556.  
  557. bcf Flags, 1, check = 0 is not needed, we deduce everything
  558. movlw BCD0; unit uF
  559. call DispBCD
  560.  
  561. btfss Flags, 2; need a decimal point output
  562. goto next_2; no
  563. bcf Flags, 2, yes
  564. call DispDot; decimal point
  565. movlw BCD0; tenth microfarad
  566. call DispBCD
  567. next_2
  568. call DispSP
  569. movlw 2; code mu
  570. call CharLCD
  571. movlw "F"
  572. call CharLCD
  573. ;----------------------------
  574. Disp_ESR
  575. btfss PORTA, Kn_Plus
  576. goto tst_ESR
  577.  
  578. bcf Flags, 4, reset the flag for more than 10 ohms
  579. movlw 0x03
  580. subwf U330_H, W; if evidence ADC> = 0x300 (768)
  581. btfsc STATUS, Z; verify the second channel (10 ohm)
  582. goto chk_10
  583.  
  584. ; Channel 1 Ohm
  585. call ClrA
  586. movf U330_H, W; amplifier gain = 330, limit 1 ohm
  587. movwf AARGB0
  588. movf U330_L, W
  589. movwf AARGB1
  590. call FLO1624; to 24 bit floating point
  591. movlw low U0_ESR_1
  592. call EEPROM_To_B
  593. call FPS24; A = A-U0 - subtract the zero offset
  594. movlw low M_ESR_1
  595. call EEPROM_To_B
  596. call FPM24; A = A * M_ESR_1
  597. movlw low USR_1
  598. call X_To_B
  599. goto ESR_to_LCD
  600.  
  601. chk_10
  602. movlw 0x03
  603. subwf U33_H, W; if evidence ADC> = 0x300 (768)
  604. btfsc STATUS, Z
  605. bsf Flags, 4, more than 10 ohms
  606.  
  607. ; Channel 10 Ohm
  608. call ClrA
  609. movf U33_H, W; amplifier gain = 33, limit 10 ohms
  610. movwf AARGB0
  611. movf U33_L, W
  612. movwf AARGB1
  613. call FLO1624; to 24 bit floating point
  614. movlw low U0_ESR_10
  615. call EEPROM_To_B
  616. call FPS24; A = A-U0 - subtract the zero offset
  617. movlw low M_ESR_10
  618. call EEPROM_To_B
  619. call FPM24; A = A * M_ESR_10
  620. movlw low USR_10
  621. call X_To_B
  622.  
  623. ESR_to_LCD
  624. call SecLine
  625. movlw LOW _ESR
  626. call Read_String
  627.  
  628. btfss Flags, 4,> 10 ohm?
  629. goto next_3
  630. movlw ">"
  631. call CharLCD
  632. goto next_4
  633. next_3 call DispSP
  634.  
  635. next_4 movlw 0x80
  636. andwf AARGB0, W; distinguish the symbol "-"
  637. btfsc STATUS, Z
  638. goto next_5; result> 0
  639. call ClrA; result <0, we derive some zeros
  640. goto next_6
  641. next_5 call INT2424
  642.  
  643. next_6 bcf Flags, 3; disable scanning means. discharges at the derivation
  644. bsf Flags, 1; not display leading zeros
  645. clrf AEXP
  646. call BCD
  647.  
  648. movlw BCD2
  649. call DispBCD
  650. movlw BCD2
  651. call DispBCD; tens of ohms
  652.  
  653. bcf Flags, 1, check = 0 is not needed, we deduce everything
  654. movlw BCD1; units of ohms
  655. call DispBCD
  656. call DispDot
  657. movlw BCD1
  658. call DispBCD
  659.  
  660. movlw BCD0
  661. call DispBCD
  662. movlw BCD0
  663. call DispBCD
  664.  
  665. call DispSP
  666. movlw 1; sign th
  667. call CharLCD
  668. end_disp
  669. banksel PORTC
  670. bsf PORTC, Cap_Discharge; incl. discharge Cx
  671.  
  672. call Delay_05_sec
  673.  
  674. banksel PORTC
  675. bcf PORTC, Cap_Discharge; off. discharge Cx
  676.  
  677. goto ESR_measure
  678.  
  679. ; For testing - output of the ADC without treatment
  680. , Once 2-channel (1 and 10 ohms)
  681. tst_ESR
  682. call SecLine
  683. ; Channel 1 Ohm
  684. movlw LOW _tst_1
  685. call Read_String
  686. call ClrA
  687. movf U330_H, W; amplifier gain = 330, limit 1 ohm
  688. movwf AARGB1
  689. movf U330_L, W
  690. movwf AARGB2
  691. call BCD
  692. movlw BCD1
  693. call Disp_Full
  694. ; Channel 10 Ohm
  695. movlw LOW _tst_10
  696. call Read_String
  697. call ClrA
  698. movf U33_H, W; amplifier gain = 33, limit 10 ohms
  699. movwf AARGB1
  700. movf U33_L, W
  701. movwf AARGB2
  702. call BCD
  703. movlw BCD1
  704. call Disp_Full
  705. btfsc PORTA, Kn_Set; check button zeroing
  706. goto end_disp
  707. ; Saving U0 in EEPROM ------------------------
  708. call CursorHome
  709. movlw LOW _write_U0
  710. call Read_String
  711. ; U0 for l Ohm
  712. call ClrA
  713. movf U330_H, W; amplifier gain = 330, limit 1 ohm
  714. movwf AARGB0
  715. movf U330_L, W
  716. movwf AARGB1
  717. call FLO1624; to 24 bit floating point
  718. call BEQUA
  719. movlw LOW U0_ESR_1
  720. movwf Const_ADR
  721. call Save_Const
  722. ; U0 for l0 ohms
  723. call ClrA
  724. movf U33_H, W; amplifier gain = 33, limit 10 ohms
  725. movwf AARGB0
  726. movf U33_L, W
  727. movwf AARGB1
  728. call FLO1624; to 24 bit floating point
  729. call BEQUA
  730. movlw LOW U0_ESR_10
  731. movwf Const_ADR
  732. call Save_Const
  733.  
  734. call Delay_3_sec
  735. call ClrDSP
  736. movlw LOW _ready
  737. call Read_String
  738. call Delay_1_sec
  739. goto end_disp
  740. ;------------------------- TMR1 ----------------------- -
  741. ; Initializing timer TMR1, step accounts = 0.2 ms
  742. TMR1_init
  743. clrf TMR1L
  744. clrf TMR1H
  745. bcf PIR1, TMR1IF
  746. movlw b'00000000 '; 1:1 Fosc / 4
  747. movwf T1CON
  748. clrf TMR1_Count
  749. return
  750. ;------------------------- TMR1 ----------------------- -
  751. ; Zoom TMR1 counter overflows
  752. Inc_count
  753. bcf PIR1, TMR1IF; clear the timer overflow flag
  754. incfsz TMR1_Count, F
  755. return
  756. bsf Flags, 0; Time out
  757. goto stop_TMR1; in the allotted time measurements do not wait until the charge
  758. ;------------------------- TMR0 ----------------------- -
  759. ; Initializing timer TMR0, step accounts = 0.2 ms
  760. TMR0_init
  761. movlw Max_Count
  762. movwf TMR0_Count; initial value of counter TMR0 overflows
  763. clrf TMR0; clear timer
  764. movlw OPTION_REG; Work around the OPTION
  765. movwf FSR; address OPTION_REG -> FSR
  766. movlw b'00000111 '; set up timer. 1:256 presc
  767. movwf INDF
  768.  
  769. bcf INTCON, T0IF; clear tmr0 int flag
  770. bsf INTCON, T0IE; enable TMR0 int
  771. bsf INTCON, GIE; enable global interrupts
  772. clrf TMR0; start timer
  773. return
  774. ;------------------------- Delay ----------------------- -
  775. ; Sub pauses
  776. Delay_3_sec; Pause 3 sec
  777. Dly24 D'937499 '; 3 / (4 / 20000000) / 16 = 937500-1 = 937499
  778. goto DoDly24
  779.  
  780. Delay_2_sec; Pause 2 sec
  781. Dly24 D'624999 '; 2 / (4 / 20000000) / 16 = 625000-1 = 624999
  782. goto DoDly24
  783.  
  784. Delay_1_sec; Pause 1 sec
  785. Dly24 D'312499 '; 1 / (4 / 20000000) / 16 = 312500-1 = 312499
  786. goto DoDly24
  787.  
  788. Delay_05_sec; Pause 0.5 seconds
  789. Dly24 D'156249 '; 0.5 / (4 / 20000000) / 16 = 156250-1 = 156249
  790. goto DoDly24
  791.  
  792. Delay_5_ms; pause 5 ms
  793. Dly24 D'1562 '; 0,005 / (4 / 20000000) / 16 = 1562.5 = 1562
  794. goto DoDly24
  795.  
  796. Delay_200_us; Pause 200 microseconds
  797. Dly24 D'62 '; 0.0002 / (4 / 20000000) / 16 = 62.5 = 62
  798. goto DoDly24
  799.  
  800. DoDly24; 16 Tcy per loop
  801. movlw H'FF '; Start with -1 in W
  802. addwf Dly0, F; LSB decrement
  803. btfsc STATUS, C; was the carry flag set?
  804. clrw; If so, 0 is put in W
  805. addwf Dly1, F; Else, we continue.
  806. btfsc STATUS, C
  807. clrw; 0 in W
  808. addwf Dly2, F
  809. btfsc STATUS, C
  810. clrw; 0 in W
  811. iorwf Dly0, W; Inclusive-OR all variables
  812. iorwf Dly1, W; together to see if we have reached
  813. iorwf Dly2, W; 0 on all of them.
  814. btfss STATUS, Z; Test if result of Inclusive-OR's is 0
  815. goto DoDly24
  816. return
  817.  
  818. Delay_20_us
  819. movlw 0x1F; Delay 20 ms
  820. Delay_go
  821. movwf Dly0
  822. decfsz Dly0, F
  823. goto $ -1
  824. nop
  825. nop
  826. return
  827.  
  828. ;---------------------- LCD ---------------------
  829. ; Translation pointer to the second character of the second row
  830. SecLine movlw 0xC0
  831.  
  832. ; Load command
  833. CmdLCD movwf Temp4
  834. ; Bcf _RS
  835. swapf Temp4, W
  836. andlw 0x0F
  837. movwf PORTB
  838. bsf _E
  839. nop
  840. nop
  841. nop
  842. bcf _E
  843. movf Temp4, W
  844. andlw 0x0F
  845. movwf PORTB
  846. bsf _E
  847. nop
  848. nop
  849. nop
  850. bcf _E
  851. ; Clrf PORTB
  852. call Delay_200_us
  853. return
  854.  
  855.  
  856. ; Recoding to ASCII and output
  857. NumLCD andlw 0x0F; mask
  858. iorlw 0x30; ASCII
  859. ; Output ASCII character
  860. CharLCD movwf Temp4
  861. SendLCD swapf Temp4, W
  862. andlw 0x0F
  863. iorlw b'00010000 '; RS = 1
  864. movwf PORTB
  865. bsf _E
  866. nop
  867. nop
  868. nop
  869. bcf _E
  870. movf Temp4, W
  871. andlw 0x0F
  872. iorlw b'00010000 '; RS = 1
  873. movwf PORTB
  874. Send bsf _E
  875. nop
  876. nop
  877. nop
  878. bcf _E
  879. clrf PORTB
  880. call Delay_200_us
  881. return
  882.  
  883.  
  884.  
  885. CursorHome movlw 0x02; the initial display
  886. goto LongSend
  887. ClrDSP movlw 1; Clear Display
  888. LongSend call CmdLCD
  889. goto Delay_5_ms
  890.  
  891. DispDot movlw "."
  892. goto CharLCD
  893.  
  894. Disp0 movlw "0"
  895. goto CharLCD
  896.  
  897. DispSP movlw ""
  898. goto CharLCD
  899.  
  900. ;------------------------------------------------- ----------
  901. ; Reading rows  the table and output to the LCD
  902. Read_String
  903. movwf Count1
  904. decf Count1, F; correction of the initial bias
  905. movlw HIGH Table
  906. movwf PCLATH
  907. get_next_s
  908. movf Count1, W
  909. call Table
  910. andlw 0xFF; check for end of line
  911. btfsc STATUS, Z
  912. return
  913. call CharLCD
  914. incf Count1, F
  915.  goto get_next_s
  916.  
  917. ;---------------------- Load CGRAM LCD ---------------------
  918. ; Download decoder
  919. Load_ZG
  920. movlw b'01001000 '; AC in CGRAM = 8
  921. call CmdLCD
  922. movlw HIGH Table
  923. movwf PCLATH
  924. movlw .16; 2 digits by 8 bytes
  925. movwf Count1
  926. movlw LOW omega-1
  927. movwf Count2; offset table
  928.  
  929. get_s call Table; get a character  the table
  930. call CharLCD
  931. incf Count2, F
  932. movf Count2, W
  933. decfsz Count1, F
  934. goto get_s
  935. return
  936. ;------------------------------------------------- ---------
  937. ; Withdrawal  the passed in W block address BCD0 ... 4
  938. , The indicator
  939. Disp_Full
  940. movwf FSR; cell address for output on LCD
  941. next_byte
  942. swapf INDF, W
  943. call NumLCD
  944. movf INDF, W
  945. call NumLCD
  946. , Check whether we got to BCD0
  947. movlw BCD0
  948. subwf FSR, W
  949. btfsc STATUS, Z
  950. return
  951. decf FSR, F
  952. goto next_byte
  953. ;---------------------- BCD to LCD ---------------------
  954. ; Output level and the preparation for the conclusion next
  955. DispBCD movwf FSR
  956. NextNibble swapf INDF, F
  957. movf INDF, W
  958. btfss Flags, 1, 1 - do not display leading zeros
  959. goto chk_NZ
  960. andlw 0x0F
  961. btfsc STATUS, Z
  962. return; pass output
  963. bcf Flags, 1; this and all figures derive posdeduyuschie
  964. chk_NZ
  965. btfss Flags, 3, 1 - show only NZ discharges, other - 0
  966. goto NumLCD
  967. movf NZ, F
  968. btfsc STATUS, Z; counter = 0?
  969. goto Disp0; yes, we deduce that 0
  970. decf NZ, F; not, then we deduce that there is
  971. call NumLCD
  972. return
  973. ;---------------------- BCD ---------------------
  974. ; Recoding values  binary to decimal
  975. BCD movlw 0x20
  976. movwf T1
  977. clrf BCD0
  978. clrf BCD1
  979. clrf BCD2
  980. clrf BCD3
  981. clrf BCD4
  982.  
  983. BcdLoop rlf AARGB2, F
  984. rlf AARGB1, F
  985. rlf AARGB0, F
  986. rlf AEXP, F
  987.  
  988. rlf BCD0, F
  989. rlf BCD1, F
  990. rlf BCD2, F
  991. rlf BCD3, F
  992. rlf BCD4, F
  993. decfsz T1, F
  994. goto Adjust
  995. return
  996.  
  997. Adjust movlw .5
  998. movwf Count2
  999.  
  1000. movlw BCD0
  1001. movwf FSR
  1002. goto ADloop +1
  1003.  
  1004. ADloop incf FSR, F
  1005. call Adjbcd
  1006. decfsz Count2, F
  1007. goto ADloop
  1008. goto BcdLoop
  1009.  
  1010. Adjbcd movlw 0x03
  1011. addwf INDF, W
  1012. movwf T0
  1013. btfsc T0, 3
  1014. movwf INDF
  1015. movlw 0x30
  1016. addwf INDF, W
  1017. movwf T0
  1018. btfsc T0, 7
  1019. movwf INDF
  1020. return
  1021.  
  1022. ;------------------------------------------------- ------
  1023. ; Copy "on purpose" block (4 bytes) of data
  1024. ; Temp1 = recipient's address - indicates the senior block address
  1025. ; Temp2 = source address - indicates the senior block address
  1026.  
  1027. ; CEQUA movlw CX; C = A
  1028. Copy_From_A
  1029. movwf Temp1; Xw = A
  1030. movlw AEXP
  1031. movwf Temp2
  1032. goto Copy
  1033.  
  1034. BEQUA movlw AEXP; B = A
  1035. Copy_To_B movwf Temp2; B = Xw
  1036. movlw BEXP
  1037. goto Copy_B
  1038.  
  1039. ; AEQUF movlw FX; A = F
  1040. Copy_To_A
  1041. movwf Temp2; A = Xw
  1042. movlw AEXP
  1043.  
  1044. Copy_B movwf Temp1
  1045. Copy movlw 4; volume unit
  1046. movwf Count1
  1047. Copy_Loop
  1048. movf Temp2, W
  1049. movwf FSR
  1050. movf INDF, W
  1051. movwf Temp3
  1052. movf Temp1, W
  1053. movwf FSR
  1054. movf Temp3, W
  1055. movwf INDF
  1056. decf Temp1, F; moving in the direction of decreasing
  1057. decf Temp2, F; Address
  1058. decfsz Count1, F
  1059. goto Copy_Loop
  1060. return
  1061.  
  1062. ;------------------------------------------------- ------
  1063. X_To_B call EEPROM_To_B; Load factor X
  1064. call ASwapB
  1065. call FLO2424
  1066. call FPM24
  1067. return
  1068.  
  1069. ASwapB movlw T5
  1070. call Copy_From_A
  1071. movlw BEXP
  1072. call Copy_To_A
  1073. movlw T5
  1074. call Copy_To_B
  1075. return
  1076. ;------------------------------------------------- ------
  1077. ; Clear blocks A and B
  1078. ClrB movlw BEXP; Cleaning Block B
  1079. goto ClrA +1
  1080.  
  1081. ClrA movlw AEXP; Cleaning Block A
  1082. movwf FSR
  1083. movlw 4; volume unit
  1084. movwf Count1
  1085.  
  1086. ClrLoop
  1087. clrf INDF; cleaning cycle
  1088. decf FSR, F; reduce the address
  1089. decfsz Count1, F
  1090. goto ClrLoop
  1091. return
  1092. ;------------------------------------------------- ------
  1093. : Reading data  the EEPROM in block B
  1094. EEPROM_To_B
  1095. movwf EE_ADR; stores the address of EEPROM cell
  1096. movlw BEXP
  1097. movwf FSR
  1098. movlw 4; volume unit
  1099. movwf Count1
  1100. EE_read_loop
  1101. call ReadEEPROM
  1102. banksel BEXP
  1103. movwf INDF
  1104. incf EE_ADR, F
  1105. decf FSR, F
  1106. decfsz Count1, F
  1107. goto EE_read_loop
  1108. return
  1109.  
  1110. : Reading EEPROM
  1111. ReadEEPROM
  1112. movf EE_ADR, W;
  1113. banksel EEADR; Bank 2
  1114. movwf EEADR; EEPROM cell address
  1115. banksel EECON1; bank3
  1116. bcf EECON1, EEPGD;  EEPROM
  1117. bsf EECON1, RD; initsializrovat reading
  1118. banksel EEDATA; bank2
  1119. movf EEDATA, W; W = EEDATA
  1120. return
  1121.  
  1122. ;------------------------------------------------- ------
  1123. ; Recording unit BARG in EEPROM
  1124. ; Address in the EEPROM is given in Const_ADR
  1125. Save_Const
  1126. movf Const_ADR, W
  1127. movwf EE_ADR
  1128. movlw BEXP
  1129. movwf FSR
  1130. movlw 4; volume unit
  1131. movwf Count1
  1132. EE_write_loop
  1133. movf INDF, W
  1134. movwf EE_DATA
  1135. call WriteEEPROM
  1136. banksel BEXP
  1137. incf EE_ADR, F
  1138. decf FSR, F
  1139. decfsz Count1, F
  1140. goto EE_write_loop
  1141. return
  1142.  
  1143. ; Write EEPROM
  1144. WriteEEPROM
  1145. banksel EECON1; bank3
  1146. btfsc EECON1, WR
  1147. goto $ -1
  1148. banksel EE_ADR
  1149. movf EE_ADR, W
  1150. banksel EEADR; bank2
  1151. movwf EEADR
  1152. banksel EE_DATA
  1153. movf EE_DATA, W
  1154. banksel EEDATA; bank2
  1155. movwf EEDATA
  1156. banksel EECON1; bank3
  1157. bcf EECON1, EEPGD
  1158. bsf EECON1, WREN
  1159. movlw 0x55
  1160. movwf EECON2
  1161. movlw 0xAA
  1162. movwf EECON2
  1163. bsf EECON1, WR
  1164. nop
  1165. bcf EECON1, WREN
  1166. return
  1167. ;------------------------------------------------- ------
  1168. ; Incrementing polubloka B
  1169. IncB
  1170. bsf Flags, 5, set the flag change in the constants
  1171.        incf BARGB2, F
  1172. btfsc STATUS, Z
  1173. incf BARGB1, F
  1174. goto ShowX
  1175.  
  1176. ; Decrementing polubloka B
  1177. DecB
  1178. bsf Flags, 5, set the flag change in the constants
  1179.        movf BARGB2, F
  1180. btfsc STATUS, Z
  1181. decf BARGB1, F
  1182. decf BARGB2, F
  1183.  
  1184. ShowX
  1185.        movlw BEXP
  1186.        call Copy_To_A
  1187.  
  1188. call BCD
  1189. call SecLine
  1190. movlw BCD1
  1191. call DispBCD
  1192. call DispDot
  1193. movlw BCD1
  1194. call DispBCD
  1195. movlw BCD0
  1196.                 call            DispBCD
  1197.                 movlw           BCD0
  1198.                 call            DispBCD
  1199.                
  1200.                 call            Delay_05_sec
  1201.                 return
  1202.  
  1203. ;=======================================================
  1204. ;     PIC16 24 BIT FLOATING POINT LIBRARY
  1205.  
  1206. #define P16_MAP1 0
  1207. #define P16_MAP2 1
  1208.        include "math16.inc"
  1209.        include "fp24.a16"  
  1210.        
  1211.        END
(#) Beles válasza Beles hozzászólására (») Márc 3, 2013 /
 
Szépen működik már a soros port kommunikáció, potméter értékét is szépen be tudom olvasni gépre, valamint egy ledet is tudok ki be kapcsolgatni. Azonban most szeretnék egy led fényerejét szabályozni. Viszont elakadtam, nem értem pontosan ezt a részt:
  1. if(getsUSBUSART(input_buffer,1))
  2.      {
  3.           switch (input_buffer[0])
  4.           {
  5.  
  6.                 case '1' : mLED_1_On(); break;
  7.                 case '2' : mLED_1_Off(); break;
  8.                 case '3':       CCPR1L = 0b00000000;break;
  9.                 case '4':       CCPR1L = 0b00000010;break;
  10.                 case '5':       CCPR1L = 0b00000100;break;
  11.                 case '6':       CCPR1L = 0b00001000;break;
  12.                 case '7':       CCPR1L = 0b00010000;break;
  13.                 case '8':       CCPR1L = 0b00100000;break;
  14.                 case '9':       CCPR1L = 0b01000000;break;
  15.                 case '10': CCPR1L = 0b10000000;break;
  16.                 default   : break;
  17.                 }

A case 10-re ezt a hibát dobja a fordító: Error [1515] redefinition of case value 49

Nem értem miért csak 8 lehetőséget lehet megadni. Valamint miért kell ' jel közé rakni a case mögött a számokat? Én azt gondoltam eddig, hogy valamilyen számot átküldök a picnek, és azt utána ki tudom választani. Vagy valami más megoldást kell válasszak?
A hozzászólás módosítva: Márc 3, 2013
(#) kissi válasza Beles hozzászólására (») Márc 3, 2013 /
 
Az aposztróf azt jelzi a fordítónak, hogy a közé írt karakter ASCII kódját vegye figyelembe. A '10' már nem egy karakter, így nem értelmes a kívánságod !
Steve
(#) bbalazs_ válasza tom75 hozzászólására (») Márc 3, 2013 /
 
Altalaban a forditonal el lehet nyomni bizonyos hibakat es csak a fontosakat megjelenteni.
Ha az .inc file pl. hianyzik, attol minden meghulyul.

Az mpasmwin-t inditsd el a megfelelo kapcsolokkal, a /w2 peldaul csodakat tehet, mert csak az errorokat engedi at, a sok warningot nem.
Az is segithet, ha elolvasod a hibauzenetet, mire panaszkodik.
A hibauzeneteket file-ba iranyithatod, ha nem fernek el a kepernyon.

A lehetosegek a /h kapcsoloval jonnek elo, kepernyon egybol olvashatod az opciokat.
(#) tom75 válasza bbalazs_ hozzászólására (») Márc 3, 2013 /
 
Köszönöm.
.inc file meg van csak ide nem raktam be.

Névtelen.png
    
(#) Szamy hozzászólása Márc 3, 2013 /
 
Üdv!
Van egy pic köré épített áramköröm,ami soros porton beszélget pc-vel. Milyen progival tudnék belesni a kommunikációba? Már 3 progit kipróbáltam, mind arra panaszkodik, hogy a port, amit vizsgálnék, "már (másik program által )használatban van" .
(#) bbalazs_ válasza tom75 hozzászólására (») Márc 3, 2013 /
 
OK, de jo lenne latni parat a hibak kozul. Nem tudnad inkabb a hibafile-t belinkelni?
(#) tom75 válasza bbalazs_ hozzászólására (») Márc 4, 2013 /
 
Szia!

Köszi a választ!
Csatolva a hiba file.
(#) proba válasza Szamy hozzászólására (») Márc 4, 2013 /
 
Ha az egyik irány elég ,kösd rá egy másik port bemenetére,és azt figyeld.
(#) proba válasza tom75 hozzászólására (») Márc 4, 2013 /
 
Az 5 , 29.... sorban a pontosvessző hiány direkt van? A megjegyzéses sorokat illik azzal kezdeni.
A hozzászólás módosítva: Márc 4, 2013
(#) Beles válasza kissi hozzászólására (») Márc 4, 2013 /
 
Jaaa! Így már értem! Köszi!
(#) bbalazs_ válasza tom75 hozzászólására (») Márc 4, 2013 /
 
A ket include file megvan a vegen? Mert egy csomo definiciot, rutint es valtozot nem talal.
Következő: »»   376 / 1210
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