Fórum témák

» Több friss téma
Cikkek » Miért éppen assembly?
Miért éppen assembly?
Szerző: sonajkniz, idő: Jún 5, 2020, Olvasva: 11754, Oldal olvasási idő: kb. 4 perc
Lapozás: OK   2 / 4

Mint oly sok kontroller, ez is többféle tokozásban érhető el. Nem tudom, hogy a tokokon belül van-e eltérés a chipben, de az biztos, hogy a DIP8-as tokozású kivitel elképesztően szívós. 
Jártam úgy, hogy fordítva ültettem be a panelba az ellenállás/zéner alkotta feszültségkorlátot, és közel 12 V-on járattam vagy fél órát. Nem csak, hogy működött, de túlélte! Azonban, jobban szeretem a SOT23-as 6 lábú kivitelt belőle. 

Kezdjük az alapokkal. Nézzük tehát először az index villogót.
Az áramkör  roppant egyszerű. Az izzón át érkezik a tápfeszültség, amit egy leválasztó dióda egy kondenzátorba vezet. Ez a kondi adja az energiát a PIC-nek, míg az izzó világít, hiszen eközben a FET rövidre zárja az áramkör tápját.

index_villogo.jpg

Tisztán látszik, hogy erre a feladatra még a 6 láb is sok. Kifejezetten morbid lenne erre egy 40 lábú kontrollert használni. A program - ha lehet - még a kapcsolásnál is primitívebb.

  1. ;*******************************************************************************
  2. ;*                     Irányjelző villogtató PIC10F322-vel                     *
  3. ;*                   Villogási frekvencia kb. 81 villanás/perc                 *
  4. ;*******************************************************************************
  5.  
  6.  LIST P=PIC10F322 ; lista megadása
  7.  RADIX hex ; alapértelmezett számrendszer megadása
  8.  #include "p10F322.inc"
  9.  
  10.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  11.  
  12.  org 0x0000 ;Programmemória kezdő címe
  13.  nop
  14. INICIALIZALAS
  15.  CLRF LATA
  16.  CLRF ANSELA
  17.  MOVLW B'00001000' ;RA3-on kívül minden kimenetnek állítva
  18.  MOVWF TRISA
  19.  MOVLW B'01110110' ;Timer2 engedélyezése. Előosztás 16, utóosztás 15
  20.  MOVWF T2CON
  21.  MOVLW D'192' ;PR2 beállítása 192-re. (Így 193-ig számol)
  22.  MOVWF PR2
  23.  BSF LATA,0 ;RA0 kimenet bekapcsolása
  24.  MOVLW B'00100000' ;Oszcillátor beállítása 500KHz-re
  25.  MOVWF OSCCON
  26. MAIN
  27.  BTFSS PIR1,1 ;Várakozás a flag-bit bekapcsolására.
  28.  GOTO $-1
  29.  BCF LATA,0 ;RA0 kimenet kikapcsolása.
  30.  BCF PIR1,1 ;A flag-bit kikapcsolása.
  31.  NOP ;Flag-bit bizonságos kikapcsolásának kivárása.
  32.  BTFSS PIR1,1 ;Várakozás a flag-bit bekapcsolására.
  33.  GOTO $-1
  34.  BSF LATA,0 ;RA0 kimenet bekapcsolása.
  35.  BCF PIR1,1 ;A flag-bit kikapcsolása.
  36.  NOP ;Flag-bit bizonságos kikapcsolásának kivárása.
  37.  GOTO MAIN ;Ugrás a program elejére.
  38. ;-------------------------------------------------------------------------------
  39.  END

Nézzünk egy másik, szintén egyszerű, de hasznos kapcsolást. Fényerő, vagy kefés DC motorok PWM szabályozására alkalmas.

pwm_szabalyzo_kapcsolas.jpg

