Προς το περιεχόμενο

microcontrolers


rkat13

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα σε όλους

Θα ήθελα να μάθω εάν υπάρχει κάποιος που ασχολείται με τον προγραμματισμό μικροελεγχτών της οικογένειας avr atmel.

Δημοσ.

Φίλε rkat13, έχω ασχοληθεί λιγάκι με το αντικείμενο. Οχι επαγγελματικα αλλά ακαδημαϊκά (είχα διδάξει ένα εξάμηνο το μάθημα). Αν έχεις κάποια αποροία θα χαρώ να σε βοηθήσω

Δημοσ.

Ναι μετά χαράς.Δεν μπορώ να κατανοήσω τους timers/counters και τον τρόπο λειτουργίας αυτών.Εαν μπορείς να μου πεις το πιο απλό παράδειγμα.

Ευχαριστώ εκ των προτέρων

Διαμαντής

  • 2 εβδομάδες αργότερα...
Δημοσ.

Gia sou.

Ali8eia ti 8es akrivos na ftiakseis;

A pulse frequency counting interface i kai mia Delay me xrisi timers/counters ;

Apo hlektronika kseris tipota;

Pos doulevi o telestikos se sindesmologia sigriti;

Spoudazeis pou8ena i aplos monos sou asxolise me AVR.

Pantos kala ekanes kai dialekses AVR apo ta PIC tis Microchip.

Einai polu pio grigora kai ligo pio ftina apo ta antistixa PIC.

Kai exei kai free C Compilers , eno ta PIC oxi.

Δημοσ.

Σόρυ που άργησα να απαντήσω, αλλά μόλις τώρα είδα το νέο Post, επειδή είμαι στην δουλεία τώρα δεν έχω τα παραδείγματα που θές, μόλις το laptop μου βγεί on-line (το απόγευμα) θα σου στείλω ένα παράδειγμαπου να δουλέυει

Δημοσ.

Ο.Κ ΘΑ ΠΕΡΙΜΕΝΩ ΤΟ ΜΗΝΥΜΑ.

ΝΑΙ ΕΧΩ ΤΕΛΕΙΩΣΕ ΗΛΕΚΤΡΟΝΙΚΟΣ ΑΠΟ ΤΟ 1993 ΠΡΙΝ ΕΡΘΟΥΝ ΟΙ ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΣΤΟ ΔΙΚΟ ΜΑΣ ΕΜΠΟΡΙΟ.ΠΑΡΑΛΛΗΛΑ ΤΕΛΕΙΩΝΩ ΚΑΙ ΗΛΕΚΤΡΟΛΟΓΟΣ ΓΙΑ ΝΑ ΚΑΝΩ ΕΝΑ ΩΡΑΙΟ ΠΑΝΤΡΕΜΑ

Δημοσ.

Gia sou.

Telika ti 8es den mou ipes akrivos.

Ti parageigma 8elis;

To pos doulevei o Timer/Counter 8a sou po oso mporo apla.

Uparxei enas metritis 8bit i 16bit analoga ti microcontroller exeis.

Merika exoun kai perisoterous apo 2 ton 8 bit kai 2 ton 16bit.

O metritis TCNT0 autos loipon metrai palmous i opoioi mporei na einai eksoteriki apo kapoio pin pou 8a oriseis esu.

I mporei na einai esoteriki apo to Clock tou Crystal i RC talantoti sto chip ean exei.

Autos loipon o metris auksanetai pros ta pano apo tous palmous autous esoterikous i eksoterikous.

Gia na oriseis esu pios na einai autos o palmos diegerseis uparxei enas allos kataxoritis elegxou o TCCR0 o opoios analoga me ta bit pou 8a tou kaneis enable diladi 1 kai kapoia disable diladi 0, 8a sou energopioisi pos 8a diegiretai o sigritis pou exei o microcontoller.

Diladi me arnitiko metopo i 8etiko metopo tou palmou (gia eksoterikous palmous) ktl.

