Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία
Εμφάνιση αποτελεσμάτων : 1 έως 10 από 15

Θέμα: Pic16f877a και σειριακη

  1. #1
    Νέο Μέλος Το avatar του χρήστη mike^^
    Όνομα
    mixalis
    Εγγραφή
    Nov 2006
    Μηνύματα
    21

    Προεπιλογή Pic16f877a και σειριακη

    Γεια σε ολους.Εχω τον pic16f877a στα 20mhz κρυσταλλο και 115200 baud rate.Πρεπει να διαβαζω απο το A/D αναλογικο σημα μεχρι 1κhz και να το δειχνω στον υπολογιστη.Το προβλημα μου τωρα ειναι οτι μεχρι τα 66hz δειχνω σωστο σημα.Αρα απο εκει και πανω εχω λιγοτερα δειγματα.Υποψιαζομαι οτι ειναι ο τροπος που στελνω τα δεδομενα.Αυτος ειναι ο κωδικας μου.Υπαρχει τροπος να γινει πιο γρηγορος?
    Κώδικας:
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=115200, xmit=PIN_C6, rcv=PIN_C7)
    void main()
    {
    
    long binary0=0;
    long binary1=0;
    long binary2=0;
    float value0=0;
    float value1=0;
    float value2=0;
    setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
       setup_adc(ADC_CLOCK_INTERNAL);
       setup_psp(PSP_DISABLED);
       setup_spi(FALSE);
       setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
       setup_timer_1(T1_DISABLED);
       setup_timer_2(T2_DISABLED,0,1);
       setup_comparator(NC_NC_NC_NC);
       setup_vref(FALSE);
    
    
    while(TRUE){
    
    set_adc_channel(0);           //kanw dygmatolipsia apo to kanali 0 
    binary0=read_adc();           //diavazw ta dedomena apo thn dygmatolypsia 
    //value0=(binary0/1023)*5.04;   //metatrepw ta dedomena mou se kinyths ypodiastolhs
    printf("1 %Lu \n\r",binary0);    //stelnw ta dedomena sthn syriakh thyra 
    
    
    set_adc_channel(1);
    binary1=read_adc();
    printf ("2 %Lu \n\r ",binary1);
    
    
    set_adc_channel(2);
    binary2=read_adc();
    printf("3 %Lu \n\r",binary2);
    
    }
    }

    0 Not allowed! Not allowed!

  2. #2
    Μέλος
    Εγγραφή
    Apr 2006
    Περιοχή
    Κέρκυρα
    Μηνύματα
    5.963

    Προεπιλογή

    δεν ξέρω από Pic αλλά όταν λέμε οτι το σήμα δεν είναι σωστό πως είναι?

    0 Not allowed! Not allowed!

  3. #3
    Νέο Μέλος Το avatar του χρήστη mike^^
    Όνομα
    mixalis
    Εγγραφή
    Nov 2006
    Μηνύματα
    21

    Προεπιλογή

    οι κυματομορφες του σηματος δεν βγαινουν σωστα.εχω ημιτονοειδες σημα στην εισοδο και στον υπολογιστη βγαινει ακανονιστο.ενω στα 60hz βγαινει ακριβως το ιδιο με την εισοδο μου

    0 Not allowed! Not allowed!

  4. #4
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Αν στέλνεις στην σειριακή απ'ευθείας την τιμή που βγάζει ο adc και αποφύγεις και την printf θα δεις βελτίωση στην ταχύτητα. Ακόμα θα μπορούσες ίσως να αυξήσεις την συχνότητα του adc, για αυτό όμως θα πρέπει να κοιτάξεις το datasheet που αναφέρεις πως υπολογίζεται η συχνότητα αυτή.
    Βασικά για να κάνεις οτι καλύτερο γίνεται θα πρέπει αρχικά να βρεις τις σωστές ρυθμίσεις για τον adc που θα σου δώσουν την μέγιστη ταχύτητα και μετά θα πρέπει να βάλεις την διαδικασία της δειγματοληψίας του σήματός σου σε interrupt. Κάθε φορά που θα ολοκληρώνει ο adc μια μέτρηση θα χτυπάει αυτό το interrupt, εκεί μέσα θα αποθηκεύεται το αποτέλεσμα και θα ζητάς από τον adc καινούρια μέτρηση. Όσο θα διαρκεί η διαδικασία της μέτρησης η main συνάρτηση σου θα ασχολείται με το να στέλνει τα δεδομένα στη σειριακή.

    0 Not allowed! Not allowed!

  5. #5
    Νέο Μέλος Το avatar του χρήστη mike^^
    Όνομα
    mixalis
    Εγγραφή
    Nov 2006
    Μηνύματα
    21

    Προεπιλογή

    Τι εννοεις να την στελνω απευθεια?Γιατι μονο με printf ξερω να την στελνω

    0 Not allowed! Not allowed!

  6. #6
    Μέλος
    Όνομα
    Όνομα
    Εγγραφή
    Nov 2009
    Περιοχή
    Θεσσαλονίκη
    Μηνύματα
    197

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από mike^^ Εμφάνιση μηνυμάτων
    Τι εννοεις να την στελνω απευθεια?Γιατι μονο με printf ξερω να την στελνω
    Η printf όμως σε καθηστερεί καθώς φτίαχνει ολόκληρο string το οποίο και στέλνει. Αντί για αυτό μπορείς να στέλνεις μόνο 2 byte (τα ADRESH και ADRESL) κάθε φορά και τα υπόλοιπα να τα αναλάβει ο υπολογιστής. Για να στήλεις "χειροκίνητα" στην σειριακή αν υποθέσουμε οτι έχεις κάνει τις ρυθμίσεις απλά κοιτάς να είναι 1 το bit 5 του TXSTA και βάζεις αυτό που θέλεις να σταλεί στον TXREG. Στο datasheet αναφέρει αναλυτικά την διαδικασία. Για να δεις αν αξίζει εν τέλει τον κόπο κόιταξε στο πρόγραμμα που γράφεις τον κώδικα πόσες εντολές εκτελούνται όταν καλείς την printf και δες με πόσες θα μπορούσες να στήλεις τα δεδομένα χειροκίνητα.

    0 Not allowed! Not allowed!

  7. #7
    Νέο Μέλος Το avatar του χρήστη mike^^
    Όνομα
    mixalis
    Εγγραφή
    Nov 2006
    Μηνύματα
    21

    Προεπιλογή

    thanks.θα το ψαξω και αν εχω αλλη απορια θα ξαναστειλω.Δοκιμασα με την printf να στειλω σε δεκαδικη σε δεκαεξαδικη αλλα σε binary μορφη δεν καταφερα να τα στειλω.ισως ετσι να γινετε

    0 Not allowed! Not allowed!

  8. #8
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Για Vref έχεις βάλει τα 5V και δειγματοληψία 8 bit, μήπως η τάση του σήματος εισόδου είναι μικρή με αποτέλεσμα η έξοδος του adc να έχει μικρή ανάλυση.

    0 Not allowed! Not allowed!

  9. #9
    Νέο Μέλος Το avatar του χρήστη mike^^
    Όνομα
    mixalis
    Εγγραφή
    Nov 2006
    Μηνύματα
    21

    Προεπιλογή

    το vref το αφησα ασυνδετο ετσι ωστε το max να ειναι το 5v που ειναι το vdd.Κανονικα το εχω δειγματοληψια στα 10bit αλλα το δοκιμασα και με 8bit

    0 Not allowed! Not allowed!

  10. #10
    Μέλος Το avatar του χρήστη spiroscfu
    Όνομα
    Σπύρος
    Εγγραφή
    Aug 2010
    Περιοχή
    Κέρκυρα
    Μηνύματα
    4.652

    Προεπιλογή

    Το σήμα εισόδου πόσα βολτ είναι,
    και επίσης αν θυμάμαι καλά για να πάρεις το μικρότερο χρόνο για το conversion time θα πρέπει να βάλεις το Tad (περίοδος clock του adc) πάνω από τα 1,6uS,
    εσύ έχεις κρύσταλλο στα 20Mhz ή 50nS και έτσι το setup_adc() θα πρέπει να είναι στο /32 ή /64.
    Χρησιμοποιείς και της 5 εισόδους για sampling?

    0 Not allowed! Not allowed!

Σελίδα 1 από 2 1 2 ΤελευταίαΤελευταία

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

  1. PIC16F877A - LCD2x16
    By AR15 in forum Μικροελεγκτές
    Απαντήσεις: 15
    Τελευταίο Μήνυμα: 14-06-11, 08:22
  2. notebook & σειριακη
    By george1 in forum Software Η/Υ
    Απαντήσεις: 7
    Τελευταίο Μήνυμα: 08-08-10, 22:01
  3. Απαντήσεις: 0
    Τελευταίο Μήνυμα: 27-05-10, 01:08
  4. ΣΕΙΡΙΑΚΗ ΣΥΝΔΕΣΗ
    By giannhssdra in forum Μικροελεγκτές
    Απαντήσεις: 18
    Τελευταίο Μήνυμα: 05-03-10, 21:09

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

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