Fórum témák
- • Transzformátor készítés, méretezés
- • Alternativ HE találkozó(k)
- • Rádió építés a kezdetektől a világvevőig
- • LED-es villogó
- • Akkumulátor töltő
- • Villanyszerelés
- • Elektromos fűnyíró probléma
- • Vicces - mókás történetek
- • Óra építése TIL306-os LED kijelzőkkel
- • LCD kijelző vezérlése, életre keltése
- • Muzeális készülékek-alkatrészek restaurálása
- • Vásárlás, hol kapható?
- • Villanymotor
- • Hangváltók (készítése)
- • Orsós magnók
- • Arduino
- • Műveleti erősítő
- • Klíma szervizelés, javítás
- • MPLAB kérdések
- • Mosógép vezérlők és általános problémáik
- • Li-Po - Li-ion akkumulátor és töltője
- • Elfogadnám, ha ingyen elvihető
- • Videomagnó problémák
- • Elektronikai rendezvények, kiállítások
- • Napelem alkalmazása a lakás energia ellátásában
- • Mosogatógép hiba
- • Wharfedale sub ki-be kapcsolgat
- • Hangsugárzó építés, javítás - miértek, hogyanok
- • Nokia 3310 (adapter programozáshoz)
- • WiFi antenna készítés
- • Érdekességek
- • Rendelés külföldről (eBay - Paypal)
- • Lázmérők, hőmérők
- • Fejhallgató erősítő
- • Tina
- • Ponthegesztő akkumulátorcellákhoz
- • Kávéfőzőgép hiba
- • Aggregátor gerjesztése
- • Felajánlás, azaz ingyen elvihető
- • Tápegység
- • Műhelyünk felszerelése, szerszámai
- • LED-es világítás
- • DSC riasztó
- • V-FET és SIT erősítő kapcsolások
- • Kompresszor építés (levegő)
- • Erősítő mindig és mindig
- • Frekvenciaváltó
- • Audiofil, High End Audio
- • Villanymotor bekötése
- • Indukciós hevítő készítése
- • Hűtőgép probléma
- • Hörmann kapuk
- • Autóelektronika
- • Kerámialapos tűzhely
- • PIC programozás mikroC fejlesztőkörnyezetben
» Több friss téma
|
Cikkek » Miért éppen assembly?
Ami most jön, az szembeszáll mindazzal, ami a PIC normális használatára vonatkozik. Nincs áramkorlát a LED-eken, még a kötelező 100 nF-os kondenzátor is hiányzik a tápról. Mindössze a PIC pozitív ágán van 22 Ω. Viszont ennél kevesebb alkatrészből már nehéz lenne elektronikus dobókockát építeni!

