PDA

Επιστροφή στο Forum : εισοδος/εξοδος σε μc



kwstakis
01-06-07, 12:12
ξερει καποιος να μου πει αν σε εναν επεξεργαστη μπορω να κανω τα ποδια της μιας πορτας εισοδο/εξοδο μαζι???δλδ.οταν παρει μια εντολη πχ το pb5 το ιδιο ποδι να μου αναψει ενα led.και αυτο να γινεται σε ολη την portb.μπορει καποιος να με βοηθησει σε αυτο?ελπιζω να μην ειπα καμια βλακεια.....

th_shak
01-06-07, 13:02
Γίνεται. Πρώτα κάνεις το pin είσοδο και ελέγχεις αν είναι '1' ή '0' και μετά το κάνεις έξοδο κα ανάλογα με την είσοδο που πήρε ανάβει ή σβήνει το led.

http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en011019

chip
01-06-07, 13:25
Βάλε και μία αντίσταση (πχ 4K7) μεταξύ της εισόδου του μικροελεγκτή και της εξόδου του εξαρτήματος που δίνει την εντολή (πχ Button) ώστε αν ενεργοποιηθεί το button την ώρα που χρησιμοποιείται το pin σαν έξοδο να μην δημιουργηθεί "βραχυκύκλωμα" που μπορεί να κάνει ζημιά στο μικροελεγκτή.

kwstakis
01-06-07, 13:55
για να γεινω λιγο πιο σαφης στην portb θα εχω 8 led τα οποια θα ειναι σβηστα.τωρα οταν δοσω ενα πλιν στο ποδι που ειναι το πρωτο led
και το παρω να μεινει το led αναμενο ομοιως και τα υπολοιπα.στην σελιδα που μου εδωσες δεν βρηκα κατι παρομοιο..

th_shak
01-06-07, 14:16
Αυτό θα το κάνεις στον κώδικα. Αν πάρει '0' τότε θα μείνει αναμμένο αν ξαναπάρει '0' τότε θα σβήσει ή ότι άλλο θέλεις. Με ποιον μικροελεγκτή θέλεις να το κάνεις?

kwstakis
01-06-07, 14:18
αρα γινεται .ωραια για να μην προσπαθω αδικα.με τον ατ90s1200 το χερω οτι εχει καταργηθει αλλα εχω αρκετους

gsmaster
01-06-07, 19:26
Βασικά πρέπει ανα τακτά χρονικά διαστήματα να γίνεται το πιν είσοδος (θα σβήνει το led σε αυτό τον χρόνο) να διαβάζεις την κατάσταση του πιν, και όταν αφεθεί τοπ button να το ξανακάνεις έξοδο και να πράξεις αναλόγως.
θέλει λίγο ψάξιμο με το led και το button στο ίδιο πιν πάντως πρόσεξέτο μην είναι έξοδος και το βραχυκυκλώνεις με το button. βάλε μια αντίσταση σε σειρά με το button όπως λέει κι ο φίλος απο πάνω

kwstakis
01-06-07, 20:33
το εφτιαξα!!!οταν περνει - μενει αναμενο το led και οταν του δοσω + σβηνει.σας ευχαρηστω για τισ πληροφοριες.ξερετε να μου πειτε ποσ οταν μεινει αναμενο για 10sec να σβηνει μονο του???

th_shak
01-06-07, 20:46
Κάνε ενα interupt με τον timer και όταν περάσουν 10 sec θα κάνει όλη την πόρτα 0x00 και θα σβήνουν όλα. Αν θές για κάθε Pin ξεχωριστά τότε θέλει λίγο περισσότερο κώδικα.

kwstakis
02-06-07, 12:51
φιλε θωμα σε ευχαρηστω αλλα μηπως μπορεις να μου το εξηγησεις περισοτερο αυτο γιατι τωρα αρχησα να φτιαχνω τετοια μικρα προγραματακια και δεν καταλαβα αυτο που ειπες

th_shak
02-06-07, 18:03
Διάβασε το datasheet το 90S1200 και θα καταλάβεις.

kwstakis
02-06-07, 18:10
χρησημοποιω το εσωτερικο ρολοι εχει καμια σημασια??με τον κωδικα δεν μπορω να το κανω?

th_shak
02-06-07, 18:53
χρησημοποιω το εσωτερικο ρολοι εχει καμια σημασια??

Όχι. Διάβασε για τις διακοπές ή interupts απο το datasheet και ψάξε και στο google.

kwstakis
05-06-07, 19:53
τελικα δεν τα καταφερα αλλα θα το αφισω για αργοτερα..τωρα προσπαθω οταν δει πχ το pb5 kai to pd3 ΄1΄να μου βγαλει μια εχοδο στο pd1.μπορει να βοηθησει καποιος σε αυτο?2 μερες τωρα το προσπαθω αλλα τιποτα

savnik
05-06-07, 21:23
τελικα δεν τα καταφερα αλλα θα το αφισω για αργοτερα..τωρα προσπαθω οταν δει πχ το pb5 kai to pd3 ΄1΄να μου βγαλει μια εχοδο στο pd1.μπορει να βοηθησει καποιος σε αυτο?2 μερες τωρα το προσπαθω αλλα τιποτα
Να ηταν για pic να σε βοηθουσα.

