AVR-GCC. Timers/Counters. Θεωρία.

Οι σημερινοί μικροελεγκτές διαχειρίζονται τις διεργασίες πολύ γρήγορα. Ορισμένες φορές όμως χρειάζεται να κάνουμε κάτι σε ποιο αργό ρυθμό. Για παράδειγμα να αναβοσβήνει ένα LED. Όπως είναι φανερό δεν θα μπορέσουμε να το κάνουμε με την ταχύτητα χρονισμού του μικροελεγκτή. Πρέπει να βρούμε έναν τρόπο να εκτελούμε την εργασία αυτή σε πολύ μικρότερη συχνότητα από αυτή του κυρίως ρολογιού. Πρέπει όμως η συχνότητα αυτή να είναι όσο το δυνατόν ποιο σταθερή. Για τον σκοπό αυτό μπορούμε να χρησιμοποιήσουμε κάποιον Timer/Counter του AVR.

Ένας Timer (χρονομετρητής) είναι απλά ένας ειδικός καταχωρητής του μικροελεγκτής, που ρυθμίζεται (αυξάνει η τιμή) του χωρίς την βοήθεια του προγράμματος αλλά από το ίδιο το υλικό. Από μόνου αυτό δεν θα ήταν και τόσο χρήσιμο αν δεν μπορούσε να προκαλέσει κάποιο γεγονός που μπορούμε να εκμεταλλευτούμε μέσω του προγράμματος που γράφουμε.

Αυτό το γεγονός είναι το Overflow Interrupt (Interrupt υπερχείλισης). Απο την στιγμή που το μέγεθος του καταχωρητή είναι πεπερασμένο είναι λογικό και ο Timer/Counter κάποια στιγμή να γεμίσει. Τότε θα κάνει επανεκκίνηση και θα πάρει την τιμή μηδέν (0) και θα αρχίσει πάλι το μέτρημα. Το γεγονός αυτό ονομάζεται Υπερχείλιση (Overflow).

Μία άλλη εφαρμογή θα ήταν το μέτρημα τον παλμών που εφαρμόζεται σε κάποιο pin του μικροελεγκτή.

Σαν σήμα χρονισμού ο Timer/Counter μπορεί να έχει αυτό του μικροελεγκτή, την έξοδο του prescaler ή το σήμα που εφαρμόζεται σε κάποιο pin. Όταν χρησιμοποιείται κάποιο εξωτερικό σήμα η συχνότητα αυτού δεν πρέπει να ξεπερνά το μισό της συχνότητας λειτουργίας του μικροελεγκτή.

Τα παρακάτω αφορούν τον ATmega8. Για άλλους μικροελεγκτές ισχύουν πάνω κάτω τα ίδια αλλά πρέπει να συμβουλευτείτε την τεκμηρίωση του κάθε ενός.

Ο Prescaler (διαιρέτης).
Ο Prescaler χρησιμοποιείται για την μείωση του ρολογιού της CPU κατά έναν ελεγχόμενο παράγοντα. Αυτή η μειωμένη συχνότητα τροφοδοτεί την είσοδο ρολογιού του Timer. Όταν για παράδειγμα η συχνότητα λειτουργία είναι 4 MHz και ρυθμίζουμε τον prescaler στην τιμή 1024 ο Timer τροφοδοτείται από ένα σήμα χρονισμού 4MHz/1024, λίγο ποιο κάτω από τα 4 kHz. Ο counter-καταχωρητής (TCNTx) αυξάνει με αυτή την ταχύτητα.

Αριθμός των bit των Timer στους AVR.
Διακρίνουμε δύο βασικούς τύπους Timer, των 8 bit με ανάλυση 256 (2^8) και τον 16 bit με ανάλυση 65536 (2^16). Όλοι οι AVRs έχουν τουλάχιστον έναν ή δύο Timer των 8-bit. Παρακάτω ακολουθεί ένας πίνακας με τον αριθμό των Timer για διάφορα μοντέλα AVR μικροελεγκτών.

Ορισμοί:
BOTTOM: Ο μετρητής φτάνει στο BOTTOM όταν πάρει την τιμή 0.
ΜΑΧ: Ο μετρητής φτάνει στο MAX όταν πάρει την τιμή μέγιστη τιμή (255 ή 65535).
TOP: Η τιμή του TOP δεν είναι σταθερή και καθορίζεται από το πρόγραμμα.

8-bit Timer/Counter.

Timer/Counter 0

TCCR0.

CS02:00:
Τα bit αυτά ρυθμίζουν την πηγή του σήματος χρονισμού.

