Σελίδα 3 από 6 ΠρώτηΠρώτη 1 2 3 4 5 ... ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 21 έως 30 από 54

Θέμα: Atmel ή PIC

  1. #21
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    http://playground.arduino.cc/Code/Timer1
    Παραδείγματα υπάρχουν άπειρα http://homediyelectronics.com/projec...erruptexample/

    Είσαι σίγουρος πως ξέρεις τι θέλεις να κάνεις?
    100μS παλμός σημαίνει πως σε avr με 16Mhz clock έχεις 100/0.625 κύκλους εργασίας για να κάνεις ότι είναι να κάνεις και περίπου άλλους τόσους μετά.
    Δηλαδή έχεις στην καλύτερη 304 εντολές assembly (αν κάθε εντολή πιάνει 1 κύκλο) πριν σου έρθει ο επόμενος παλμός.
    (Και φυσικά πρέπει να απενεργοποιήσεις τον Timer0 που χρησιμοποιεί για την millis )

    0 Not allowed! Not allowed!

  2. #22
    Μέλος Το avatar του χρήστη nio-4-
    Όνομα
    Γιάννης
    Εγγραφή
    Feb 2008
    Περιοχή
    Σέρρες
    Μηνύματα
    1.277

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    http://playground.arduino.cc/Code/Timer1
    Παραδείγματα υπάρχουν άπειρα http://homediyelectronics.com/projec...erruptexample/

    Είσαι σίγουρος πως ξέρεις τι θέλεις να κάνεις?
    100μS παλμός σημαίνει πως σε avr με 16Mhz clock έχεις 100/0.625 κύκλους εργασίας για να κάνεις ότι είναι να κάνεις και περίπου άλλους τόσους μετά.
    Δηλαδή έχεις στην καλύτερη 304 εντολές assembly (αν κάθε εντολή πιάνει 1 κύκλο) πριν σου έρθει ο επόμενος παλμός.
    (Και φυσικά πρέπει να απενεργοποιήσεις τον Timer0 που χρησιμοποιεί για την millis )
    πολυ σωστη παρατηρηση, επειδη εχω καποια χρονακια να τα υυπολογισω...

    1/16ΜηΖ = 0,0625 us clock speed δηλαδη τοσο χρονο χρειαζεται να εκτελεσει μια εντολη assembly σωστα?

    απο εκει και περα το χανω....

    αρα με 100us διάρκεια παλμου θα πρεπει να ανοιξω να κλεισω το interrupt σωστα????

    0 Not allowed! Not allowed!

  3. #23
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Λάθος εγώ έχασα 1 μηδενικό κάπου, 1600 κύκλοι είναι.

    Πρέπει να είσαι σίγουρος πως θα έχεις τουλάχιστον 1 δείγμα πάνω στον παλμό.
    Αφού ο παλμός σου είναι 100uS τότε πρέπει να παίρνεις δείγμα κάθε <100us πχ κάθε 90uS άρα θα είσαι σίγουρος πως δεν θα χάσεις παλμό.
    Σε αυτά τα 90uS θα πρέπει να ολοκληρώνετε ο ADC, να κάνεις την σύγκριση, να ενημερώνεις την LCD και να κάθετε ο μΕ μέχρι να έρθει το επόμενο interrupt.

    Αν δεν γίνεται αυτό και χάσεις το δείγμα που είναι στο βελάκι τότε έχασες έναν παλμό.
    Βέβαια μπορείς να το εξελίξεις και αφού ξέρεις ότι το ελάχιστο κενό είναι 60us και ο παλμός 100us τότε μπορείς να έχεις μεταβλητό χρόνο και όταν λάβεις παλμό ξέρεις πως ο επόμενος θα έρθει στην χειρότερη σε 60us και θα διαρκέσει 100us άρα έχεις <160us διαθέσιμα μέχρι να χαθεί ο επόμενος παλμός και μπορείς να πειράξεις τον timer έτσι ώστε να χτυπήσει σε 150us αντί για 90us και να κερδίσεις λίγο χρόνο πιάνοντας και τον επόμενο στο τέλος του..

    1 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Fire Doger : 09-03-17 στις 01:26

  4. #24
    Μέλος Το avatar του χρήστη nio-4-
    Όνομα
    Γιάννης
    Εγγραφή
    Feb 2008
    Περιοχή
    Σέρρες
    Μηνύματα
    1.277

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    Λάθος εγώ έχασα 1 μηδενικό κάπου, 1600 κύκλοι είναι.

    Πρέπει να είσαι σίγουρος πως θα έχεις τουλάχιστον 1 δείγμα πάνω στον παλμό.
    Αφού ο παλμός σου είναι 100uS τότε πρέπει να παίρνεις δείγμα κάθε <100us πχ κάθε 90uS άρα θα είσαι σίγουρος πως δεν θα χάσεις παλμό.
    Σε αυτά τα 90uS θα πρέπει να ολοκληρώνετε ο ADC, να κάνεις την σύγκριση, να ενημερώνεις την LCD και να κάθετε ο μΕ μέχρι να έρθει το επόμενο interrupt.

    Αν δεν γίνεται αυτό και χάσεις το δείγμα που είναι στο βελάκι τότε έχασες έναν παλμό.
    Βέβαια μπορείς να το εξελίξεις και αφού ξέρεις ότι το ελάχιστο κενό είναι 60us και ο παλμός 100us τότε μπορείς να έχεις μεταβλητό χρόνο και όταν λάβεις παλμό ξέρεις πως ο επόμενος θα έρθει στην χειρότερη σε 60us και θα διαρκέσει 100us άρα έχεις <160us διαθέσιμα μέχρι να χαθεί ο επόμενος παλμός και μπορείς να πειράξεις τον timer έτσι ώστε να χτυπήσει σε 150us αντί για 90us και να κερδίσεις λίγο χρόνο πιάνοντας και τον επόμενο στο τέλος του..


    καταλαβα απλα να προσθεσω διευκρινιζοντας οτι οι παλμοι δεν εχουν περιοδο 0n-off δηλαδη εμφανιζονται οταν υπαρχει σημα απλα οχι με κενο 60 us . αυτο το ειπα γιατι ειναι η μικρότερη περιοδος απο 60-90 us .
    ο επομενος παλμος μπορει να κανει και 1ms να εμφανιστει μπορει 500us. Ελπιζω να ειναι θετικο αυτο.


    μια ερωτηση , σε ενα κωδικα που βλεπω λιτο και απεριτο ! δεν ελεγχει τον timer.

    Κώδικας:
    const int buttonPin = 2;     // the number of the pushbutton pin
    const int ledPin =  13;      // the number of the LED pin
    
    // variables will change:
    volatile int buttonState = 0;         // variable for reading the pushbutton status
    
    void setup() {
      // initialize the LED pin as an output:
      pinMode(ledPin, OUTPUT);
      // initialize the pushbutton pin as an input:
      pinMode(buttonPin, INPUT);
      // Attach an interrupt to the ISR vector
      attachInterrupt(0, pin_ISR, CHANGE);
    }
    
    void loop() {
      // Nothing here!
    }
    
    void pin_ISR() {
      buttonState = digitalRead(buttonPin);
      digitalWrite(ledPin, buttonState);
    }

    0 Not allowed! Not allowed!

  5. #25
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    external interrupt είναι αυτό που βλέπεις. Αν δεν είναι on-off logic level δεν μπορείς να τα χρησιμοποιήσεις

    0 Not allowed! Not allowed!

  6. #26
    Μέλος Το avatar του χρήστη nio-4-
    Όνομα
    Γιάννης
    Εγγραφή
    Feb 2008
    Περιοχή
    Σέρρες
    Μηνύματα
    1.277

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    external interrupt είναι αυτό που βλέπεις. Αν δεν είναι on-off logic level δεν μπορείς να τα χρησιμοποιήσεις

    καλημερα Στεφανε,

    κολλησα σε αυτο το σημειο.... αρα αφου τα θετικα σηματα ΔΕΝ ειναι logic level 0v or 5v ΔΕΝ πρεπει να χρησιμοποιησω interrupts σωστα???

    αρα μονη μεθοδος με analogRead()??????? τα αναλογικα σηματα και μετατροπη σε 0-1023

    0 Not allowed! Not allowed!

  7. #27
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Καλημέρα,

    Δεν χρειάζεται να είναι 0-5 και 1-4 κάνει, αρκεί να τριγκάρει high-low και να είναι έξω απ' την απροσδιόριστη περιοχή.
    Δεν μπορείς να χρησιμοποιήσεις external interrupt γιατί πάντα θα είναι low για τις δικές σου τάσεις. Τα Timer interrupt είναι άλλο πράγμα, άσχετα με τάσεις, σχετικά με χρόνο.

    Όσο για τον χρόνο διαλέγεις τον μικρότερο/χειρότερη περίπτωση για να μην χάσεις πληροφορία.

    Δεν μπορώ να σου απαντήσω για την μέθοδο γιατί δεν μας έχεις πει τι ακριβώς θέλεις να κάνεις, τι αποτέλεσμα θα έχει και γιατί εμφανίζεις αυτό το 3 ή 4 κλπ.
    Αυτό που προσπάθησες να κάνεις με τον κώδικα που ανέβασες σου είπα γιατί πιστεύω ότι δεν λειτουργεί.

    Να ξαναγράψω τον κώδικα δεν προλαβαίνω, όλη μέρα ασχολούμαι με την πτυχιακή μου και εδώ έρχομαι για διάλειμμα απ' το γράψιμο κώδικα

    1 Not allowed! Not allowed!

  8. Ένα μέλος ευχαρίστησε τον Fire Doger για αυτό το χρήσιμο μήνυμα:

    nio-4- (09-03-17)

  9. #28
    Μέλος Το avatar του χρήστη nio-4-
    Όνομα
    Γιάννης
    Εγγραφή
    Feb 2008
    Περιοχή
    Σέρρες
    Μηνύματα
    1.277

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    Καλημέρα,

    Δεν χρειάζεται να είναι 0-5 και 1-4 κάνει, αρκεί να τριγκάρει high-low και να είναι έξω απ' την απροσδιόριστη περιοχή.
    Δεν μπορείς να χρησιμοποιήσεις external interrupt γιατί πάντα θα είναι low για τις δικές σου τάσεις. Τα Timer interrupt είναι άλλο πράγμα, άσχετα με τάσεις, σχετικά με χρόνο.

    Όσο για τον χρόνο διαλέγεις τον μικρότερο/χειρότερη περίπτωση για να μην χάσεις πληροφορία.

    Δεν μπορώ να σου απαντήσω για την μέθοδο γιατί δεν μας έχεις πει τι ακριβώς θέλεις να κάνεις, τι αποτέλεσμα θα έχει και γιατί εμφανίζεις αυτό το 3 ή 4 κλπ.
    Αυτό που προσπάθησες να κάνεις με τον κώδικα που ανέβασες σου είπα γιατί πιστεύω ότι δεν λειτουργεί.

    Να ξαναγράψω τον κώδικα δεν προλαβαίνω, όλη μέρα ασχολούμαι με την πτυχιακή μου και εδώ έρχομαι για διάλειμμα απ' το γράψιμο κώδικα
    ολα καλα, απο οτι βλεπω λειτουργει με αναλογική μετρηση, analogRead(); το λαθος ηταν που εβαζα καθυστερηση delay() με τιμη την τιμη της μεταβλητης που παιρνει την τιμη του ασθητηρα, μεγα εγκλημα, το ειχα δει καπου, παντα εβαζα χρονο σε καθυστερησεις.
    το θεμα ειναι κατι που ανεφερε καποιος , μαλλον εσυ, οτι θα εμφανιζει σωστα την L και μετα δεν θα μπορει να εμφανισει την W.
    επισης βλεπω οτι εμφανιζει μια τιμη και για να αλλαξει πρεπει να το κλεισω κ να το ξανα ανοιξω. θελει reset αρα γεμιζει ο buffer? πως μπορω να σβηνω καθε φορα την τιμη του καταχωρητη?

    0 Not allowed! Not allowed!

  10. #29
    Μέλος Το avatar του χρήστη Fire Doger
    Όνομα
    Στέφανος
    Εγγραφή
    Jan 2015
    Περιοχή
    .
    Μηνύματα
    1.519

    Προεπιλογή

    Ποιος buffer? Ποιος καταχωριστής?

    gotoXY(9,3);
    LcdString(itoa (LscinSignal, bufferL, 10));

    gotoXY(9,3);
    LcdString(itoa (WscinSignal, bufferL, 10));

    Εγώ σε αυτό αναφέρθηκα που εκτυπώνεις και τα 2 στην θέση 9,3

    Σε κάθε function πάνε στην αρχή και βάλε Serial.println("start #1"); και στο τέλος και βάλε Serial.println("end #1");
    στην πρώτη 1, στην 2η 2 κλπ κλπ και δες σε ποια κολλάει

    1 Not allowed! Not allowed!

  11. Ένα μέλος ευχαρίστησε τον Fire Doger για αυτό το χρήσιμο μήνυμα:

    nio-4- (09-03-17)

  12. #30
    Μέλος Το avatar του χρήστη nio-4-
    Όνομα
    Γιάννης
    Εγγραφή
    Feb 2008
    Περιοχή
    Σέρρες
    Μηνύματα
    1.277

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    Ποιος buffer? Ποιος καταχωριστής?

    gotoXY(9,3);
    LcdString(itoa (LscinSignal, bufferL, 10));

    gotoXY(9,3);
    LcdString(itoa (WscinSignal, bufferL, 10));

    Εγώ σε αυτό αναφέρθηκα που εκτυπώνεις και τα 2 στην θέση 9,3

    Σε κάθε function πάνε στην αρχή και βάλε Serial.println("start #1"); και στο τέλος και βάλε Serial.println("end #1");
    στην πρώτη 1, στην 2η 2 κλπ κλπ και δες σε ποια κολλάει
    συγγνωμη για το λαθος , αλλα εχω κανει πολλες αλλαγες και καταλαθος αλλαξε η θεση , κανονικα ειναι στη θεση 51, αλλα ειναι λεπτομερια γιατι...

    εχω διαβασει σε πολλα φορουμ πολλοι ειχαν το ιδιο προβλημα, καποιοι εβαζαν πυκνωτες παραλληλα με την γειωση καποιοι αντισταση πριν την εισοδο, καποιοι εβαζαν δυο συνεχομενες φορες να διαβαζει την καθε εισοδο με ενα delay(10);
    Εγω τα έκανα ολα και τιποτα δεν πιανει!!!!

    επισης λεω, επειδη εχω καποιους PIC 16F876A που μου περισσευουν απο τα χρονια που προγραμματιζα σε assembly με τους PIC και με ειχαν βγαλει ασπροπροσωπο , ελεγα μηπως να παω σε αυτην την λυση!!!!

    0 Not allowed! Not allowed!