Akoma ston kataxoriti auto uparxei kai alla bit pou xreazontai ri8misi ean 8elis na xrisimopoisis to 1/8 tou Clock i 64/clk ktl.

Koita kala to Data Manual exei odigies xrisis.

 

Auta se genikes grammes ean ginis pio sigekrimenos isos se voi8iso perisotero.

 

Bye

Δημοσ.

ΘΕΛΩ ΝΑ ΜΑΘΩ ΠΩΣ ΜΠΟΡΩ ΝΑ ΠΡΟΓΡΑΜΜΑΤΙΣΩ ΤΟΝ 90S2313 Π.Χ.ΓΙΑ ΝΑ ΚΡΑΤΑ ΤΗΝ PORTB ΓΙΑ ΠΑΡΑΔΕΙΓΜΑ ΑΝΟΙΧΤΗ ΓΙΑ 5 ΔΕΥΤΕΡΟΛΕΠΤΑ ΓΙΑ ΑΝ ΜΠΟΡΕΣΩ ΝΑ ΔΩ ΠΩΣ ΔΟΥΛΕΥΟΥ ΟΙ TIMERS/COUNTERS

Δημοσ.

Ελπίζω ότι έχεις το manual του AVR.

 

Πρώτα από όλα ενεργοποιείς τα Interrupt από κάποιον γενικό καταχωρητή (μπορεί GIMSK) μετά ενεργοποιείς τα interrupt του timer που σε βολεύει (TIMSK).

 

Ο timer δουλέυει ώς εξής,

 

ο παλμός του ρολογιού περνάει από έναν διαιρέτη (pre-scaler). Ο οποίος διαιρεί την συχνότητα του ρολογιού απο 1/1 έως 1/64 (νομίζω).

κάθε παλμός που περνάει από τον διαιρέτη αυξάνει την τιμή του timer κατα 1. όταν ο timer "γεμίσει" και συμβεί το overflow (δηλ. ο timer έχει μέγιστη τιμή και έρθει ο επόμενος παλμός) τότε συμβαίνει ένα interrupt.

 

Βάση λοιπόν της συχνότητας του Microcotroller του Pre-Scaler και του Μέγεθους του timer (8bit - 16bit) μπορείς να υπολογίσεις κάθε πότε συμβαίνει ένα interrupt. Αν o χρόνος του interrupt είναι αρκετός τον χρησιμοποιείς όπως είναι αν είναι μικρός (πχ 1 sec )τότε, κρατάς ένα global counter και τον αυξάνεις σε κάθε interrupt, όταν ο global counter φτάσει την τιμή που θες (πχ 5 για 5 δευτερόλεπτα) τότε κάνεις αυτό που θές και μηδενίζεις τον global counter....

Δημοσ.

Opos katalava 8elis na kaneis mia ka8isterisi gia 5sec.

Tote uparxoun duo tropoi na ta kaneis:

1) O palios kai ligo isos mperdemenos kata tous upologismous.

Einai na xrisimopioisis Delay me Deciment i Incriment i mia mesa

stin alli.

px.

 

;Paramenetrs for Delay

 

Delay_Parametri:

clr Delay1

clr Delay2

ldi Delay3,0x0A

ret

 

;Delay Routine

 

Delay:

dec Delay1

brne Delay

dec Delay2

brne Delay

dec Delay3

brne Delay

ret

 

Meletise tin ligo kai 8a katalaveis ti kani.

Tin kalis px. me

rcall Delay_Parametri

 

Tora ean den se endiaferi autos o tropos uparxei o deuteros

 

2)Edo xrisimopoiis to Interrupt Overflow.

Kai auto ginetai me xrisi tou Timer/Counter.

O 90S2313 exei duo Timer/Counter enan 8bit kai enan 16bit.

Edo sto paradeigma xrisimopoio enan 8 bit Counter.

Meletise kala to programa kai ean exeis aporia se kapoia entoli

i giati einai etsi 8a sou eksigiso.