Amint látható, nem sokban tér el az előzőtől. A potival beállított értékre szabályoz, míg a gomb nyomva van.  A gombot akár rövidre is lehet zárni. A potit rendszeresen lekérdezi, azaz menet közben is szabályozható.

  1. ;*******************************************************************************
  2. ;*                                 PWM szabályozás                             *
  3. ;*******************************************************************************
  4. LIST P=PIC10F322 ; lista megadása
  5.  RADIX hex ; alapértelmezett számrendszer megadása
  6.  #include "p10F322.inc"
  7.  
  8.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  9.  
  10.  CBLOCK 0x40
  11.  SZOR_WAIT
  12.  WAIT
  13.  ENDC
  14.  
  15. #define SW1 MB,0
  16.  
  17.  org 0x0000
  18.  nop
  19.  
  20. INICIALIZALAS
  21.  CLRF LATA
  22.  MOVLW B'00000100'
  23.  MOVWF ANSELA
  24.  MOVLW B'00001001'
  25.  MOVWF ADCON
  26.  MOVLW B'00001110'
  27.  MOVWF TRISA
  28.  MOVLW B'00001010'
  29.  MOVWF WPUA
  30.  MOVLW B'00100000'
  31.  MOVWF OSCCON
  32.  MOVLW B'00000011'
  33.  MOVWF OPTION_REG
  34.  MOVLW B'00000100'
  35.  MOVWF T2CON
  36.  MOVLW D'250'
  37.  MOVWF PR2
  38.  CLRF PWM1DCL
  39.  CLRF PWM1DCH
  40.  BCF LATA,0
  41.  MOVLW B'11000000'
  42.  MOVWF PWM1CON
  43.  ;---------------
  44. MAIN
  45.  NOP
  46.  NOP
  47.  MOVLW D'30'
  48.  MOVWF SZOR_WAIT
  49. VARAKOZAS
  50.  INCFSZ WAIT
  51.  GOTO VARAKOZAS
  52.  DECFSZ SZOR_WAIT
  53.  GOTO VARAKOZAS
  54.  BTFSC PORTA,1
  55.  GOTO KIKAPCS
  56.  BSF ADCON,1
  57.  BTFSC ADCON,1
  58.  GOTO $-1
  59.  MOVF ADRES,W
  60.  NOP
  61.  NOP
  62.  CLRF PWM1DCL
  63.  MOVWF PWM1DCH
  64.  GOTO MAIN
  65. KIKAPCS
  66.  CLRF PWM1DCL
  67.  CLRF PWM1DCH
  68.  BCF LATA,0
  69.  GOTO MAIN
  70.  END

Ez a program sem viszi túlzásba a méretet. Mindössze 49 byte.

A következő panelterven egy hungarocell vágó látható. Szerkezetileg mindössze annyiban tér el az előző kapcsolástól, hogy nincs az RA2 előtt a 220 Ω-os, védő ellenállás, ellenben a poti pozitív ágába van beiktatva egy 1 kΩ-os, hogy ne lehessen a fűtőszálra teljes áramot adni. A program ugyan az.

pwm_szabalyzo.jpg

Még mindig ugyanezt az áramkört használva, csak a potmétert elhagyva, lágyindító kapcsolás készíthető kefés DC motorok számára. A program egészen minimális változtatást igényel. Jelen paraméterekkel a teljes felpörgés kb. 5 másodperc.

  1. ;*******************************************************************************
  2. ;*                          Lágyindító PWM szabályzással                       *
  3. ;*******************************************************************************
  4. LIST P=PIC10F322 ; lista megadása
  5.  RADIX hex ; alapértelmezett számrendszer megadása
  6.  #include "p10F322.inc"
  7.  
  8.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  9.  
  10.  CBLOCK 0x40
  11.  SZOR_WAIT
  12.  WAIT
  13.  POWER
  14.  ENDC
  15.  
  16. #define SW1 MB,0
  17.  
  18.  org 0x0000
  19.  nop
  20.  
  21. INICIALIZALAS
  22.  CLRF LATA
  23.  CLRF ANSELA
  24.  CLRF ADCON
  25.  MOVLW B'00001010'
  26.  MOVWF TRISA
  27.  MOVWF WPUA
  28.  MOVLW B'00100000'
  29.  MOVWF OSCCON
  30.  MOVLW B'00000011'
  31.  MOVWF OPTION_REG
  32.  MOVLW B'00000100'
  33.  MOVWF T2CON
  34.  MOVLW D'250'
  35.  MOVWF PR2
  36.  CLRF PWM1DCL
  37.  CLRF PWM1DCH
  38.  BCF LATA,0
  39.  MOVLW B'11000000'
  40.  MOVWF PWM1CON
  41.  CLRF POWER
  42.  ;---------------
  43. MAIN
  44.  NOP
  45.  NOP
  46.  MOVLW D'3'
  47.  MOVWF SZOR_WAIT
  48. VARAKOZAS
  49.  INCFSZ WAIT
  50.  GOTO VARAKOZAS
  51.  DECFSZ SZOR_WAIT
  52.  GOTO VARAKOZAS
  53.  BTFSC PORTA,1
  54.  GOTO KIKAPCS
  55.  MOVLW .250
  56.  SUBWF POWER,W
  57.  BTFSC STATUS,C
  58.  GOTO MAIN
  59.  INCF POWER
  60.  MOVF POWER,W
  61.  CLRF PWM1DCL
  62.  MOVWF PWM1DCH
  63.  GOTO MAIN
  64. KIKAPCS
  65.  CLRF PWM1DCL
  66.  CLRF PWM1DCH
  67.  CLRF POWER
  68.  BCF LATA,0
  69.  GOTO MAIN
  70.  END

Azonban a folyamat akár meg is fordítható, hogy a gomb megnyomására teljes kitöltésre kapcsoljon, elengedés után pedig lassan kapcsoljon ki. Például autóban a beltérvilágítás vezérlésére.

Maradva ennél a kapcsolásnál, csak a nyomógomb került át az RA2-re, egy bontott fúrógép motor felhasználásával építettem egy kézi gravírozót. A NYÁK egyenesen a motor kapcsaira van forrasztva. A PIC alig néhány milliméterre van a szikrázó szénkeféktől. A nyomógomb a motor oldalán kapott helyet. Ez egy zavar-gazdag környezet, mégis, tökéletesen üzemel - köszönhetően az egyszerű hardvernek.

