# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  Αρχή με τον Atmega8 - Κουμπιά σε MC

## master3763

Φίλες και φίλοι συνεχίζουμε..
Σ αυτό το μάθημα θα ήθελα να σας δείξω πώς μπορούμε με τον μικρεολεγκτή να παίξουμε με τα κουμπιά... Θα φτιάξουμε ένα πρόγραμμα μία εφαρμογή  που θα λειτουργεί σαν συναγερμός.   Έχουμε λυπών έναν διακόπτη ο οποίος είναι κλειστός και γειωμένος από την μία άκρη του. Η άλλη άκρη του καταλήγει στο pin B.0  του MC.  Οπότε το Β.0 παίρνει 0 volt. Αν τώρα ανοίξουμε τον διακόπτη το pin B.0 δεν θα έχει ποια το απόλυτο  0 volt αλλά κάποια άλλη τάση (δεν μας ενδιαφέρει). Σημασία έχει ότι η συνθήκη while(PINB.0==1) θα είναι αληθής και θα εκτελεστεί το πρόγραμμα που βρίσκεται ανάμεσα στις αγκύλες {} του while. Δηλαδή  θα αρχίσει να αναβοσβήνει το LED.

2.JPG
 
Πάμε λυπών να γράψουμε τον κώδικα




```
#include <mega8.h> // vivliothiki gia ton atmega 8
#include <delay.h> // vivliothiki gia xronokathisteriseis

void main(void) 
{        
// Port B rithmiseis
  PORTB=0xFF;       // Energopoiume ta Pull-up resistors
  DDRB=0x00;          // Orizume to port B san eisodo
// Port D rithmiseis
  PORTD=0x00;       // Apenergopoiume ta Pull-up resistors
  DDRD=0xFF;          // Orizume to port D san exwdo 
  

  while(PINB.0==0) // elegxos katastasis tu kumpiu
  {
  
  } 
while(PINB.0==1) //  An to kumpi den einai patimeno ekteleitai o parakato vrogxos
 
      while(1)     // atermon vrogxos
        {  
          PORTD.0=1;
          delay_ms(100);
          PORTD.0=0;
          delay_ms(100); 
        }
    }                                             
 
}
```


Να πούμε επίσης ότι  ακόμα κ αν ξανακλείσει η επαφή του διακόπτη στο συγκεκριμένο πρόγραμμα, το λαμπάκι θα συνεχίσει να αναβοσβήνει.
Καλό θα ήταν να βάλουμε μία αντίσταση το λιγότερο 150 Ohm σε σειρά με το LED για να μην κάψουμε τον MC.

Από εδώ και πέρα μπορείτε να βλέπετε τα μαθήματα MC και από το καινούριο μου site Greek Electronics που θα ανεβάζω διάφωρα τεχνικά άρθρα.

----------


## nikknikk4

ωραια ...παμε τωρα να το κανουμε να κλείνει το led ?

----------


## master3763

> ωραια ...παμε τωρα να το κανουμε να κλείνει το led ?



Ε  ναι  να αφήσουμε και κάτι για ανάλυση και συζήτηση )) ΟΧΙ ΟΛΑ ΕΤΥΜΑ  )

----------


## nikknikk4

εντάξει Γιάννη δεν διαφωνω για το οχι ολα ΕΤΟΙΜΑ ...και αφου αναλυθει το πρωτο μια δεύτερη ιδεα είναι...

και μετα να το κάνουμε να εχει κλειση το Led αλλα ενα αλλο *Led* ( Led νουμερο 2 σε κάποια αλλη πόρτα ) να αναβοσβήνει η να μενει αναμένο οταν εχει δοθεί εστω και για μια φορα λογ.1 στο PINB.0 για να δουμε οτι κατα την απουσία μας ειχαμε τουλάχιστο μια παραβίαση
δηλ.εχουμε συναγερμό κτυπα και οταν κλείσει παλι ο διακόπτης σταματά αλλα θα εχουμε ενδειξη οτι κάποια στιγμή κτύπησε

και σε καποιο επομενο βάζουμε και κάποιο χρόνο για το πόσο  χρόνο θα κτυπά αλλα ας τα πάμε ενα ενα...

----------


## master3763

Στο επόμενο μάθημα που αφορά  τις διακοπές  θα πάμε στα λύγο ποιο δύσκολα ας  πούμε…  Προσπαθώ όμως να το κάνω απλό ώστε  να μπορούμε να κάνουμε μία αρχή.  Παράλληλα καλό θα ήταν να δημιουργείται  συζήτηση από κάτω ώστε να λύνουμε τυχόν απορίες .  Κ εγώ όσο μου παίρνει ο χρόνος και όσο μπορώ   θα απαντάω στις ερωτήσεις αυτών που έχουν απορίες.

Μέχρι  τότε ας κάνουμε μία προσπάθεια με τον κώδικα , να σβήσουμε το λαμπάκι ξαναπατώντας  το κουμπί   :Wink:

----------


## nikknikk4

εαν κανουμε αυτη την αλλαγή θα εχουμε συνεχως αναμενο Led ?
πχ.
while(PINB.0==1) //  An to kumpi den einai patimeno ekteleitai o parakato vrogxos


        {  
          PORTD.0=1;

        }
    }                                             

}

----------


## master3763

> εαν κανουμε αυτη την αλλαγή θα εχουμε συνεχως αναμενο Led ?



Ναι ακριβώς.  Διότι η  συνθήκη while(PINB.0==1)  ισχύει,  και όσο  αληθεύει αυτή η συνθήκη θα μπούμε στον βρόγχο και δεν θα ξαναβγούμε ...  Μία φόρα  θα γίνει αυτό.  Εννοώ μετά,  και να πατήσεις το κουμπί θα βρίσκεσαι  μέσα στον κάτω βρόγχο,  στον πάνω δεν μπαίνεις  άλλο ..

Με τον πάνω εννοώ την γραμμή 
while(PINB.0==0) // elegxos katastasis tu kumpiu

Με τον κάτω εννοώ την γραμμή

while(PINB.0==1) //  An to kumpi den einai patimeno ekteleitai o parakato vrogxos

----------


## FILMAN

> καταλήγει στο pin B.0  του MC.  Οπότε το Β.0 παίρνει 0 volt. Αν τώρα ανοίξουμε τον διακόπτη το pin B.0 δεν θα έχει ποια το απόλυτο  0 volt αλλά κάποια άλλη τάση (δεν μας ενδιαφέρει). Σημασία έχει ότι η συνθήκη while(PINB.0==1) θα είναι αληθής.



Εεεεεε! Γιατί δεν μας ενδιαφέρει; Θέλει οπωσδήποτε pull up αντίσταση (εκτός αν ενεργοποιήσεις τις εσωτερικές)




> Καλό θα ήταν να βάλουμε μία αντίσταση το λιγότερο 150 Ohm σε σειρά με το LED για να μην κάψουμε τον MC.



Απαραίτητο, όχι καλό!

----------


## master3763

Φίλιππε έχεις δίκιο για την αντίσταση των 150 Ohm  ) Είναι ΑΠΠΑΡΑΙΤΗΤΗ.   Για τα pull-up  μπορείτε να διαβάσετε εδώ:
http://en.wikipedia.org/wiki/Pull-up_resistor
Το κακό είναι ότι δεν μπορώ να τα γράφω όλα απ ότι καταλαβαίνεται  φαντάζομαι  )  θα γράψω τα ουσιώδη  και ας τα συμπληρώσουμε  εδώ από κάτω.

----------