To egrapsa oso ginetai pio aplo.

Kai einai pragmati polu aplo aplos meletise kai 8a dis. :)

Ante good luke!

 

 

;*************************** Delay ******************************

;* Mporeis na pareis Delay me xrono apo 0.0256sec eos 6.5536sec.*

;* *

;* Ean allakseis to Crystall tote prepei na allakseis kapoies *

;* grammes ston kodika , vlepe prakseis kai 8a katalaveis poies.*

;* *

;* Oi prakseis pou ekana einai oi eksis. *

;* Xrisimopoio Crystall me suxnotita 8.000Mhz. *

;* Auto simeni oti ka8e entoli ektelitai se xrono (Clock) *

;* (T=1/f) diladi 1/8000000=125nSec. *

;* 8a xrisimopioiso prescaler se 1024 pou dieri to Clock me 1024*

;* (8000000/1024).Diladi ka8e palmos diegersis tou Timer/Counter*

;* 8a einai (T=1/f) 1/(8000000/1024)=1024/8000000=128uSec. *

;* Auto simeni ean 8elis na exeis xrono 0.0256 sec delay tote *

;* prepi na metrisis sto Counter 200 kai auto giati: *

;* 0.0256Sec/128uSec=200. *

;* *

;* Opote ean xrisimopoiois 8.0Mhz clock kai prescaler se 1024 *

;* prepi na metrisis 200 gia na exeis 0.0256sec delay. *

;* Gia na metrisi o 8bit Timer/Counter 200 prepi na ksekinisi *

;* oxi apo 0 eos to 255 alla apo 0x38 se dekaeksadiko sustima *

;* 256-200=56=0x38 *

;* Afou to 56 einai se dekadiko to 0x38 einai se dekaeksadiko. *

;****************************************************************

 

;Device

 

.device AT90S2313

 

 

;Includes:

 

.include "2313def.inc"

 

 

;Defines:

 

.def Temp =r16

.def DelayTime =r17

.def InOut =r18

 

 

;Equ

 

.equ StartoverTime =0x38

 

 

.CSEG

 

rjmp RESET ;Reset Handler

rjmp EXT_INT0 ;IRQ0 Handler

rjmp EXT_INT1 ;IRQ1 Handler

rjmp TIM_CAPT1 ;Timer1 Capture Handler

rjmp TIM_COMP1 ;Timer1 Compare Handler

rjmp TIM_OVF1 ;Timer1 Overflow Handler

rjmp TIM_OVF0 ;Timer0 Overflow Handler

rjmp UART_RXC ;UART RX Complete Handler

rjmp UART_DRE ;UART UDR Empty Handler

rjmp UART_TXC ;UART TX complete handler

rjmp ANA_COMP ;Analog Comparator Handler

 

 

;Start:

 

RESET:

;***** Set Stackpointer *****

ldi Temp,high(RAMEND)

out SPH,Temp

ldi Temp,low(RAMEND)

out SPL,Temp

 

;***** Set ports, A = out *****

ser Temp

out DDRA,Temp

 

;***** Set Timer0 *****

ldi Temp,0b00000010 ;overflow int enabled

out TIMSK,Temp

out TIFR,Temp

ldi Temp,0b00000101 ; Set Prescaler Clock/1024

out TCCR0,Temp

 

;***** Start flashing LED lsb on PORTA *****

ldi InOut,0x01

 

LOOP:

ldi Temp,0x01

eor InOut,Temp

out PORTA,InOut

 

ldi DelayTime,0xC3 ;0xC3 = 195 => 195*0,0256sec=4.992sec

rcall TIME_DELAY ;Delay

 

rjmp LOOP ;Loop forever

 

;Handlers:

 

EXT_INT0: reti

EXT_INT1: reti

TIM_CAPT1: reti

TIM_COMP1: reti

TIM_OVF1: reti

 

 

;***** Interupt; Timer/Counter0 overflow *****

 

TIM_OVF0:

ldi Temp,StartoverTime