electronic
05-06-07, 22:36
Αν θέλεις μπορείς να χρησιμοποιήσεις μέσα από τον κώδικα ένα τιμερ λοοπ το οποίο να ελέγχει συνέχεια την κατάσταση των πιν που σε ενδιαφέρουν. Μέσα από το λοοπ θα βγαίνει μόνο όταν έχεις τις καταστάσεις που θέλεις οπότε αμέσος μετά θα αλλάζεις και κατάσταση στο πιν1. Όντος με τον PIC είναι ποιο εύκολο. Διάβασε το manual του mcu που έχεις και αν ξέρεις απο προγραματισμό τότε θα τα καταφέρεις...


Φιλικά
Γιώργος


τελικα δεν τα καταφερα αλλα θα το αφισω για αργοτερα..τωρα προσπαθω οταν δει πχ το pb5 kai to pd3 ΄1΄να μου βγαλει μια εχοδο στο pd1.μπορει να βοηθησει καποιος σε αυτο?2 μερες τωρα το προσπαθω αλλα τιποτα

kwstakis
05-06-07, 23:25
σας ευχαρηστω προσφατα αρχισα να ασχολουμε και φτιαχνω μικρα προγραματακια για να μαθω εχω και το βιβλιο προγραμματιζοντας με τον avr.αλλα καποιες εντολες δεν τισ εχει αναλιτικα με παραδειγματα και δισκολευομαι... :roll: :roll:

savnik
05-06-07, 23:45
τελικα δεν τα καταφερα αλλα θα το αφισω για αργοτερα..τωρα προσπαθω οταν δει πχ το pb5 kai to pd3 ΄1΄να μου βγαλει μια εχοδο στο pd1.μπορει να βοηθησει καποιος σε αυτο?2 μερες τωρα το προσπαθω αλλα τιποτα


portb = %11110111

loop:
if portb.1 = 1 and portb.2 = 1 then
portb.3 = 1
else
portb.3 = 0
endif
goto loop

kwstakis
05-06-07, 23:51
φιλε νικο σε ευχαρηστω αυτο ειναι σε c?γιατι εγς γραφω se asemply ο ατ90σ1200 μου ειπαν οτι μονο με ασεμπλυ προγραματιζεται

savnik
05-06-07, 23:57
φιλε νικο σε ευχαρηστω αυτο ειναι σε c?γιατι εγς γραφω se asemply ο ατ90σ1200 μου ειπαν οτι μονο με ασεμπλυ προγραματιζεται
Ειναι σε picbasic

th_shak
06-06-07, 12:26
Αφού έχεις το βιβλίο προγραμματίζοντας τον μικροελεγκτή AVR αν το διάβαζες καλύτερα θα έβρισκες παρόμοιο πρόγραμμα μέσα. Τα βασικά κι εγώ από κει τα έμαθα. Τέλος πάντων σου στέλνω αυτό το πρόγραμμα που είπες ότι δεν μπορείς να κάνεις.

kwstakis
07-06-07, 19:00
οπως ειπα εχω το προγραματιζοντας τον avr.ξερει καπιος που το χει να μου πει αν ολες οι εντολεσ που χει μεσα ισχιουν και για την c?παντοσ η asemply μου φανηκε αρκετα δισκολη :twisted: .

kwstakis
07-06-07, 22:49
#include <avr> // header file

int main(void) // program starts here
{

DDRB |=1<<PORTB0;
DDRB |=1<<PORTB1;
DDRB |=0<<PORTB2;
DDRB |=1<<PORTB3;
DDRB |=0<<PORTB4;
DDRB |=0<<PORTB5;
DDRB |=0<<PORTB6;
DDRB |=0<<PORTB7;



if (PORTB2<<1)
{PORTB3<<0;}

return (0);
}

αυτο δεν ειναι σωστο?γιατι μου το κανει compile αλλα στιν πραξη δεν εκτελει την συναρτηση.υπαρχει καπιο λαθος?

th_shak
08-06-07, 11:43
Αυτό που γράφεις δεν κάνει τίποτα. Το σωστό είναι έτσι:

#include<avr>
void main(void)
{
DDRB = 0X0B;
while(1)
{
if(PINB.2 == 1)
{
PORTB ^=0x08;
}
}
}

Ποιόν compiler χρησιμοποιείς? Όσο για το βιβλία αυτό δεν είναι? http://www.papasotiriou.gr/product.ebook.asp?pfid=338864&prid=27289 (Ελληνική έκδοση όμως)

kwstakis
08-06-07, 14:09
σε ευχαρηστω!μπορεισ να μου γραπσεισ λιγο για νατο καταλαβω.πος θα γραπσουμε την πορτα β τα ποδια απο 0123.εισοδους και τα 4567 εξοδουσ .μονο αυτο να μην κανει τιποτα αλλο. το βιβλιο αυτο ειναι αλλα υπαρχει και μεταφρασμενο!!!!!!!

th_shak
08-06-07, 14:23
DDRB= 0xF0; δηλαδή 1111000 στο δυαδικό. Όπου είναι 1 είναι έξοδος και όπου 0 είσοδος. Το βιβλίο το μεταφρασμένο εννοώ και έχει λίγα πράγματα για C.

kwstakis
08-06-07, 14:48
ναι δυστηχως εχει πολι λιγα για c!με το avr studio δουλευω.μου βγαζει ερρορ στον κωδικα που μου εστειλεσ :roll:

th_shak
08-06-07, 17:37
Βάλε αυτά στην αρχή του προγράμματος αντι για #include<avr>