PDA

Επιστροφή στο Forum : ATmega32. reading pins value.



Silas
09-12-07, 19:14
Καλησπερα σε ολους.

1 κουμπι 2 led. Αυτο που προσπαθω να κανω ειναι , μολις παταω το κουμπι και για οση ωρα το εχω πατημενο, το led 1 αναβει. Μολις αφησω το κουμπι το led1 σβηνει και το led2 αναβει.
Δυστυχως αυτο που γινεται ειναι 100 Dsec αφου δωσω ταση στον μC το led2 αναβει και δεν γινεται κατι αλλο απο κει και περα. Υποθετω πως για να μην αλλαζει η κατασταση στα led ουσιαστικα δεν διαβαζω την εισοδο σωστα..

PORTB.0 διαβαζει εαν το κουμπι πατηθηκε η οχι.
PORTC.1,2 αλλαζουν κατασταση αναλογα με την κατασταση του κουμπιου.

Ο κωδικας ειναι attached. Καμμια ιδεα?

Ευχαριστω.

gsmaster
10-12-07, 00:04
Συμφωνα με αυτό που περιγράφεις λέγοντας


μολις παταω το κουμπι και για οση ωρα το εχω πατημενο, το led 1 αναβει. Μολις αφησω το κουμπι το led1 σβηνει και το led2 αναβει.

δεν υπάρχει πουθενά χρόνος? γιατί λοιπόν μπλέκεις τον χρόνο μέσα στο πρόγραμμα?


σου γράφω χοντρικα μια ιδέα.....



if (PORTB.0==1)
{
PORTC.1=1;
PORTC.2=0;
}
else
{
PORTC.1=0;
PORTC.2=1;
}


το hardware σου είναι σωστό?

Silas
10-12-07, 00:46
Αυτο ειναι ενα μερος απο τον κωδικα μονο, προσπαθω να φτιαξω ενα data logger. Μετραω στα οχτω καναλια του avr με τον embeded adc , και το εμφανιζω σε ενα display ( το οποιο φιλοδοξω να χειριζομαι με 4 κουμπια, αρκετα δυσκολοτερο απ οτι το περιμενα..) η το στελνω στο pc. Τον χρονο τον χρειαζομαι για sampling rates, για επικοινωνια με το pc (Usart) και γενικα διαχειριση γεγονοτων. Οχι προς το παρον, σε αυτο το κομματι δεν μπλεκω πουθενα χρονο αν και στην συνεχεια θα παιζει ρολο το ποση ωρα πατηθηκε ενα πληκτρο.
Ναι, ειμαι !σχεδον! σιγουρος πως hardwarικα ειμαι ενταξει.
Παιζωντας λιγο, αφησα το PORTC χωρις τα pull-ups ( tristate) και αυτο που γινετε τωρα ειναι, τα δυο led να εναλλασονται αρκετες φορες το δευτερολεπτο χωρις να εχω πατησει το κουμπι. Πατωντας το κουμπι το led2 σταθεροποιητε αναμενο, ενω το led1 συνεχιζει να αναβοσβηνει.


Ναι, εχεις δικιο, ισως πρεπει να ξεκινισω απο κατι πιο απλο.
Θα το δοκιμασω αυριο μολις γυρισω απο δουλια.

Ευχαριστω πολυ.
:D

shoco
10-12-07, 08:31
Για να διαβασεις το port στους AVR το κανεις με το PINx

Silas
12-12-07, 10:38
Okay... floating inputs...
Οι εσισοδοι δεν επαιρναν ποτε την τιμη 0, με αποτελεσμα ποτε να μην δουλευει σωστα. Εβαλα την πορτα Β στην Vcc και γειωσα τα κουμπια. Αλλαξα αναλογα τισ καταστασεις και τωρα ολα δουλευουν οπως τα περιμενα. Δεν εχω καταλαβει ομως και πολυ καλα τι παιζει με τα internal pull ups, και με το αν ειναι high ή low μια πορτα. Ξερει κανεις κανενα tutor που να δινει περισσοτερη βαρυτητα σε αυτα, γιατι απο το manual λιγα πραγματα καταλαβα.

PiCBuRn3r
13-12-07, 20:30
Okay... floating inputs...
Οι εσισοδοι δεν επαιρναν ποτε την τιμη 0, με αποτελεσμα ποτε να μην δουλευει σωστα. Εβαλα την πορτα Β στην Vcc και γειωσα τα κουμπια. Αλλαξα αναλογα τισ καταστασεις και τωρα ολα δουλευουν οπως τα περιμενα. Δεν εχω καταλαβει ομως και πολυ καλα τι παιζει με τα internal pull ups, και με το αν ειναι high ή low μια πορτα. Ξερει κανεις κανενα tutor που να δινει περισσοτερη βαρυτητα σε αυτα, γιατι απο το manual λιγα πραγματα καταλαβα.

Για internal pullup στο πχ. PD2:


DDRD &= ~&#40;1 << PD2&#41;; // Κάνουμε είσοδο το pin
PORTD |= &#40;1 << PD2&#41;; // Ενεργοποιούμε το pullup.

Να υποθέσω avr-gcc compiler σε linux ? :D

Στο avrfreaks.net θα βρεις πολλά tutorials και πληροφορίες...

Silas
16-12-07, 15:35
Να υποθέσω avr-gcc compiler σε linux ? :D

Στο avrfreaks.net θα βρεις πολλά tutorials και πληροφορίες...


Κατα κυριο λογο ναι, avr-gcc σε linux, αλλα παιζουν φορες που χρειαζομαι debugger (και δυστηχως το studio ειναι πολυ βολικοτερο απο το kdbg ) οποτε το γυρναω σε Win.

Ψαχνω και εκει, αλλα το προβλημα μου ειναι οτι οταν το θεμα γινετε πολυ technical, τα αγγλικα μου ειναι λιγα. Ειναι παντως πολυ καλο site και παρεχει ποοοολυ πληροφορια.

Ευχαριστω αδερφε.