Όταν χρησιμοποιείται το pin T0, αλλαγές στην κατάσταση του θα χρονίσουν τον Timer/Counter ακόμη και αν είναι δηλωμένο ως έξοδος. Αυτό μας βοηθά να ελέγχουμε τον μετρητή μέσω του προγράμματος.


TCNT0 (Timer Counter 0 register).

Ο καταχωρητής Timer Counter 0 δίνει απ’ ευθείας πρόσβαση για εγγραφή και ανάγνωση στον μετρητή του Timer/Counter.

Timer/Counter 2

TCCR2.

FOC2 (Force Output Compare):
Το bit αυτό είναι ενεργοποιημένο μόνο όταν τα WGM bit ορίζουν μία μη PWM λειτουργία. Για λόγους συμβατότητας όταν είμαστε σε PWM λειτουργία αυτό το bit πρέπει να γράφετε σε λογικό μηδέν (0) κάθε φορά που γράφουμε στον TCCR2.

WGM21:20 (Waveform Generation Mode):
Τα bit αυτά ρυθμίζουν το άνω όριο του μετρητή (TOP) και τον τρόπο λειτουργίας. Υποστηρίζονται 4 τρόποι λειτουργίας.

COM21:20 (Compare Match Output Mode):
Τα bit αυτά ρυθμίζουν την συμπεριφορά του Output Compare pin (OC2) . Όταν ενεργοποιηθούν τα bit αυτά παρακάμπτεται η κανονική λειτουργία του pin. Το bit του καταχωρητή DDR όμως που ελέγχει το pin πρέπει να γίνει ένα (1) ώστε να ενεργοποιηθεί ο οδηγός εξόδου. Όταν η λειτουργία του OC2 είναι ενεργοποιημένη η συμπεριφορά των COM21:20 εξαρτάται από αυτή των WGM21:20.

Κανονική λειτουργία.

Fast PWM.

Phase Correct PWM.

CS22:20:
Τα bit αυτά ρυθμίζουν την πηγή του σήματος χρονισμού.
Όταν χρησιμοποιείται το pin T0, αλλαγές στην κατάσταση του θα χρονίσουν τον Timer/Counter ακόμη και αν είναι δηλωμένο ως έξοδος. Αυτό μας βοηθά να ελέγχουμε τον μετρητή μέσο του προγράμματος.

TCNT2 (Timer Counter 2 register).
Ο καταχωρητής Timer Counter 0 δίνει απ’ ευθείας πρόσβαση για εγγραφή και ανάγνωση στον μετρητή του Timer/Counter. Τροποποίηση του TCNT2 όταν ο μετρητής είναι ενεργοποιημένος υπάρχει ρίσκο να χάσουμε κάποια ταύτιση στην σύγκριση μεταξύ του TCNT2 και του OCR2.

OCR2 (Output Compare Register 2):
Ο καταχωρητής OCR2 περιέχει μία τιμή των 8 bit που συγκρίνεται συνεχώς με αυτή του TCNT2. Σε περίπτωση ταύτισης μπορεί να ενεργοποιηθεί ένα interrupt (output compare interrupt) ή την εμφάνιση μίας κυματομορφής στο pin OC2.

Ασύγχρονος τρόπος λειτουργίας του Timer/Counter2:

ASSR (ASynchronous Status Register):

AS2 (ASynchronous Timer/Counter2):
Όταν αυτό το bit είναι μηδέν (0) τότε ο Timer/Counter2 χρονίζεται από το ρολόι του μικροελεγκτή. Όταν γράφουμε το bit αυτό σε λογικό ένα (1) τότε ο Timer/Counter2 χρονίζεται από έναν εξωτερικό κρύσταλλο που είναι συνδεδεμένος στα pin. Κατά την εναλλαγή του bit αυτού μπορεί να προκληθεί κατακερματισμός στα δεδομένα των TNCT2, OCR2 και TCCR2. Δείτε σχετικά στην τεκμηρίωση για την σωστή διαδικασία εναλλαγής.

TCN2UB (Timer/Counter2 Update Busy):
Όταν ο Timer/Couner2 είναι σε ασύγχρονη λειτουργία και γράφουμε στον TCNT2 αυτό το bit γίνεται ένα (1). Όταν ο TCNT2 ενημερωθεί από τον προσωρινό καταχωρητή τότε το bit αυτό γίνετε μηδέν (0) από το ίδιο το υλικό. Το λογικό μηδέν (0) σε αυτό το bit σημαίνει πως ο TCNT2 είναι έτοιμος να δεχθεί μία νέα τιμή.

