Σελίδα 49 από 55 ΠρώτηΠρώτη ... 39 47 48 49 50 51 ... ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 481 έως 490 από 543

Θέμα: Απορία για "κώδικα".

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

    Προεπιλογή

    Το LC να δω πως θα κάνεις μετά...
    Άμα έχεις λάθος interrupt δεν μπορείς να κάνεις τίποτα.
    Ανέβασε κώδικα.

    0 Not allowed! Not allowed!

  2. #482
    Μέλος Το avatar του χρήστη finos
    Όνομα
    Βαγγελης
    Εγγραφή
    Feb 2013
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    1.775

    Προεπιλογή

    Πρως το παρόν δεν έχω γράψει ούτε γραμμή δέν βγάζω άκρη με την βηβλιοθηκη δλδ τα pcint επιρεαζουν τα pwm ?

    0 Not allowed! Not allowed!

  3. #483
    Μέλος Το avatar του χρήστη manolena
    Όνομα
    Μάνος
    Εγγραφή
    Dec 2006
    Περιοχή
    Ελευσίνα
    Μηνύματα
    2.709

    Προεπιλογή

    Βάγγο, τι θες να κάνεις ακριβώς; Άμα μπορείς, περίγραψε με λίγη λεπτομέρεια τι σκέφτεσαι γιατί τώρα βαράμε κουπί σε βάρκα δεμένη στο ντόκο.

    0 Not allowed! Not allowed!

  4. #484
    Μέλος Το avatar του χρήστη finos
    Όνομα
    Βαγγελης
    Εγγραφή
    Feb 2013
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    1.775

    Προεπιλογή

    Θέλω για " διαβάζω " τα κουμπιά της κατασκευής με interupt κι στο read me είδα ότι λέει δεν μπορώ να κάνω serial.print κι delay (που ήξερα ότι δεν γίνεται σε interupts ) απλά μου φάνηκε περίεργο που δεν δουλεύει το serial.print στα pcint ενώ στα external δεν είδα να αναφέρεται κάπου ο περιορισμός αυτός .

    0 Not allowed! Not allowed!

  5. #485
    Μέλος Το avatar του χρήστη finos
    Όνομα
    Βαγγελης
    Εγγραφή
    Feb 2013
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    1.775

    Προεπιλογή

    δεν "επιτρέπετε" γενικα να τρέχεις serial.print μεσα σε interupt function η μονο στα pcint ?

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Πρόσεξε λίγο, το interrupt είναι ένα κουδούνι, τίποτα παραπάνω.
    Το ISR (interrupt service routine) είναι η ρουτίνα που εξυπηρετεί κάθε κουδούνι.
    Μέσα στα ISR είναι κλειστά τα interrupt, γιατί έτσι είναι οι 8bit avr.
    Άμα πας να κάνεις κάτι που είναι interrupt driven μέσα σε ISR πολύ απλά δεν θα τρέξει γιατί μόλις χτυπήσει το κουδούνι δεν θα γίνει τίποτα.
    Αν ντε και καλά θέλεις interrupt μέσα σε ISR ψάξε "nested interrupts in avr".
    Εσύ όμως δεν θέλεις οπότε βρες άλλον τρόπο. Σήκωσε μια bool και κάνε έλεγχο της bool στο loop.

    *Τα interrupt προκαλούν πολλά φαντάσματα στον κώδικα, άμα περιμένεις να τα μάθεις από βιβλιοθήκη θα χαθείς.

    Εγώ τι κάνω: Έχω 1 buffer 200 char, μόλις κάνει λήψη η σειριακή με ISR βάζει τα δεδομένα στον buffer και ελέγχει αν ολοκληρώθηκε το μήνυμα γιατί έχω συγκεκριμένο format, σε κάθε loop ελέγχω την σημαία και αν χρειαστεί απαντάω.

    2 Not allowed! Not allowed!

  7. #487
    Μέλος Το avatar του χρήστη SProg
    Όνομα
    Σάββας
    Εγγραφή
    Mar 2014
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    2.612

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από Fire Doger Εμφάνιση μηνυμάτων
    Εγώ τι κάνω: Έχω 1 buffer 200 char, μόλις κάνει λήψη η σειριακή με ISR βάζει τα δεδομένα στον buffer και ελέγχει αν ολοκληρώθηκε το μήνυμα γιατί έχω συγκεκριμένο format, σε κάθε loop ελέγχω την σημαία και αν χρειαστεί απαντάω.
    Ετσι ειναι και το σωστο Στεφ

    1 Not allowed! Not allowed!

  8. #488
    Μέλος Το avatar του χρήστη finos
    Όνομα
    Βαγγελης
    Εγγραφή
    Feb 2013
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    1.775

    Προεπιλογή

    Κώδικας:
    #include <PinChangeInterrupt.h>const int button = 12;
    const int led = 13;
    int Relay = 13;
    int stateRelay = HIGH;
    int stateButton;
    int previous = HIGH;
    
    
    void setup() {
      pinMode(button, INPUT_PULLUP);//enable pullups
      pinMode(Relay, OUTPUT);//set relay to output
      attachPCINT(digitalPinToPCINT(button), on_off, CHANGE);//enable interupts
    
    
    }
    void on_off() {
    
    
      stateButton = digitalRead(button);
      if (stateButton == LOW && previous == HIGH) {
        if (stateRelay == HIGH) {
          stateRelay = LOW;
         
        }
        else {
          stateRelay = HIGH;
             }
      }
    }
    
    
    void loop() {
      digitalWrite(Relay, stateRelay);
    }
    εγραψα λγ κωδικα κι εξηγώ λγ πιστευω τι θελω να κανω , δεν τον εχω δοκιμασει και ουτε ξερω αν δουλεύει αυτο που θελω να κανω ειναι να αποδεσμευσω τελιος την loop() απο τον διαβασμα του front panel, των encoder και των λιπών διεπαφών του χρηστη , εχω λγ καιρω να γραψω κωδικα κωδικα για arduino και μπορει να εχει λαθαρες ο κώδικας ειναι για να ανοιγει και να κλινει την εξοδο οταν πατηθεί το κουμπι

    0 Not allowed! Not allowed!

  9. #489
    Μέλος Το avatar του χρήστη finos
    Όνομα
    Βαγγελης
    Εγγραφή
    Feb 2013
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    1.775

    Προεπιλογή

    εκανα μεγαλη βλακια ? δεν ειναι σωστός ο κώδικας ?

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Βαγγέλη, ένα παράδειγμα πως θα κάνεις debug προβλήματα με interrupt.
    Στέλνει το pc ένα string και περιμένει απάντηση με συχνότητα 1Hz.
    Δουλεύει κομπλέ αλλά κάποια στιγμή δεν παίρνει απάντηση. Σε τέτοια τυχαία φαινόμενα υποπτεύεσαι interrupt.
    Το μόνο ενεργό ήταν ένα με διάρκεια 1ms με συχνότητα 2Hz. Η σειριακή 115200 bps
    Στην αρχή του interrupt βάζεις να κάνει ένα pin high και στο τέλος low και καταγράφεις με analyzer ή παλμογράφο (τον παλμογράφο δεν το ξέρω ακόμα καλά να τον σετάρω για να στο δείξω). Στο παράδειγμα πχ μου πήρε κανένα 5λεπτό για να μπαγκάρει οπότε θέλεις trigger κ ιστορίες.

    Εδώ είναι ένα ολοκληρωμένο πακέτο. Το debug είναι τι έφτασε στον buffer, προσπέρασε το γιατί δεν στέλνονται ταυτόχρονα, έκανα πειράματα.


    Και εδώ ένα προβληματικό. Αμέσως καταλαβαίνεις που γίνεται η μλκια.
    (Και απ' ότι κατάλαβα η σειριακή σαν περιφερειακό έχει 2 byte στο hardware, με interrupt το arduino τα πάει στην Ram και αν δεν αδειάσουν επειδή τρέχει άλλο ISR χάνονται τα επόμενα αλλά δεν την έχω μελετήσει να σου πω την αλήθεια)



    Άλλαξα το ISR σε 1 εντολή (σήκωμα σημαίας) φτάνοντας στα <500nS και ο analyzer 1/10 να πιάσει τον παλμό με 24Mhz οπότε διορθώθηκε.
    Έτσι κάνεις εξσφαλμάτωση bug που σχετίζονται με interrupt. Ελπίζω να έμαθες κάτι

    2 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη Fire Doger : 25-07-17 στις 20:40

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

    finos (26-07-17), manolena (26-07-17)

Σελίδα 49 από 55 ΠρώτηΠρώτη ... 39 47 48 49 50 51 ... ΤελευταίαΤελευταία

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

  1. Απαντήσεις: 8
    Τελευταίο Μήνυμα: 01-05-20, 14:51
  2. Απαντήσεις: 1
    Τελευταίο Μήνυμα: 27-05-11, 08:48
  3. Απαντήσεις: 0
    Τελευταίο Μήνυμα: 22-10-10, 23:51
  4. Απαντήσεις: 9
    Τελευταίο Μήνυμα: 22-02-10, 14:01
  5. Απαντήσεις: 39
    Τελευταίο Μήνυμα: 17-04-09, 13:43

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

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