Σελίδα 3 από 6 ΠρώτηΠρώτη 1 2 3 4 5 ... ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Απαντήσεις: 40
    Τελευταίο Μήνυμα: 20-04-16, 22:36
  2. RF επικοινωνία ATMEL
    By glompos21 in forum Μικροελεγκτές
    Απαντήσεις: 6
    Τελευταίο Μήνυμα: 24-02-09, 19:02
  3. Programmer ATmeL & PIC
    By P@s@ris! in forum Όργανα & Εξοπλισμός
    Απαντήσεις: 3
    Τελευταίο Μήνυμα: 08-01-08, 11:44
  4. Αρχή με ATMEL
    By kopla in forum Μικροελεγκτές
    Απαντήσεις: 5
    Τελευταίο Μήνυμα: 05-12-06, 20:23
  5. Απαντήσεις: 4
    Τελευταίο Μήνυμα: 13-02-06, 09:08

Δικαιώματα - Επιλογές

  • Δημιουργία θεμάτων: Όχι
  • Υποβολή μηνυμάτων: Όχι
  • Σύναψη αρχείων: Όχι
  • Επεξεργασία μηνυμάτων: Όχι
  •  
  • BB code: σε λειτουργία
  • Smilies: σε λειτουργία
  • [IMG]: σε λειτουργία
  • [VIDEO] code is σε λειτουργία
  • HTML: εκτός λειτουργίας