OCR2UB (Output Compare Register 2 Update Busy):
Όταν ο Timer/Couner2 είναι σε ασύγχρονη λειτουργία και γράφουμε στον OCR2 αυτό το bit γίνεται ένα (1). Όταν ο OCR2 ενημερωθεί από τον προσωρινό καταχωρητή τότε το bit αυτό γίνετε μηδέν (0) από το ίδιο το υλικό. Το λογικό μηδέν (0) σε αυτό το bit σημαίνει πως ο OCR2 είναι έτοιμος να δεχθεί μία νέα τιμή.

ΤCR2UB (Timer/Counter Control Register 2 Update Busy):
Όταν ο Timer/Couner2 είναι σε ασύγχρονη λειτουργία και γράφουμε στον TCR2 αυτό το bit γίνεται ένα (1). Όταν ο TCR2 ενημερωθεί από τον προσωρινό καταχωρητή τότε το bit αυτό γίνετε μηδέν (0) από το ίδιο το υλικό. Το λογικό μηδέν (0) σε αυτό το bit σημαίνει πως ο TCR2 είναι έτοιμος να δεχθεί μία νέα τιμή.

16-bit Timer/Counter.

Timer/Counter 1
Οι 16 bit Timers/Counters είναι ποιο πολύπλοκοι από τους αντίστοιχους των 8-bit αλλά έχουν και περισσότερα χαρακτηριστικά.

TCCR1A (Timer Counter 1 Control Register A):

COM1A1:0 (Compare Output Mode Chanel A):
COM1B1:0 (Compare Output Mode Chanel B):
Τα bit COM1A1 και COM1B1 ελέγχουν την συμπεριφορά των Output Compare pins (OC1A και OC1B αντίστοιχα). Εάν κάποιο από τα COM1A1:0 γραφτεί σε λογικό ένα (1) τότε παρακάμπτεται η κανονική λειτουργία του Ι/Ο pin που αντιστοιχεί στο OC1A. Εάν κάποιο από τα COM1Β1:0 γραφτεί σε λογικό ένα (1) τότε παρακάμπτεται η κανονική λειτουργία του Ι/Ο pin που αντιστοιχεί στο OC1Β. Το bit του καταχωρητή DDR όμως που ελέγχει το pin πρέπει να γίνει ένα (1) ώστε να ενεργοποιηθεί ο οδηγός εξόδου.

Όταν η λειτουργία του OC1Α ή OC1B είναι ενεργοποιημένη η συμπεριφορά των COM1x1:0 εξαρτάται από αυτή των WGM13:10.

Κανονική λειτουργία.

Fast PWM.

Phase, Frequency Correct PWM.

FOC1A (Force Output Compare for channel A):
FOC1B (Force Output Compare for channel B):

Το bit αυτό είναι ενεργοποιημένο μόνο όταν τα WGM bit ορίζουν μία μη PWM λειτουργία. Για λόγους συμβατότητας όταν είμαστε σε PWM λειτουργία αυτό το bit πρέπει να γράφετε σε λογικό μηδέν (0) κάθε φορά που γράφουμε στον TCCR1A.

WGM11:10 (Waveform Generation Mode):
Τα bit αυτά σε συνδυασμό με τα bit WGM13:11 στον TCCR1B ρυθμίζουν το άνω όριο του μετρητή (TOP) και τον τρόπο λειτουργίας.

TCCR1B (Timer Counter 1 Control Register B):

ICNC1 ( Input Capture Noise Canceler):
Θέτοντας αυτό το bit σε λογικό ένα (1) ενεργοποιεί το Input Capture Noise Canceler (ακύρωση θορύβου εισόδου). Όταν ενεργοποιείτε η ακύρωση θορύβου η είσοδος από το pin ICP1 φιλτράρεται. Η συνάρτηση του φίλτρου περιμένει τέσσερα διαδοχικά ισότιμα δείγματα για να αλλάξει την κατάσταση του pin. Έτσι η λήψη της εισόδου καθυστερεί τέσσερις κύκλους.

ICES1 (Input Capture Edge Select 1):
Το bit αυτό ρυθμίζει αν το pin ICP1 θα προκαλέσει κάποιο γεγονός σε ανερχόμενο (ICP1=1) ή σε κατερχόμενο (ICP1=0) μέτωπο παλμού.

Bit 5:
Το bit αυτό διαφυλάσσεται για μελλοντική χρήση. Για λόγους συμβατότητας το bit αυτό πρέπει να τίθεται σε λογικό μηδέν (0) κάθε φορά που γράφουμε στον TCCR1B.

WGM13:11 (Waveform Generation Mode):
Τα bit αυτά σε συνδυασμό με τα bit WGM11:10 στον TTCR1B ρυθμίζουν το άνω όριο του μετρητή (TOP) και τον τρόπο λειτουργίας.