A program elég sajátos módon hajtja meg a LED-eket. Ha pl. RA1 pozitívot ad ki, RA2 pedig negatívot, akkor RA0 bemenetnek van állítva. Ilyen módon multiplexeli 6 lépésben a LED-eket. A középső LED nincs semmivel sorba kötve. Hogy ne világítson jobban a többinél, fele ideig kap csak áramot, mint a sorba kötöttek. Mivel PIC-el nem állítható elő valós véletlenszám, ezért nem is tartalmaz a program random generátort. Viszont garantáltan a véletlenre van bízva a dobás. Ez egy nagyon egyszerű megoldással kivitelezhető. Timer 2-es számláló folyamatosan számol 0-5-ig 0,008 másodpercenként. A gomb lenyomásának pillanatában a program kiolvassa TMR2-es regiszter tartalmát, amit az épp aktuális kijelzéstől számolva jelenít meg, némi fényjáték után.
;*******************************************************************************
;* Dobókocka *
;*******************************************************************************
LIST P=PIC10F322 ; lista megadása
RADIX hex ; alapértelmezett számrendszer megadása
#include "p10F322.inc"
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
CBLOCK 0x40
KOCKA
WAIT
MELYIK
LEFUTAS
KESLELTETES
MB
ENDC
#define SW1 MB,0
org 0x0000
nop
INICIALIZALAS
CLRF LATA
MOVLW B'00001000'
MOVWF WPUA
MOVLW B'01000000'
MOVWF OSCCON
MOVLW B'00000000'
MOVWF OPTION_REG
MOVLW B'00000101'
MOVWF T2CON
MOVLW D'5'
MOVWF PR2
MOVLW B'11110000'
MOVWF KOCKA
CLRF MELYIK
MOVLW D'16'
MOVWF WAIT
MAIN
MOVLW B'00001001'
MOVWF TRISA
BTFSC KOCKA,7
BSF LATA,2 ;0 0
BTFSS INTCON,2 ;# 0 #
GOTO $-1 ;0 0
BCF INTCON,2
BTFSS INTCON,2
GOTO $-1
BCF INTCON,2
BCF LATA,2
BTFSC KOCKA,6
BSF LATA,1 ;0 0
BTFSS INTCON,2 ;0 # 0
GOTO $-1 ;0 0
BCF INTCON,2
BCF LATA,1
MOVLW B'00001100'
MOVWF TRISA
BTFSC KOCKA,5
BSF LATA,1 ;# 0
BTFSS INTCON,2 ;0 0 0
GOTO $-1 ;0 #
BCF INTCON,2
BTFSS INTCON,2
GOTO $-1
BCF INTCON,2
BCF LATA,1
BTFSC KOCKA,4
BSF LATA,0 ;0 #
BTFSS INTCON,2 ;0 0 0
GOTO $-1 ;# 0
BCF INTCON,2
BTFSS INTCON,2
GOTO $-1
BCF INTCON,2
BCF LATA,0
CALL GOMB
GOTO MAIN
PROGRAM
DECFSZ WAIT
RETURN
MOVF KESLELTETES,W
MOVWF WAIT
MOVF MELYIK,W
CALL ADAT
MOVWF KOCKA
INCF MELYIK
MOVLW D'6'
SUBWF MELYIK,W
BTFSS STATUS,C
GOTO PG2
CLRF MELYIK
PG2 DECF LEFUTAS
DECF KESLELTETES
MOVLW 3
SUBWF KESLELTETES,W
BTFSS STATUS,C
INCF KESLELTETES
RETURN
GOMB
BTFSS PORTA,3
GOTO G2
BCF SW1
G1 MOVF LEFUTAS,F
BTFSC STATUS,Z
RETURN
GOTO PROGRAM
G2 BTFSC SW1
GOTO G1
MOVLW D'36'
MOVWF LEFUTAS
MOVF TMR2,W
ADDWF LEFUTAS,F
MOVLW D'30'
MOVWF KESLELTETES
BSF SW1
GOTO PROGRAM
ADAT
ADDWF PCL
RETLW B'01000000'
RETLW B'00100000'
RETLW B'01100000'
RETLW B'00110000'
RETLW B'01110000'
RETLW B'10110000'
END
A most következő eszközre nagyon haragudott a feleségem a napokban. Izotópos röntgen vizsgálatra kellett mennie, ahol közölték vele, hogy kiskorú gyermektől tartsa távol magát egy ideig. Amint hazaértünk a vizsgálatról, elővettem a sugárzásjelzőmet. Normál sugárzási szint esetén szórványos pittyegést ad. Közelítve a feleségemhez folyamatosan sípolt. Két napig nem engedtem az unokája közelébe.