07.jpg

A program azonban meg lett cifrázva. Egy rövid gombnyomásra kb. 2 másodperc alatt teljesen felpörög a motor. Újabb rövid gombnyomásra leáll. Ellenben, ha a gombot hosszan nyomom, lassan növeli a fordulatot, és azon a fordulaton marad, ahol elengedem a gombot. Újabb, hosszú nyomásra tovább növeli a fordulatot, rövid nyomásra leáll. Ez már azért egy hosszabb program, de még mindig csupán 159 byte. Kár lenne ilyen kis feladatra jóval nagyobb tárhelyű és lábszámú eszközt használni.

  1. ;*******************************************************************************
  2. ;*                            Kézi gravírozó vezérlő                           *
  3. ;*******************************************************************************
  4. LIST P=PIC10F322 ; lista megadása
  5.  RADIX hex ; alapértelmezett számrendszer megadása
  6.  #include "p10F322.inc"
  7.  
  8.  __CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
  9.  
  10.  CBLOCK 0x40
  11.  IDO
  12.  CIKLUS
  13.  PWM
  14.  SW
  15.  ENDC
  16. WAIT MACRO MENNYI
  17.  MOVLW MENNYI
  18.  MOVWF CIKLUS
  19.  NOP
  20.  MOVLW .40
  21.  MOVWF IDO
  22.  DECFSZ IDO
  23.  GOTO $-1
  24.  DECFSZ CIKLUS
  25.  GOTO $-6
  26.  ENDM
  27.  
  28.  org 0x0000
  29.  nop
  30.  
  31. INICIALIZALAS
  32.  CLRF LATA
  33.  CLRF ANSELA
  34.  CLRF ADCON
  35.  MOVLW B'00001100'
  36.  MOVWF TRISA ;RA3 és RA2 bemenetnek van állítva.
  37.  MOVLW B'00001100'
  38.  MOVWF WPUA ;RA3 és RA2 belső felhúzó ellenállás bekapcsolva.
  39.  MOVLW B'00100000'
  40.  MOVWF OSCCON ;Oszcillátor 500KHz-re állítva
  41.  MOVLW B'00000001'
  42.  MOVWF OPTION_REG
  43.  MOVLW B'00000100'
  44.  MOVWF T2CON
  45.  MOVLW D'250'
  46.  MOVWF PR2
  47.  MOVLW B'10000000'
  48.  MOVWF PWM1CON
  49.  ;---------------
  50.  WAIT .250
  51.  MOVLW .20
  52.  MOVWF PWM
  53. MAIN
  54.  BTFSC PORTA,2
  55.  GOTO $-1
  56.  WAIT .5
  57.  BTFSC PORTA,2
  58.  GOTO MAIN
  59.  WAIT .250
  60.  BTFSS PORTA,2
  61.  GOTO GYORSIT
  62.  BTFSC SW,0
  63.  GOTO LEKAPCSOL
  64.  MOVLW .20
  65.  MOVWF PWM
  66.  BSF PWM1CON,6
  67. MAXRA
  68.  INCF PWM
  69.  MOVLW .250
  70.  SUBWF PWM,W
  71.  BTFSC STATUS,C
  72.  GOTO MAXON
  73.  CALL SPEED
  74.  WAIT .6
  75.  GOTO MAXRA
  76. MAXON
  77.  BSF SW,0
  78.  WAIT .100
  79.  GOTO MAIN
  80. GYORSIT
  81.  BSF PWM1CON,6
  82. GYORSIT_1
  83.  INCF PWM
  84.  MOVLW .250
  85.  SUBWF PWM,W
  86.  BTFSC STATUS,C
  87.  GOTO GYORSITAS_VEGE
  88.  CALL SPEED
  89.  BTFSC PORTA,2
  90.  GOTO GYORSITAS_VEGE
  91.  WAIT .45
  92.  GOTO GYORSIT_1
  93. GYORSITAS_VEGE
  94.  WAIT .10
  95.  BTFSS PORTA,2
  96.  GOTO GYORSITAS_VEGE
  97.  BSF SW,0
  98.  WAIT .100
  99.  GOTO MAIN
  100. LEKAPCSOL
  101.  BCF PWM1CON,6
  102.  CLRF LATA
  103.  BCF SW,0
  104.  MOVLW .20
  105.  MOVWF PWM
  106. MEG_NEM
  107.  WAIT .50
  108.  BTFSS PORTA,2
  109.  GOTO MEG_NEM
  110.  WAIT .100
  111.  GOTO MAIN
  112. SPEED
  113.  MOVF PWM,W
  114.  CLRF PWM1DCL
  115.  MOVWF PWM1DCH
  116.  RETURN
  117. ;-------------------------------------------------------------------------------
  118.  END

Az előzőekben kiderült, hogy nem túl zavarérzékeny a kicsike. Viszont most jöjjön egy igazán morbid felhasználás. 


A cikk még nem ért véget, lapozz!
Következő: »»   2 / 4
Értékeléshez bejelentkezés szükséges!
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