CS12:10:
Τα bit αυτά ρυθμίζουν την πηγή του σήματος χρονισμού.
Όταν χρησιμοποιείται το pin T1, αλλαγές στην κατάσταση του θα χρονίσουν τον Timer/Counter ακόμη και αν είναι δηλωμένο ως έξοδος. Αυτό μας βοηθά να ελέγχουμε τον μετρητή μέσο του προγράμματος.

TCNT1H, TCNT1L:

Σε λειτουργία PWM ο TCNT1 παίρνει τιμές από το 0 μέχρι 65535 και στην συνέχεια από 65535 μέχρι το 0.
Για την ανάγνωση των καταχωρητών χρησιμοποιείτε ένας από τους προσωρινούς καταχωρητές της CPU. Ο ίδιος χρησιμοποιείτε για και τους OCR1 και ICR1. Για τον λόγο αυτό πρέπει να απενεργοποιούνται τα interrupt (cli();) ώστε να μην έχει “περίεργη” συμπεριφορά το πρόγραμμα μας.
Κατά την εγγραφή πρέπει επίσης να απενεργοποιούνται τα interupts.

OCR1H, OCR1L (Ouput Compare Register 1):

Η τιμή του OCR1 συγκρίνεται συνεχώς με αυτή του TCNT1. Αν η δύο τιμές συμπίπτουν έχουμε μία κατάσταση “Output Cpmpare match”. Η προβλεπόμενη ενέργεια καθορίζεται από την ρύθμιση στον TCCR1.
Για την ανάγνωση των καταχωρητών χρησιμοποιείτε ένας από τους προσωρινούς καταχωρητές της CPU. Ο ίδιος χρησιμοποιείτε για και τους TCNT1 και ICR1. Για τον λόγο αυτό πρέπει να απενεργοποιούνται τα interrupt (cli();) ώστε να μην έχει “περίεργη” συμπεριφορά το πρόγραμμα μας.
Κατά την εγγραφή πρέπει επίσης να απενεργοποιούνται τα interupts.

ICR1H, ICR1L (Input Capture Register 1):

Όταν στο pin ICP1 προκύπτει κάποιο γεγονός τότε η τιμή του ICNT1 αντιγράφεται στον ICR1 και ενεργοποιείται το bit ICF1 στον καταχωρητή TIFR.
Όπως και παραπάνω κατά την πρόσβαση στον καταχωρητή πρέπει να απενεργοποιούνται τα interrupts.

Λειτουργία PWM.

Όταν ο Timer/Counter1 είναι σε λειτουργία.

Όταν ο μετρητής φτάσει την τιμή του που είναι αποθηκευμένη στον OCR1A, το pin εξόδου OC1 πάει σε λογικό μηδέν (0) ή ένα (1) αναλόγως με την ρύθμιση COM1A1, COM1A0 στον καταχωρητή TCCR1A.

Τρόπος λειτουργίας CTC (Clear Timer on Compare Match).

Η λειτουργία CTC μπορεί να χρησιμοποιηθεί για αυτόματο καθαρισμό (TCNT1 σε τιμή 0) του μετρητή. Με άλλα λόγια “Καθάρισμα του μετρητή κατά την ταύτιση”. Μέσω αυτής της λειτουργίας μπορούμε να δημιουργήσουμε πολύ ακριβή σήματα χρονισμού. Για να μπούμε σε λειτουργία CTC αρκεί να βάλουμε την κατάλληλη τιμή στα bit OCnx. Η συχνότητα που παράγεται δίνεται από τον παρακάτω τύπο.

Ως προς την τιμή που πρέπει να έχει ο OCRnx:

Σύλληψη ενός εξωτερικού σήματος.
Σε αυτή την λειτουργία στο pin εισόδου (ICP1) συνδέεται η πηγή ενός σήματος. Ανάλογα με τις ρυθμίσεις όταν φτάσει ένα ανερχόμενο (0 σε 1) ή ένα κατερχόμενο μέτωπο (1 σε 0) η τιμή που έχει εκείνη την στιγμή ο μετρητής μεταφέρεται στον καταχωρητή ICR1. Την ίδια στιγμή προκαλείται το αντίστοιχο interrupt. Εάν το σήμα περιέχει πολύ θόρυβο μπορούμε να ενεργοποιήσουμε την λειτουργία μείωσης θορύβου. Στην λειτουργία αυτή το σήμα πρέπει να είναι σταθερό για 4 κύκλους για να ενεργοποιηθούν οι επιμέρους ενέργιες.

TIMSK (Timer/Counter Interrupt Mask):