Azoknak, akik kedvet kaptak a megépítéséhez: A sárga karikával behatárolt mezőben a megépítéskor is a rajznak megfelelően kell az alkatrészeket elhelyezni. Azaz, a feszültség ellenőrző pont a C5-ös kondenzátor utánról kell lejöjjön. Ez a kondi pont ez miatt van benne. A 0 V becsatlakozásának is a rajz szerint kell lennie. A szupresszor dióda nem része az áramkör működtetésének, csupán védelmi célokat szolgál; akár el is hagyható, de ajánlott a használata.
A programja jóval bonyolultabb az előzőeknél, ennek ellenére fordítás után rövidebb, mint a kézi gravírozóé.
;*******************************************************************************
;* Sugárzás jelző *
;* Egytekercses feszültségnövelő 400 V-os GM csővel PIC10F322-vel *
;*******************************************************************************
LIST P=PIC10F322 ; lista megadása
RADIX hex ; alapértelmezett számrendszer megadása
#include "p10F322.inc"
__CONFIG _FOSC_INTOSC & _BOREN_OFF & _WDTE_OFF & _MCLRE_OFF & _LVP_OFF & _LPBOR_OFF
CBLOCK 0x40
WAIT ;Várakozás
MENT_WREG ;W regiszter értéktároló
MENT_STATUS ;STATUS regiszter értéktároló
SIP_IDO ;Hangjelzés időtartama részecske becsapódáskor
TOLTES_H ;A 400V meglétét figyelő várakozás felső byte-ja
TOLTES_L ;A 400V meglétét figyelő várakozás alsó byte-ja
MB ;Belső kapcsolók
ENDC
IDOZITO MACRO MENNYI ;Időzítő értékfeltöltése macro.
MOVLW HIGH MENNYI
MOVWF TOLTES_H
MOVLW LOW MENNYI
MOVWF TOLTES_L
ENDM
#define BUZZER LATA,2 ;Hangjelző
#define ISW MB,1 ;Időzítő segédkapcsoló
#define TGYSW MB,2 ;Telep gyenge segédkapcsoló
org 0x0000 ;Programmemória kezdő címe
nop
GOTO INICIALIZALAS
org 0x0004
GOTO MEGSZAKITAS
nop
org 0x000A
INICIALIZALAS
CLRF LATA ;Kimenetek kikapcsolása
MOVLW B'00000010' ;\
MOVWF ANSELA ; \
MOVLW B'1100101' ;--Analóg bemenet beállítása
MOVWF ADCON ;_/
MOVLW B'00001010' ;\
MOVWF TRISA ;-Ki és bemenetek beállítása
MOVLW B'00001000' ;\
MOVWF WPUA ;-RA3-on belső felhúzó ellenállás bekapcsolása
MOVLW B'01110000' ;\
MOVWF OSCCON ;-Oszcillátor beállítása 16MHz-re
MOVLW B'11001000' ;\
MOVWF INTCON ;-Megszakítás bemenet változásra engedélyezése
MOVLW B'00000010' ;\
MOVWF PIE1 ;-Timer 2 megszakítás engedélyezése
CLRF IOCAP ;\
MOVLW B'00001000' ;-Megszakítást kiváltó bemenet kiválasztása
MOVWF IOCAN ;/
CLRF OPTION_REG ;OPTION_REG törlése
MOVLW B'01111100' ;\
MOVWF T2CON ; \
MOVLW D'99' ; \
MOVWF PR2 ;---PWM beállítása 40KHz-re 70%-os kitöltéssel, FLAG
CLRF PWM1DCL ;---bit beállítása 400 usecenkénti bebillenésre.
MOVLW D'70' ; /
MOVWF PWM1DCH ;_/
CLRF MB ;Belső kapcsolók törlése
MAIN
BTFSC TGYSW ;Ha telep gyenge kapcsoló be van kapcsolva, a program
GOTO TELEP_GYENGE ;átugrik TELEP_GYENGE rutinra.
INCFSZ WAIT ;Mivel a 400V-os feszültség felépülése jóval lassabb
GOTO $-1 ;folyamat annál, mint amennyi idő alatt a program
BCF INTCON,GIE
BSF ADCON,1 ;körbefordul, ezért kivárok két mérés között.
BTFSC ADCON,1 ;Bár az időközben bejövő megszakítás elronthatja a
GOTO $-1 ;mérési eredményt, a teljes működésre nincs komoly
BSF INTCON,GIE
MOVLW D'100' ;kihatása, viszont ha ilyenkor leállítom a megsza-
SUBWF ADRES,W ;kítást, lemaradhatok egy jelről, ezért nem teszem.
BTFSS STATUS,C ;Ezután ellenőrzöm, elérte-e a feszültség a kívánt
GOTO MAIN2 ;értéket. Ha nem, MAIN2-re ugrok. Ha igen, leállítom
CLRF PWM1CON ;a PWM kimenetet, kikapcsolom az időzítő segédkapcsoló-
BCF ISW ;ját és visszatérek a program elejére.
GOTO MAIN
MAIN2
MOVLW B'11000000' ;Ha a program ide jön, bekapcsolom a PWM-et, és be-
MOVWF PWM1CON ;állítom a PWM kimenetét.
BTFSC ISW ;Ellenőrzöm időzítő segédkapcsolóját. Ha be van kap-
GOTO MAIN ;csolva, visszatérek a program elejére. Ha nincs,
IDOZITO D'12500' ;feltöltöm értékkel az időzítőt, majd bekapcsolom
BSF ISW ;időzítő segédkapcsolóját.
GOTO MAIN ;Visszatérek a program elejére.
;-------------------------------------------------------------------------------
TELEP_GYENGE ;Ha a telep gyengesége, vagy egyéb okból nem jön
CLRF PWM1CON ;létre megadott időn belül a 400V, akkor kikapcsolom
BSF BUZZER ;a PWM csatornát, és szaggatott hangjelzést adok.
IDOZITO D'1250'
BSF ISW
NOP
BTFSC ISW
GOTO $-1
BCF BUZZER
IDOZITO D'800'
BSF ISW
NOP
BTFSC ISW
GOTO $-1
GOTO TELEP_GYENGE
;-------------------------------------------------------------------------------
MEGSZAKITAS
MOVWF MENT_WREG ;Elmentem W regiszter aktuális értékét
SWAPF STATUS,W
MOVWF MENT_STATUS
BTFSS INTCON,0 ;Ellenőrzöm, mi váltotta ki a megszakítást. Ha nem
GOTO MSZ1 ;részecske becsapódás, akkor csak Timer 2 lehetett,
MOVLW D'100' ;ezért átugrom MSZ1-re. Ha mégis, akkor SIP_IDO-be
MOVWF SIP_IDO ;100-at töltök, bekapcsolom a Buzzert, törlöm IOC
BSF BUZZER ;FLAG bitjét, valamint IOCAF regisztert, majd MSZ4-re
BCF INTCON,0 ;ugrok.
CLRF IOCAF
GOTO MSZ4
MSZ1
BTFSS ISW ;Ha időzítő segédkapcsoló be van kapcsolva, akkor
GOTO MSZ2 ;visszaszámoltatom a beálított értékről.
MOVLW 1 ;Mivel a PIC10-es nem ismeri a SUBWFB parancsot, és a
SUBWF TOLTES_L ;DECF parancs nincs hatással a CARRY bitre, ezért
BTFSC STATUS,C ;kicsit kacifántosabb a két byteos érték visszaszámolá-
GOTO MSZ2 ;sa. Valamint nem 0-nál, hanem csak mínusz 1-nél jár
SUBWF TOLTES_H ;le, de ennek nincs nagy jelentőssége.
BTFSC STATUS,C ;Ha lejár, kikapcsolom időzítő segédkapcsolóját, és
GOTO MSZ2 ;bekapcsolom telep gyenge segédkapcsolót.
BSF TGYSW
BCF ISW
MSZ2
BTFSC TGYSW ;Ha a telep gyenge segédkapcsoló be van kapcsolva, ezt
GOTO MSZ3 ;a rutint átugrom. Ez a rutin a becsapódáskori hang-
BTFSS BUZZER ;jelzés idejét állítja be 40msec-re.
GOTO MSZ3
DECFSZ SIP_IDO
GOTO MSZ3
BCF BUZZER
MSZ3
BCF PIR1,1 ;Timer 2 FLAG bitjének kikapcsolása.
MSZ4
SWAPF MENT_STATUS,W
MOVWF STATUS
MOVF MENT_WREG,W ;W regiszter tartalmának visszatöltése
RETFIE ;Kilépés a megszakításból.
END
A cikk még nem ért véget, lapozz!
Értékeléshez bejelentkezés szükséges!
|
|