out TCNT0,Temp ;Start

cpi DelayTime,0x00

breq DELAY_DONE

dec DelayTime ;Decriment

 

DELAY_DONE:

reti ;Return from Interrupt Timer/Counter0 overflow

 

 

;Handlers:

 

UART_RXC: reti

UART_DRE: reti

UART_TXC: reti

ANA_COMP: reti

 

 

;************** Delay: DelayTime * 0.0256s ***************

;* Interupt enable kai disable mporeis na ta vgaleis ean *

;* xrisimopoiis allou tis energopoiis autes sto programma*

;*********************************************************

 

TIME_DELAY:

sei ;Interupt enabled.

ldi Temp,StartoverTime

out TCNT0,Temp

 

DELAY_LOOP:

cpi DelayTime,0x00 ;Loop until delay is done

brne DELAY_LOOP

cli ;Interupt disabled

ret ;Return from rcall TIME_DELAY

 

 

Vlepo o kodikas den ka8ete kala stin selida opos 8elo ego.

Ean 8es stile email na sou stilo ekei.

Bye

Δημοσ.

ΣΕ ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ ΓΙΑ ΤΟ ΠΑΡΑΔΕΙΓΜΑ ΤΟ e-mail ΜΟΥ ΕΙΝΑΙ [email protected].ΘΑ ΜΕΛΕΤΗΣΩ ΤΟ ΠΡΟΓΡΑΜΜΑ ΚΑΙ ΑΝ ΒΡΩ ΚΑΠΟΙΑ ΔΥΣΚΟΛΙΑ ΤΑ ΞΑΝΑΓΡΑΦΟΥΜΕ.ΑΥΤΟ ΜΕ ΤΟ INCREMENT & DECREMENT

ΤΟ ΓΝΩΡΙΖΑ ΤΟ ΚΑΝΩ ΓΙΑ ΚΑΘΥΣΤΕΡΗΣΕΙΣ ΜΕ ΕΝΔΙΑΦΕΡΕΙ ΝΑ ΜΑΘΩ ΤΟΥΣ ΧΡΟΝΙΣΤΕΣ. ΚΑΙ ΠΑΛΙ ΣΕ ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΤΟΝ ΧΡΟΝΟ ΠΟΥ ΔΙΕΘΕΣΕΣ.

Δημοσ.

:) Parakalo.

 

To proigoumeno paradeigma eixe duo la8i.

Edo einai sostos o kodikas.

Bye

 

;***************************Delay*************************

;* Mporeis na pareis Delay me xrono apo 0.0256sec eos 6.5536sec. *

;* se auto to paradeigma. *

;* *

;* Ean allakseis to Crystall tote prepei na allakseis kapoies *

;* grammes ston kodika , vlepe prakseis kai 8a katalaveis poies. *

;* *

;* Oi prakseis pou ekana einai oi eksis: *

;*Xrisimopoio Crystall me suxnotita 8.000Mhz. *

;* Auto simeni oti ka8e entoli ektelitai se xrono (Clock) *

;* (T=1/f) diladi 1/8000000=125nSec. *

;* 8a xrisimopioiso prescaler se 1024 pou dieri ton *

;* Timer/Counter me f/1024 Hz opou f=8Mhz Diladi (8000000/1024) *

;* Diladi ka8e palmos diegersis tou Timer/Counter 8a einai *

;* t=1/(f/1024) --> t=1/(8000000/1024)=1024/8000000=128uSec. *

;* Auto simeni ean 8elis na exeis xrono 0.0256 sec delay tote *

;* prepi na metrisis sto Counter 200 kai auto giati: *

;* 0.0256Sec/128uSec=200. *

;* *

;* Opote ean xrisimopoiois 8Mhz clock kai prescaler se 1024 *

;* prepi na metrisis 200 ston Timer/Counter gia na exeis *

;* 0.0256sec delay (diladi na er8ei to proto interupt). *

;* Gia na metrisi o 8bit Timer/Counter 200 prepi na ksekinisi *