OCIE2 (Timer/Counter2 Output Compare Match Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείται το interrupt για ταύτιση σύγκρισης στον Timer/Counter2.

TOIE2 (Timer/Counter2 Overflow Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείτε το interrupt υπερχείλισης για τον Timer/counter2.

TICIE1 (Timer/Counter1 Iptut Capture Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείται το interrupt “σύλληψης εισόδου” στον Timer/Counter1.

OCIE1A (Timer/Counter1 Output Compare match A Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείται το interrupt ταύτισης μεταξύ του OCR1A και του TCNT1.

OCIE1B (Timer/Counter1 Output Compare match B Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείται το interrupt ταύτισης μεταξύ του OCR1B και του TCNT1.

TOIE1 (Timer/Counter1 Overflow Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείτε το interrupt υπερχείλισης για τον Timer/counter1.

TOIE0 (Timer/Counter0 Overflow Interrupt Enable):
Όταν αυτό το bit γραφεί σε λογικό ένα (1) και είναι ενεργοποιημένα τα Interrupts (I bit στον SREG ή έντολή sei();) ενεργοποιείτε το interrupt υπερχείλισης για τον Timer/counter0.

TIFR (Timer/Counter Interrupt Flag Register):

OCF2 (Output Compare Flag 2):
Το bit αυτό γίνεται ένα όταν προκύψει ταύτιση σύγκρισης μεταξύ του Timer/counter2 και του OCR2. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

TOV2 (Timer/Counter2 OVerflow flag):
Το bit αυτό γίνεται ένα όταν προκύπτει υπερχείλιση στον Timer/Counter2. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

ICF1 (Timer/Counter1 Input Capture Flag):
Το bit αυτό γίνεται ένα όταν προκύπτει κάποιο γεγονός σύλληψης στο pin ICP1. Όταν από τα bit WGM13:10 ορίζεται σαν τιμή TOP η τιμή του καταχωρητή ICR1 το bit αυτό (ICF1) γίνεται ένα (1) όταν ο μετρητής φτάσει στην τιμή TOP. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

OCF1A (Timer/Counter1 Output Compare A match Flag):
Το bit αυτό γίνεται ένα όταν προκύψει ταύτιση σύγκρισης μεταξύ του Timer/counter1 και του OCR1A. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

OCF1B (Timer/Counter1 Output Compare B match Flag):
Το bit αυτό γίνεται ένα όταν προκύψει ταύτιση σύγκρισης μεταξύ του Timer/counter1 και του OCR1B. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

TOV1 (Timer/Counter1 OVerflow flag):
Η κατασταση του bit αυτού εξαρτάται από την ρυθμιση των WGM13:10. Σε κανονιή ή σε CTC λειτουργία γίνεται όταν όταν έχουμε υπερχείλιση στον μετρητή. Σε Phase Correct PWM γίνεται ένα (1) στο ΒΟΤΤΟΜ. Σε Fast PWM γίνεται ένα (1) στο TOP. Σε Phase, Frequency Correct PWM γίνεται ένα (1) στο ΒΟΤΤΟΜ. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

TOV0 (Timer/Counter0 OVerflow flag):
Το bit αυτό γίνεται ένα όταν προκύπτει υπερχείλιση στον Timer/Counter0. Το bit αυτό καθαρίζεται (λογικό 0) από το υλικό όταν εκτελεστεί το αντίστοιχο interrupt. Εναλλακτικά το bit αυτό καθαρίζεται (λογικό 0) γράφοντας λογικό ένα (1) στη θέση του.

Χρήσιμες εξισώσεις:

Συχνότητα Fast PWM στον Timer/Counter2.

Συχνότητα Phase Correct PWM στον Timer/Counter2.

Συχνότητα Fast PWM στον Timer/Counter1.

Συχνότητα Phase Correct PWM στον Timer/Counter1.

Συχνότητα Phase & Frequency Correct PWM στον Timer/Counter1.

Τιμή του OCRn για επιθυμητό χρόνο καθυστέρησης σε δευτερόλεπτα (Time).

Τιμή του TCNTn για επιθυμητό χρόνο καθυστέρησης σε δευτερόλεπτα (Time).

Ανάλυση (σε usec) του μετρητή (Res).

Advertisements
This entry was posted in AVR, Electronics and tagged , , , , , . Bookmark the permalink.

2 Responses to AVR-GCC. Timers/Counters. Θεωρία.

  1. Pingback: AVR-GCC. Σερβοκινητήρες (μοντελισμού). Aka servos. | My humble Blog.

  2. Pingback: Ένα απλό συχνόμετρο. | My humble Blog.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s