|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 3:06 pm Naslov sporočila: PIC16F88 <>ATTiny26 |
|
|
Citiram: |
Na kratko, z PICi je en velik križ, raje razmislite o AVRjih in jih tudi uporabite. |
Glede na take ter podobne izjave sem sklenil narediti primerjalni test. Edinega AVR-ja , ki sem ga imel doma in je po periferiji podoben kakemu PIC-ju je Attiny26 - podoben je PIC16F88.
Nekaj osnovnih podatkov:(copy/paste PDF)
Tiny26
Features
• High-performance, Low-power AVR® 8-bit Microcontroller
• RISC Architecture
– 118 Powerful Instructions – Most Single Clock Cycle Execution
– 32 x 8 General Purpose Working Registers
– Fully Static Operation
– Up to 16 MIPS Throughput at 16 MHz
• Data and Non-volatile Program Memory
– 2K Bytes of In-System Programmable Program Memory Flash
Endurance: 10,000 Write/Erase Cycles
– 128 Bytes of In-System Programmable EEPROM
Endurance: 100,000 Write/Erase Cycles
– 128 Bytes Internal SRAM
– Programming Lock for Flash Program and EEPROM Data Security
• Peripheral Features
– 8-bit Timer/Counter with Separate Prescaler
– 8-bit High-speed Timer with Separate Prescaler
2 High Frequency PWM Outputs with Separate Output Compare Registers
Non-overlapping Inverted PWM Output Pins
– Universal Serial Interface with Start Condition Detector
– 10-bit ADC
11 Single Ended Channels
8 Differential ADC Channels
7 Differential ADC Channel Pairs with Programmable Gain (1x, 20x)
– On-chip Analog Comparator
– External Interrupt
– Pin Change Interrupt on 11 Pins
– Programmable Watchdog Timer with Separate On-chip Oscillator
• Special Microcontroller Features
– Low Power Idle, Noise Reduction, and Power-down Modes
– Power-on Reset and Programmable Brown-out Detection
– External and Internal Interrupt Sources
– In-System Programmable via SPI Port
– Internal Calibrated RC Oscillator
• I/O and Packages
– 20-lead PDIP/SOIC: 16 Programmable I/O Lines
– 32-lead QFN/MLF: 16 programmable I/O Lines
• Operating Voltages
– 2.7V - 5.5V for ATtiny26L
– 4.5V - 5.5V for ATtiny26
• Speed Grades
– 0 - 8 MHz for ATtiny26L
– 0 - 16 MHz for ATtiny26
• Power Consumption at 1 MHz, 3V and 25°C for ATtiny26L
– Active 16 MHz, 5V and 25°C: Typ 15 mA
– Active 1 MHz, 3V and 25°C: 0.70 mA
– Idle Mode 1 MHz, 3V and 25°C: 0.18 mA
– Power-down Mode: < 1 μA
8-bit
Microcontroller
with 2K Bytes
Flash
ATtiny26
ATtiny26L
16F88
• Power-Managed modes:
- Primary Run: RC oscillator, 76 µA, 1 MHz, 2V
- RC_RUN: 7 µA, 31.25 kHz, 2V
- SEC_RUN: 9 µA, 32 kHz, 2V
- Sleep: 0.1 µA, 2V
• Timer1 Oscillator: 1.8 µA, 32 kHz, 2V
• Watchdog Timer: 2.2 µA, 2V
• Two-Speed Oscillator Start-up
Oscillators:
• Three Crystal modes:
- LP, XT, HS: up to 20 MHz
• Two External RC modes
• One External Clock mode:
- ECIO: up to 20 MHz
• Internal oscillator block:
- 8 user selectable frequencies: 31 kHz,
125 kHz, 250 kHz, 500 kHz, 1 MHz, 2 MHz,
4MHz, 8MHz
Peripheral Features:
• Capture, Compare, PWM (CCP) module:
- Capture is 16-bit, max. resolution is 12.5 ns
- Compare is 16-bit, max. resolution is 200 ns
- PWM max. resolution is 10-bit
• 10-bit, 7-channel Analog-to-Digital Converter
• Synchronous Serial Port (SSP) with SPI™
(Master/Slave) and I
2C™ (Slave)
• Addressable Universal Synchronous
Asynchronous Receiver Transmitter
(AUSART/SCI) with 9-bit address detection:
- RS-232 operation using internal oscillator
(no external crystal required)
• Dual Analog Comparator module:
- Programmable on-chip voltage reference
- Programmable input multiplexing from device
inputs and internal voltage reference
- Comparator outputs are externally accessible
Po periferiji sta si zelo podobna. Pic ima sicer malo več pomnilnika a to v danem primeru ne igra vloge.
Obe primerjalni aplikaciji bosta pisani v assemblerju. Za attiny-a bom vzel tole, ki sem jo napisal nekaj dni nazaj.
***klik***
Za pic-a jo bom pisal ter "lepil" sproti. (ter koščke kode skušal komentirati na forumu)
Nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 3:16 pm Naslov sporočila: |
|
|
V nadaljevanju koščki kode, katero bom skušal komentirati.
Za pisanje je uporabljeno free orodje. AVR Studio za Tiniy-a ter MPLAB za PIC-a.
Orodja sta si se presenetljivo podobna, tako da poznavalcem enega drugo ne bo delalo preglavic.
"Glavi" programa sta si za oba mikrokontrolerja zelo podobni.
Tiny26
Koda: |
;----------------------------------------
;testni program tiny26
;dvokanalni analogni instument z LCD
;prikazovalnikom
;----------------------------------------
.include "tn26def.inc"
.def tmp =r16
.def tmp1 =r17
.def tmp2 =r18
;----------------------------------------
;displej definicija pinov
.equ E = 4
.equ RS = 5
;-----------------------------------------
.def DTTICA =r22
.def TTICA =r23
.def STICA =r24
.def DTICA =r25
.def ENICA =r26
.def ADC_TMP = r27
.def H_BITI = r2 //pomozni register
.def L_BITI = r3
.def H_BITI2 = r4
.def L_BITI2 = r5
.def KONTROLNI = r6
|
16F88
Koda: |
;//////////////////////////////////////////////////
;-------------------------------------
;vlotmeter P16f88
;Ekvilalentni program kot za Attiny26
;-------------------------------------
;Program Configuration Register 1
__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_OFF & _WDT_OFF & _INTRC_IO
;Program Configuration Register 2
__CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF
cblock 0x20
TMP,TMP1,t1,t2,t3,H_BITI,L_BITI,H_TMP,L_TMP,ENICA,DTICA,STICA,TTICA,DTTICA
L_TMP1,H_TMP1
endc
list P=16F88
#include "p16f88.inc"
#define E PORTB,4
#define RS PORTB,5 |
V obeh v "glavi" določimo include datoteko,
Pic omogoča tudi definiranje fuse bitov česar tiniy nima. (tole recimo pogrešam pri avr-ju)
Nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 3:23 pm Naslov sporočila: |
|
|
Reset vektor:
ATTiny26
Koda: |
org $000
rjmp Glavni ;skok na glavni program
.org $009
|
16F88
Citiram: |
org 0x0
goto Glavni
org 0x5 |
Oba imata reset vektor na lokaciji 0
pri picu je na lokaciji 0x04 prekinitveni vektor za vse prekinitve. AVR ima za vsako prekinitev svojo lokacijo ter sledijo po vrsti za reset vektorjem. Bistvene razlike ni. Pri picu je potrebno po prekinitvi ugotavljati za katero vrsto prekinitve je šlo tega pri AVR ni potrebno.
Nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 3:42 pm Naslov sporočila: |
|
|
"Telo" programa:
Atiny26
Koda: |
Glavni:
ldi tmp,low(ramend)
out SP,tmp
ldi tmp,0b100
out DDRA,tmp
clr tmp
out PORTB,tmp
ldi tmp,0b00111111
out DDRB,tmp ;pini na katere je priključen displej so izhodi
// ldi ZL,low(OSC_CAL*2) ;kalibracija
// ldi ZH,high(OSC_CAL*2)
// lpm
mov r16,r0
ldi tmp,0
out OSCCAL,r16
;//////////////////////////////////////////////////////////////////
;pozdravni napis
rcall LCD_INIC ;inicializacija LC
ldi tmp,0b00001100
rcall POSLJI_ZNAK ;izklop cursorja
ldi ZL,low(NAPIS*2)
ldi ZH,high(NAPIS*2)
rcall LCD_TXT ;pozdravni napis 1/2 displeja
cbi PORTB,RS
ldi tmp,0b11000000 ;premik na drugo polovico
rcall POSLJI_ZNAK
ldi ZL,low(NAPIS1*2)
ldi ZH,high(NAPIS1*2)
rcall LCD_TXT ;pozdravni napis 2/2 displeja
rcall PAVZA1s
cbi PORTB,RS
ldi tmp,0b00000001 ;birsanje displeja
rcall POSLJI_ZNAK
;////////////////////////////////////////////////////////////////
ldi tmp,0b10000000 ;izbira AD kanala, referenčne napetosti, poravnava desno
out ADMUX,tmp
ldi tmp,0b11100011
out ADCSR,tmp
sbi ADCSR,ADSC
ZANKA:
sbis ADCSR,ADIF
rjmp zanka ;cakam na konec prekinitve
cbi ADCSR,ADIF
in L_BITI2,ADCL ;preberem rezultat meritve v registre za nadaljno obdelavo
in H_BITI2,ADCH
rcall PREKORACITEV ;kontrola prekoracitve
sbrs KONTROLNI,0
rcall B16toBNC ;10 bitnega rezultata za prikaz
sbic ADMUX,0 ;na katerem kanalu je bila izvedena meritev
rjmp KANAL1
rjmp KANAL0
KANAL0: // meritev napetosti
rcall VRSTA1 ;priprava mesta za vpis na LCD
sbi ADMUX,0 ;preklop na drugi kanal
tst TTICA ;je prikaz na tisocici 0
brne NI_NIC ;ne
cp TTICA,STICA ;je tudi prikaz na stotici 0
ldi TTICA,10 ;tisočice ne kazem na 10 mestu je prazen znak
brne NI_NIC
ldi STICA,10 ;tudi na stotici je prikaz nic
NI_NIC:
mov tmp,TTICA
rcall LCD_CIFRA
mov tmp,STICA
rcall LCD_CIFRA
mov tmp,DTICA
rcall LCD_CIFRA
ldi tmp,'.'
rcall POSLJI_ZNAK
mov tmp,ENICA
rcall LCD_CIFRA
ldi tmp,'V'
rcall POSLJI_ZNAK
rjmp ZANKA2
KANAL1: // meritev toka
rcall VRSTA2 ;priprava mesta za vpis na LCD
cbi ADMUX,0 ;preklop na drugi kanal
tst TTICA
brne NI_NIC1
ldi TTICA,10
NI_NIC1:
mov tmp,TTICA
rcall LCD_CIFRA
mov tmp,STICA
rcall LCD_CIFRA
ldi tmp,'.'
rcall POSLJI_ZNAK
mov tmp,DTICA
rcall LCD_CIFRA
mov tmp,ENICA
rcall LCD_CIFRA
ldi tmp,'A'
rcall POSLJI_ZNAK
ZANKA2:
rcall PAVZA200ms
rjmp ZANKA |
16F88
Koda: |
Glavni
clrf PORTB
banksel TRISB
clrf TRISB ;pini portab so izhodi
movlw b'011000000'
movwf OSCCON
banksel PORTB
call LCD_INIC ;inicializacija LCD
movlw b'1100'
call POSLJI_ZNAK ;izklop cursorja
;/////////////////////////////////
;pozdravni napis
bsf RS ;omogocim pisanje
clrf TMP1
TEKST1
movf TMP1,w
call NAPIS
addlw .0
btfsc STATUS,Z
goto TEKST2
call POSLJI_ZNAK
call Pavza15mS
incf TMP1,f
goto TEKST1
TEKST2
bcf RS
movlw b'11000000'
call POSLJI_ZNAK
bsf RS ;omogocim pisanje
clrf TMP1
TEKST21
movf TMP1,w
call NAPIS2
addlw .0
btfsc STATUS,Z
goto KONEC_T
call POSLJI_ZNAK
call Pavza15mS
incf TMP1,f
goto TEKST21
KONEC_T
bcf RS
movlw .1
call POSLJI_ZNAK ;brisanje displeja
call Pavza15mS
;///////////////////////////////////////////
banksel ANSEL
movlw b'11'
movwf ANSEL ;izbira AD kanalov
movlw b'11000000'
movwf ADCON1 ;desna poravnava rezultata referenca Vdd
banksel ADCON0
movlw b'1000001'
movwf ADCON0 ;vklop AD modula Fosc 1/8 kanal0
;//////////////////////////////////////////////////////////
ZANKA
bsf ADCON0,GO ;vklop meritve
btfsc ADCON0,NOT_DONE ;cakam na konec meritve
goto $-1
banksel ADRESL ;
movf ADRESL,w ;\
banksel ADRESH ; >priprava za prikaz
movwf L_TMP ;/
movf ADRESH,w ;
movwf H_TMP
call B16toBNC
call PREKORACITEV
btfsc ADCON0,CHS0 ;meritev na kanalu0?
goto KANAL1 ;ne
bsf ADCON0,CHS0 ;da vklopim drugi kanal
bcf RS
movlw b'10000000'
call POSLJI_ZNAK
bsf RS
call UREDI
movlw ' '
call POSLJI_ZNAK
movf TTICA,w
call CIFRE
call POSLJI_ZNAK
movf STICA,w
call CIFRE
call POSLJI_ZNAK
movf DTICA,w
call CIFRE
call POSLJI_ZNAK
movlw '.'
call POSLJI_ZNAK
movf ENICA,w
call CIFRE
call POSLJI_ZNAK
movlw 'V'
call POSLJI_ZNAK
call Pavza200mS
goto ZANKA
KANAL1
bcf ADCON0,CHS0
bcf RS
movlw b'11000000'
call POSLJI_ZNAK
movlw .10
movf TTICA,f
btfsc STATUS,Z
movwf TTICA
bsf RS
movlw ' '
call POSLJI_ZNAK
movf TTICA,w
call CIFRE
call POSLJI_ZNAK
movf STICA,w
call CIFRE
call POSLJI_ZNAK
movlw '.'
call POSLJI_ZNAK
movf DTICA,w
call CIFRE
call POSLJI_ZNAK
movf ENICA,w
call CIFRE
call POSLJI_ZNAK
movlw 'A'
call POSLJI_ZNAK
call Pavza200mS
goto ZANKA
|
Tukaj pa je že razvidna razlika v načinu programiranja.
Pic ima registre razporejene v več bankah, kar lahko kar zagreni programiranje, če se ne izbere prava banka. Pic ima le en W (delovni register). Sicer ima 368 SNR razporejenih po več bankah. Assembler pozna le 36 instrukcij. Pri pic-u je sklad 8 nivojski hardverski.
Avr nima bank. Tiny premore 32 splošno namenskih registrov. Od tega je zgornjih 16 delovnih. Assembler pozna 118 instrukcij. Zaradi tega je malo bolj "okreten" kot pic. Sklad pri AVR-ju je omejen s pomnilnikom, katerega določimo na začetku programa.
Nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 4:00 pm Naslov sporočila: |
|
|
Tabele:
Attiny26
Koda: |
NAPIS:
.db " Elektro",0
NAPIS1:
.db"nik.si",0
CIFRE:
.db "0123456789 -ABCD"
|
16F84
Koda: |
org 0x5
NAPIS
addwf PCL,f
dt " Elektro",0
NAPIS2
addwf PCL,f
dt "nik.si",0
CIFRE
addwf PCL,f
dt "0123456789 -ABCD",0
|
Oba assemblerja omogočata branje tabel, ki je nazven zelo podoben. Hardwersko pa deluje drugače.
PIC-ova tabela je grajena kot seznam instukcij "retlw" vrednost.
Pri AVR-ju pa "je na lokaciji tabele vpisana konkretna vrednost katero čitamo s pomočjo instrukcije LPM ter Z ter r0 registra.
nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 6:42 pm Naslov sporočila: |
|
|
Uporabljene procedure:
Attiny26
;
Koda: |
-------------------------------------------------------
;klic procedure premakne mesto vpisa
;v prvo ali drugo vrstico
;-------------------------------------------------------
VRSTA2:
ldi tmp,0b11000001
rjmp VRSTA1a
VRSTA1:
ldi tmp,0b10000000
VRSTA1a:
cbi PORTB,RS
rcall POSLJI_ZNAK
rcall PAVZA15mS
ret
;------------------------------------------------------
;procedura ob prekoracitivi izpolni na displej
;napise "- - - -"
;postavljem bo tudi bit 0 registra kontrolni
;------------------------------------------------------
PREKORACITEV:
mov tmp,KONTROLNI
cbr tmp,0b1
mov KONTROLNI,tmp ;predposavljam da ni prekoracitve
ldi tmp,high(1001)
cp H_BITI2,tmp ;primerjava gornjih bitiov (če je prikaz 1000)
breq SPODNJI
ret
SPODNJI:
ldi tmp,low(1001)
cp tmp,L_BITI2
brcs PREVEC
ret
PREVEC:
mov tmp,KONTROLNI
sbr tmp,0b1
mov KONTROLNI,tmp ;oznacim prekoracitev
ldi tmp,11
mov ENICA,tmp
mov DTICA,tmp
mov STICA,tmp
mov TTICA,tmp
ret
;------------------------------------------------------
;procedura pretvori 16 bitno stevilko v
;rezultat je v 5-tih registrih z začetkom v registru
;na lokaciji določeni v ZL. Uproablja se indirektno
;naslavljanje. Vrednost za pretvorbo pa predhodno
;vpišemo v register L_BITI2 (nizki biti) ter H_BITI
;visoki biti
;------------------------------------------------------
B16toBNC:
clr ZH
ldi ZL,22
ldi tmp,low(10000)
mov L_BITI,tmp
ldi tmp,high(10000)
mov H_BITI,tmp
rcall RACUNAJ_BNC
ldi tmp,low(1000)
mov L_BITI,tmp
ldi tmp,high(1000)
mov H_BITI,tmp
rcall RACUNAJ_BNC
ldi tmp,low(100)
mov L_BITI,tmp
ldi tmp,high(100)
mov H_BITI,tmp
rcall RACUNAJ_BNC
ldi tmp,low(10)
mov L_BITI,tmp
ldi tmp,high(10)
mov H_BITI,tmp
rcall RACUNAJ_BNC
st Z+,L_BITI2
ret
RACUNAJ_BNC:
clr tmp //register uporabljam za stevec
RACUNAJ_BNC1:
cp H_BITI2,H_BITI //primerjava zgornjih visokih bitov z decimalnimi biti
brcs BNC_KONEC //visoki biti so nizji
brne BNC_ODSTEJ //visoki biti so višji - bom odstel
cp L_BITI2,L_BITI // primerjava spodnjih bitov
brcs BNC_KONEC
BNC_ODSTEJ:
sub L_BITI2,L_BITI //odstejem decimalno od spodnjih bitov
sbc H_BITI2,H_BITI
inc tmp
rjmp RACUNAJ_BNC1
BNC_KONEC:
st Z+,tmp
ret
;---------------------------------------------
;Procedura pretvori 10 bitno AD vredost
;v 4 registre za prikaz
;enica,dtica,stica,ttica
;---------------------------------------------
HEX_DEC:
clr ENICA
clr DTICA
clr STICA
clr TTICA
mov ENICA,tmp
CIFRA100:
subi ENICA,100
brcs CIFRA10
inc STICA
rjmp CIFRA100
CIFRA10:
ldi tmp,100
add ENICA,tmp
CIFRA10a:
subi ENICA,10
brcs CIFRA1
inc DTICA
rjmp CIFRA10a
CIFRA1:
ldi tmp,10
add ENICA,tmp
ret
;---------------------------------------------
;procedura poslje stevilko dobljeno v register
;tmp na displej
;---------------------------------------------
LCD_CIFRA:
ldi ZL,low(CIFRE*2)
ldi ZH, high(CIFRE*2) ;v Z register vpisem zacetek tabele
add ZL,tmp ;povecam nizek stevec za vrednost za prikaz
brvc NA_PRIKAZ ;register ZL ni prekoracen
inc ZH ;prekoracitev registra ZL zato povecam ZH
NA_PRIKAZ:
lpm ;branje lokacije
mov tmp,r0 ;prepis v register tmp
sbi PORTB,RS ;vpis v podatkovni ram
rcall POSLJI_ZNAK ;procedura izvede vpis
ret
;-------------------------------------------
;procedura pošlje vsebino tabele na displej
;-------------------------------------------
LCD_TXT:
sbi PORTB,RS
lpm
tst R0
brne ZNAK_OK
ret
ZNAK_OK:
mov tmp,r0
rcall Pavza200mS ;znake pisem z zamikom 200mS
rcall POSLJI_ZNAK
inc ZL
brne LCD_TXT
inc ZH
rjmp LCD_TXT
;-----------------------------------------------------------
;procedura inicializira LCD
;lcd je priključen na portb
;uporabljena je 4 bitna komunikacija
;PB0-PB3 - data linije
;PB4-RS PB5-E
;-----------------------------------------------------------
LCD_INIC:
rcall Pavza15mS ;pavza 15mS
ldi tmp,0b11
out PORTB,tmp
rcall VPISI
rcall Pavza4100uS ;pavza 4.1mS
rcall VPISI
rcall Pavza100uS ;pavza 100uS
rcall VPISI
rcall Pavza4100uS
cbi PORTB,0
rcall VPISI
rcall Pavza40uS ;4bitino
rcall VPISI ;1
ldi tmp,0b1100
out PORTB,tmp
rcall VPISI ;2
rcall PAVZA40uS
clr tmp
out PORTB,tmp
rcall VPISI ;1
ldi tmp,0b1000
out PORTB,tmp ;2
rcall VPISI
rcall PAVZA40uS ;displjej off cursor off blink off
clr tmp
out PORTB,tmp
rcall VPISI ;1
ldi tmp,0b1111
out PORTB,tmp ;2
rcall VPISI
rcall PAVZA1700uS ;displjej on cursor on blink on
clr tmp
out PORTB,tmp
rcall VPISI ;1
ldi tmp,0b100
out PORTB,tmp ;2 Displej stoji cursor se pomika desno (insert izkljucen)
rcall VPISI
rcall PAVZA40uS ;
clr tmp
out PORTB,tmp
rcall VPISI
ldi tmp,1
out PORTB,tmp
rcall VPISI
rcall PAVZA15mS ;brisanje displeja
ret
;-----------------------------------------------------------
;Pavza 1700uS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza1700uS:
ldi r20,210
ldi r21,9
P_zanka5:
dec r20
brne P_zanka5
dec r21
brne P_zanka5
ret
;-----------------------------------------------------------
;Pavza 40uS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza40uS:
ldi r20,51
P_zanka4:
dec r20
brne P_zanka4
ret
;-----------------------------------------------------------
;Pavza 100uS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza100uS:
ldi r20,131
P_zanka3:
dec r20
brne P_zanka3
ret
;-----------------------------------------------------------
;Pavza 4100uS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza4100uS:
ldi r20,73
ldi r21,22
P_zanka2:
dec r20
brne P_zanka2
dec r21
brne P_zanka2
nop
ret
;-----------------------------------------------------------
;Pavza 15mS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza15mS:
ldi r20,233
ldi r21,78
P_zanka1:
dec r20
brne P_zanka1
dec r21
brne P_zanka1
nop
ret
;-----------------------------------------------------------
;procedura izvede vpis na lcd
;-----------------------------------------------------------
VPISI:
sbi PORTB,E
nop
nop
cbi PORTB,E
ret
;-----------------------------------------------------------
;Procedura pošlje karakter dobljen v tmp register na displje
;uporabljeni registri tmp,tmp1,tmp2
;-----------------------------------------------------------
POSLJI_ZNAK:
mov tmp1,tmp
swap tmp1
andi tmp,0b1111
andi tmp1,0b1111
in tmp2,PORTB
cbr tmp2,0b1111 ;brisem bite ki jih potrebuje lcd
add tmp1,tmp2
out PORTB,tmp1
rcall VPISI
add tmp,tmp2
out PORTB,tmp
rcall VPISI
rcall Pavza40us
ret
;-----------------------------------------------------------
;Pavza 200mS Oscilator 4Mhz
;-----------------------------------------------------------
Pavza200mS:
ldi r20,239
ldi r21,15
ldi r22,5
P_zanka:
dec r20
brne P_zanka
dec r21
brne P_zanka
dec r22
brne P_zanka
nop
nop
ret
;-----------------------------------------------------------
;Pavza 1S Oscilator 4Mhz
;-----------------------------------------------------------
Pavza1S:
ldi r20,189
ldi r21,75
ldi r22,21
P_zanka6:
dec r20
brne P_zanka6
dec r21
brne P_zanka6
dec r22
brne P_zanka6
ret
|
16F88
Koda: |
;-----------------------------------------------
;procedura kontrolira, da prikaz ne bo
;vecji od 1009 - v primeru prekoracitve
;bodo prikazane ----
;-----------------------------------------------
PREKORACITEV
movf TTICA,f
btfsc STATUS,Z
return ;na tisociti ni 0
movlw .1
subwf DTICA,w
btfss STATUS,C
return
movlw .11
movwf ENICA
movwf DTICA
movwf STICA
movwf TTICA
return
;-----------------------------------------------
;procedura uredi prikaz
;ne prikazuje začetnih 0
;----------------------------------------------
UREDI
movf TTICA,f
btfss STATUS,Z
return
movlw .10
movwf TTICA
movf STICA,f
btfsc STATUS,Z
movwf STICA
return
;------------------------------------------------
;pretvorba 16 bitne vrednosti v 4 registre
;pripravljene za prikaz
;16 bitno vrednost pred klicom procedure
;vpišemo v registre H_TMP ter L_TMP
;rezultat je v registrih ENICA,DTICA,STICA,TTICA
;DTTICA
;-----------------------------------------------
B16toBNC
movlw high(.10000)
movwf H_BITI
movlw low(.10000)
movwf L_BITI
call ODSTEJ
movf TMP1,w
movwf DTTICA
movlw high(.1000)
movwf H_BITI
movlw low(.1000)
movwf L_BITI
call ODSTEJ
movf TMP1,w
movwf TTICA
movlw high(.100)
movwf H_BITI
movlw low(.100)
movwf L_BITI
call ODSTEJ
movf TMP1,w
movwf STICA
movlw high(.10)
movwf H_BITI
movlw low(.10)
movwf L_BITI
call ODSTEJ
movf TMP1,w
movwf DTICA
movf L_TMP,w
movwf ENICA
return
ODSTEJ
clrf TMP1
PONOVI
movf H_BITI,w
subwf H_TMP,w
btfss STATUS,C
return ;stevilo je manjse
btfss STATUS,Z
goto ODSTEJ1
movf L_BITI,w
subwf L_TMP,w
btfss STATUS,C
return ;stevilo je manjse
ODSTEJ1
movf L_BITI,w
subwf L_TMP,f
btfss STATUS,C
decf H_TMP,f
movf H_BITI,w
subwf H_TMP,f
incf TMP1,f
goto PONOVI
;-----------------------------------------
;inicializacija displeja
;----------------------------------------
LCD_INIC
call Pavza15mS
movlw b'11'
movwf PORTB
call VPISI
call Pavza4100uS
call VPISI
call Pavza100uS
call VPISI
call Pavza4100uS
bcf PORTB,0
call VPISI
call Pavza40uS
call VPISI
movlw b'1100'
movwf PORTB
call VPISI
call Pavza40uS
clrf PORTB
call VPISI
movlw b'1000'
movwf PORTB
call VPISI
call Pavza40uS
clrf PORTB
call VPISI
movlw b'1111'
movwf PORTB
call VPISI
call Pavza1700uS
clrf PORTB
call VPISI
movlw b'100'
movwf PORTB
call VPISI
call Pavza40uS
clrf PORTB
call VPISI
bsf PORTB,0
call VPISI
call Pavza15mS
return
;----------------------------------------
;procedura izvede vpis
;----------------------------------------
VPISI
bsf E
nop
nop
bcf E
return
;------ 15 mS Pavza 4 MHz
Pavza15mS
movlw .20
movwf t1
movlw .121
movwf t2
ZP1
decfsz t2,f
goto ZP1
decfsz t1,f
goto ZP1
return
;------ 4100 uS Pavza 4 MHz
Pavza4100uS
movlw .6
movwf t1
movlw .81
movwf t2
ZP2
decfsz t2,f
goto ZP2
decfsz t1,f
goto ZP2
return
;------ 100 uS Pavza 4 MHz
Pavza100uS
movlw .31
movwf t2
ZP3
decfsz t2,f
goto ZP3
nop
return
;------ 40 uS Pavza 4 MHz
Pavza40uS
movlw .11
movwf t2
ZP4
decfsz t2,f
goto ZP4
nop
return
;------ 1700 uS Pavza 4 MHz
Pavza1700uS
movlw .3
movwf t1
movlw .51
movwf t2
ZP5
decfsz t2,f
goto ZP5
decfsz t1,f
goto ZP5
return
;pavza 1s
Pavza1S
movlw .6
movwf t1
movlw .24
movwf t2
movlw .167
movwf t3
ZP6
decfsz t3,f
goto ZP6
decfsz t2,f
goto ZP6
decfsz t1,f
goto ZP6
return
;pavza 200ms
Pavza200mS
movlw .2
movwf t1
movlw .5
movwf t2
movlw .183
movwf t3
ZP7
decfsz t3,f
goto ZP7
decfsz t2,f
goto ZP7
decfsz t1,f
goto ZP7
return
;------------------------------------
;procedura poslje znak dobljen v
; W na LCD
;------------------------------------
POSLJI_ZNAK
movwf TMP ;shranem W
movlw b'11110000'
andwf PORTB,f ;brisanje pinov LCD
swapf TMP,W
andlw b'1111'
iorwf PORTB,f
call VPISI
movlw b'11110000'
andwf PORTB,f ;brisanje pinov LCD
movf TMP,w
andlw b'1111'
iorwf PORTB,f
call VPISI
call Pavza40uS
return
|
Procedure zajemajo inicializacijo LCD, 4 bitno komunikacijo, "kracanje" po LCD-ju, nekaj pretvarjanja ter racunanja. S pomnilnikom nisem posebej varčeval. Marikaj se da napisat krajše in varčnejše. (recimo pavze) Ker sem pred časom napisal program za izračun pavz sem se ga poslužil. Zaradi tega so pavze tako napisane.
Nadaljevanje sledi...
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 7:09 pm Naslov sporočila: |
|
|
LCD živi.
Še nekaj mojih zaključnih misli.
V obeh primerih sem uporabil orodje, katero proizvajalca nudita free. AvrStudio ter MPLAB. Oba orodja sta zelo dobra. Imata dobra simulatorja. Prav tako je zelo dober help v AVR assemblerju. Za MPLAB ne vem - ga nisem nikoli uporabljal V AVR Studio pogrešam številčenje vrstic levo zraven kode.
Za programiranje AVR sem uporabil darkotov programator, ki se je izkazal kot izredno zanseljiv. Programiranje je možno iz samega programskega vmesnika AVR studia. Programator je izredno hiter. Programiranje ne traje dlje kot kako sekundo.
Za programiranje PIC-a sem uporabil ICD2 clone. Gre za programator ter debuger narejen v samogradnji. Tudi tukaj je možno programiranje iz samega okolja MPLAB. Hitrost je podobna kot pri darkotovem programatorju.
Zmagovalca oz. poraženca po mojem mnenju ni.
PIC ima nekaj stvari, ki jih pri AVR-ju pogrešam. Recimo programsko definiranje fuse bitov. Pa mogoče "avtomatski sklad" katerga ni potrebno programsko določiti na začetku programa. Pic ima tudi nekaj stvari "preveč". Recimo BANKE, ki marsikomu zagrenijo programiranje. (ko se jih navadiš te sicer ne motijo več, pa jih pri AVR pogrešaš ) PIC ima le en W (delovni register). Nič ne bi bilo narobe, če bi imel katerega več. AVR assembler ima bistveno več instrukcij. Mogoče to pripomore, da je napisana kaka programska vrstica manj. (vrstic sicer nisem štel) a potrebuješ več časa, da se jih naučiš, ali uporabiš "plonk ceglc" s spiskom kot jaz.
Pri obeh pogrešam recimo samodejno shranitev W ob vstopu v prekinitev. Dobro, AVR ima več registrov a PIC ima le enega. Tega bi lahko lepo hardversko "potisnili" v sklad ter ga po koncu prekinitve vrnili.
Opis: |
|
Velikost datoteke: |
411.06 KB |
Pogledana: |
18 krat |
|
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.67 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Sob Jul 26, 2008 9:05 pm Naslov sporočila: |
|
|
Tako da isto sranje isto pakovanje z vašim mnenju se strinjam in mislim prav tako večna tekmeca večno izenačena drug brez drugega pa ne bi mogla živet!
Pač tako kot pa če bi pogledal knjigo s tdim platnicam in pa knjigo z mehkim platnicam iste vsebine!!!
_________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
podboj Član
Pridružen-a: Sre 25 Maj 2005 11:48 Prispevkov: 1251 Aktiv.: 5.62 Kraj: Postojna, Sežana, Ljubljana
|
Objavljeno: Sob Jul 26, 2008 10:00 pm Naslov sporočila: |
|
|
Silvo: morda ne bi bila slaba ideja če objaviš ta voltmeter s picem v zbirki projektov.
|
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 10:02 pm Naslov sporočila: |
|
|
podboj je napisal/a: |
Silvo: morda ne bi bila slaba ideja če objaviš ta voltmeter s picem v zbirki projektov. |
Ko bom pripravil dokumentacijo, bom vse pripel med projekte. Za AVR je načeloma končana. Moram le še narisat načrt.
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
program_er Član
Pridružen-a: Sob 08 Mar 2008 13:47 Prispevkov: 2173 Aktiv.: 11.08 Kraj: Maribor (Pohorje)
|
Objavljeno: Sob Jul 26, 2008 10:29 pm Naslov sporočila: |
|
|
podboj je napisal/a: |
Silvo: morda ne bi bila slaba ideja če objaviš ta voltmeter s picem v zbirki projektov. |
Ja, pa voltmeter za Atmelom tudi, prosim.
_________________ Upanje ni del naše projektne strategije.
Member of Trisat - 1. Slovenian satellite running new fault tolerant aerospace processor.
|
|
Nazaj na vrh |
|
|
PC_Master Član
Pridružen-a: Pon 17 Mar 2008 20:10 Prispevkov: 319 Aktiv.: 1.63 Kraj: Domžale , Blizu Ljubljane , Poštna 1230
|
Objavljeno: Sob Jul 26, 2008 11:08 pm Naslov sporočila: |
|
|
Baje so AVRji cenejši od PICev. Uporabljam AVRje , in imam sam križ iz njimi.
|
|
Nazaj na vrh |
|
|
drVrh Član
Pridružen-a: Sre 20 Feb 2008 20:17 Prispevkov: 918 Aktiv.: 4.67 Kraj: Slovenija-Koroska-Prevalje-Lese
|
Objavljeno: Sob Jul 26, 2008 11:30 pm Naslov sporočila: |
|
|
PC_Master je napisal/a: |
Baje so AVRji cenejši od PICev. Uporabljam AVRje , in imam sam križ iz njimi. |
Aja, kako pa je z sampli pri AVR-ji ji lahko dobiš kot sample?
No če že jih dobiš kot sample imaš potem zelo obširna obzorja če pa ne pa so PIC-i v prednosti!
_________________ Iz dneva v dan sem se spraševal kaj je to elektrika, vendar nisem našel odgovora ... in še vedno si postavljam to vprašanje
LP
Grega |
|
Nazaj na vrh |
|
|
Silvo Moderator
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14555 Aktiv.: 65.33 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Jul 26, 2008 11:32 pm Naslov sporočila: |
|
|
PC_Master je napisal/a: |
Baje so AVRji cenejši od PICev. |
Mislim, da so kar pribižno enake. Primerjalna cena cenika HTE za omenjena primerka
PIC 5,12 € Tiny26 4,46 €
_________________ lp
Silvo |
|
Nazaj na vrh |
|
|
klemen88 Član
Pridružen-a: Tor 01 Jan 2008 17:37 Prispevkov: 747 Aktiv.: 3.76 Kraj: Slovenj Gradec
|
Objavljeno: Ned Jul 27, 2008 12:11 am Naslov sporočila: |
|
|
Moj odgovor k temu kaj je bolje PIC ali AVR.
Jaz mislim, da je tako: Bolši je tisti katerega znaš uporabljat oziroma poznaš programsko orodje za le-taga. Sam pa uporabljam AVR, ker smo imeli nekaj osnov v šoli.
Lp
|
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|