;* oxi apo 0 eos to 255 alla apo 0x38 se dekaeksadiko sustima *

;* 256-200=56=0x38 *

;* Afou to 56 einai se dekadiko to 0x38 einai se dekaeksadiko. *

;* Kai meta auto to Interupt to xrisimopioume toses fores oses *

;* mas xreazetai gia na exoume ton xrono pou 8eloume. Gia auto *

;* 8a exoume 5sec/0,0256sec=195.3125 diladi peripou 195 fores 8a*

;* xrisimopoiisoume to interupt gia na paroume xrono teliko pou *

;* 8eloume na exoume diladi 195*0,0256=4.992 sec . Opos vlepis *

;* 8a exeis ena mikro sfalma 5sec-4,992sec=0,008sec. To 195 *

;* einai se dekadiko kai se dekaeksadiko 8a einai C3. *

;********************************************************

 

;Device

 

.device AT90S2313

 

 

;Includes:

 

.include "2313def.inc"

 

 

;Defines:

 

.def Temp =r16

.def DelayTime =r17

.def InOut =r18

 

 

;Equ

 

.equ StartoverTime =0x38

 

 

.CSEG

 

rjmp RESET ;Reset Handler

rjmp EXT_INT0 ;IRQ0 Handler

rjmp EXT_INT1 ;IRQ1 Handler

rjmp TIM_CAPT1 ;Timer1 Capture Handler

rjmp TIM_COMP1 ;Timer1 Compare Handler

rjmp TIM_OVF1 ;Timer1 Overflow Handler

rjmp TIM_OVF0 ;Timer0 Overflow Handler

rjmp UART_RXC ;UART RX Complete Handler

rjmp UART_DRE ;UART UDR Empty Handler

rjmp UART_TXC ;UART TX complete handler

rjmp ANA_COMP ;Analog Comparator Handler

 

 

;Start:

 

RESET:

;***** Set Stackpointer *****

ldi Temp,low(RAMEND)

out SPL,Temp

 

;***** Set ports, B = out *****

ser Temp

out DDRB,Temp

 

;***** Set Timer0 *****

ldi Temp,0b00000010 ;Overflow int enabled

out TIMSK,Temp

out TIFR,Temp

ldi Temp,0b00000101 ;Set Prescaler Clock/1024

out TCCR0,Temp

 

;***** Start flashing LED lsb on PORTB *****

ldi InOut,0x01

 

LOOP:

ldi Temp,0x01

eor InOut,Temp

out PORTB,InOut

 

ldi DelayTime,0xC3 ;0xC3=195 ->195*0,0256sec=4.992sec o

;xronos pou 8es

rcall TIME_DELAY ;Delay

 

rjmp LOOP ;Loop forever

 

;Handlers:

 

EXT_INT0: reti

EXT_INT1: reti

TIM_CAPT1: reti

TIM_COMP1: reti

TIM_OVF1: reti

 

 

;***** Interupt; Timer/Counter0 overflow *****

 

TIM_OVF0:

ldi Temp,StartoverTime

out TCNT0,Temp ;Start

cpi DelayTime,0x00

breq DELAY_DONE

dec DelayTime ;Decriment

 

DELAY_DONE:

reti ;Return from Interrupt Timer/Counter0 overflow

 

 

;Handlers:

 

UART_RXC: reti

UART_DRE: reti

UART_TXC: reti

ANA_COMP: reti

 

 

;************** Delay: DelayTime * 0.0256s ***************

;* Interupt enable kai disable mporeis na ta vgaleis ean *

;* xrisimopoiis allou tis energopoiis autes sto programma *

;*****************************************************

 

TIME_DELAY:

sei ;Interupt enabled.

ldi Temp,StartoverTime

out TCNT0,Temp

 

DELAY_LOOP:

cpi DelayTime,0x00 ;Loop until delay is done

brne DELAY_LOOP

cli ;Interupt disabled

ret ;Return from rcall TIME_DELAY

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...