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

Θέμα: Απλό παράδειγμα χρήσης του AD converter των AVR με Assembly

  1. #1
    Μέλος Το avatar του χρήστη eebabs2000
    Όνομα
    Χαράλαμπος
    Εγγραφή
    Apr 2005
    Περιοχή
    Νέα Λάμψακος, Χαλκίδα
    Μηνύματα
    1.213

    Προεπιλογή Απλό παράδειγμα χρήσης του AD converter των AVR με Assembly

    Καλησπέρα σε όλους και χρόνια πολλά.

    Μήπως κάποιος φίλος θα μπορούσε να δώσει ένα απλό παράδειγμα χρήσης του ADC ενός μικροελεγκτή AVR π.χ. του ATmega8535 (που τον έχω κιόλας);

    Θα ήθελα απλά να δέχεται το αναλογικό σήμα από ένα κανάλι για παράδειγμα στο pin ADC0, π.χ. από ένα ποτενσιόμετρο και να βλέπω σε ψηφιακή μορφή μέσω μιας πόρτας άλλης π.χ. της πόρτας B που θα έχω προσαρμόσει 8 Led, μόνο και μόνο για να καταλάβω πως λειτουργεί για να κάνω κάποιες εφαρμογές που θέλω.

    Στο internet που κοίταξα είχαν πολύπλοκες εφαρμογές και δεν μπόρεσα να τις προσαρμόσω.

    Ευχαριστώ εκ των προτέρων για την απάντηση.

    0 Not allowed! Not allowed!
    Επισκευές ηλεκτρονικών συσκευών - Κινηματογραφική παραγωγή

    https://www.fixygon.gr/
    https://www.facebook.com/fixygon.gr/

  2. #2
    Μέλος
    Εγγραφή
    Nov 2007
    Μηνύματα
    1.459

    Προεπιλογή

    Από το χρονοντούλαπό μου, το παράδειγμα που σχεδόν ακριβώς θες


    Κώδικας:
    /* 
    ADC example for the AT90S8535 on 
    the Atmel STK500 starter kit 
     
    CodeVisionAVR C Compiler 
    © Copyright 2001-2002 HP InfoTech S.R.L. 
    www.hpinfotech.ro 
     
    Set the following jumpers on the STK500 board: 
    VTARGET, AREF, RESET, XTAL1, OSCSEL: 1-2 
     
    Connect the PORTB and LEDS headers with 
    a 10 wire ribbon cable 
     
    Connect the ISP6PIN and SPROG3 headers with 
    a 6 wire ribbon cable 
     
    The AT90S8535 must be located on socket SCKT3100A3 
     
    In the AVR Studio Tools|STK500|Board window set: 
    - VTarget=5.0V 
    - ARef=5.0V 
    - Oscillator=3.69MHz 
     
    Apply a positive DC voltage in the 0..5.0V range 
    between the PORTA header PA0 and GND pins 
    */ 
     
    // I/O register definitions for AT90S8535 
    #include <90s8535.h> 
    // delay functions 
    #include <delay.h> 
     
    #define ADC_VREF_TYPE 0x00 
    // ADC interrupt service routine 
    interrupt [ADC_INT] void adc_isr(void) 
    { 
    // The LEDs will display the 8 most 
    // semnificative ADC bits 
    PORTB=(unsigned char) ~(ADCW>>2); 
    // 20ms delay 
    delay_ms(20); 
    // Start a new AD conversion 
    ADCSR|=0x40; 
    } 
     
    void main(void) 
    { 
    // Port B initialization 
    PORTB=0xFF; // all outputs 
    DDRB=0xFF;  // all LEDs are initially off 
     
    // ADC initialization 
    // ADC Clock frequency: 57.656 kHz 
    // ADC Interrupts: On 
    ADCSR=0x8E; 
     
    // Global enable interrupts 
    #asm("sei") 
     
    // Select ADC input 0 
    ADMUX=0; 
     
    // Start the first AD conversion 
    ADCSR|=0x40; 
     
    // All the job is done by ADC interrupts 
    while (1); 
    }

    0 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη kioan : 27-12-18 στις 10:05

  3. #3
    Μέλος Το avatar του χρήστη eebabs2000
    Όνομα
    Χαράλαμπος
    Εγγραφή
    Apr 2005
    Περιοχή
    Νέα Λάμψακος, Χαλκίδα
    Μηνύματα
    1.213

    Προεπιλογή

    Καλημέρα! Ευχαριστώ για την απάντηση! Αυτό δεν είναι σε γλώσσα C; Σε assembly πως θα το γράψω;

    0 Not allowed! Not allowed!
    Επισκευές ηλεκτρονικών συσκευών - Κινηματογραφική παραγωγή

    https://www.fixygon.gr/
    https://www.facebook.com/fixygon.gr/

  4. #4
    Μέλος
    Εγγραφή
    Nov 2007
    Μηνύματα
    1.459

    Προεπιλογή

    Συγνώμη, τώρα είδα τον τίτλο του μυνήματος?
    Αλλά γιατί assembly εν έτει 2019 (σχεδόν). Μαζωχιστικοί λόγοι ή τερτίπια κάποιου καθηγηταρά, εποχή που είναι?

    1 Not allowed! Not allowed!

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

    Προεπιλογή

    Φίλε Στρατο με όλο το θάρρος.. έχεις μεσάνυχτα.

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Παράθεση Αρχικό μήνυμα από pstratos Εμφάνιση μηνυμάτων
    Συγνώμη, τώρα είδα τον τίτλο του μυνήματος?
    Αλλά γιατί assembly εν έτει 2019 (σχεδόν). Μαζωχιστικοί λόγοι ή τερτίπια κάποιου καθηγηταρά, εποχή που είναι?
    πιθανόν γιατί η assembly είναι πολύ πιο εύκολη γλώσσα από την C.... τουλάχιστον αν δεν σου χρειάζονται τίποτα υπολογισμοί με κινητή υποδιαστολή... που πιθανόν και τότε να είναι πιο εύκολο να υλοποιήσεις τους αλγόριθμους κινητής υποδιαστολής από το να μάθεις όλες τις παραξενιές της C.....

    0 Not allowed! Not allowed!

  7. #7
    Μέλος
    Όνομα
    Χρήστος
    Εγγραφή
    Sep 2012
    Περιοχή
    Χολαργός
    Μηνύματα
    1.907

    Προεπιλογή

    Τώρα θυμήθηκα αυτό που έλεγε ένας συνάδελφος , ευκολότερο είναι για τον καθένα αυτό που ξέρει καλύτερα .
    Πάντως συμφωνώ με τον chip οτι για παιδαγωγικούς λόγους μπορεί κάποιος να ξεκινήσει με assembly .
    Βέβαια , αν θέλει κανείς να μάθει και όχι απλά να περάσει ένα μάθημα ... στρώνεται στο διάβασμα και βρίσκει τη λύση χωρίς να ρωτάει από δω και από κει !
    Εγώ πχ που ήξερα assembly z80 ... και δεν έχω δουλέψει παραπάνω από μια βδομάδα με AVR , έψαξα λίγο για τον φίλο μας στο google και του βρήκα ολόκληρη λύση έτοιμη ... ( αντιπαιδαγωγικό βέβαια ... αλλά ... ) Το κακό με τα έτοιμα είναι οτι αν δεν κουραστείς να βρεις το λάθος ... δεν μαθαίνεις !


    https://www.instructables.com/id/Command-Line-Assembly-Language-Programming-for-Ard-6/



    1 Not allowed! Not allowed!
    Τελευταία επεξεργασία από το χρήστη aktis : 27-12-18 στις 16:32

  8. #8
    Μέλος Το avatar του χρήστη Ste7ios
    Όνομα
    -
    Εγγραφή
    Mar 2012
    Περιοχή
    -
    Μηνύματα
    633

    Προεπιλογή

    Η επιλογή της ποιας γλώσσας προγραμματισμού υψηλού ή χαμηλού επιπέδου θα επιλέξεις εξαρτάται απο τους στόχους σου. Αν εστιάζεις στην απολδοση, θες να στύψεις το hardware η assembly είναι μονόδρομος. Όσο καλοί και αν είναι οι σύγχρονοι compilers κανένας δεν μπορεί να φτάσει την απόδοση της assembly.

    Αν θες ταχύτητα ανάπτυξης επιλέγεις κάποια απο τις high level γλώσσες ανάλογα πάλι με το πως σε εξυπηρετεί...

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Το να μαθεις να προγραμματιζεις σε ASM τον οποιοδηποτε μικροελεγκτη σημαινει οτι εχεις καταλαβει λιγο-πολυ πως ειναι δομημενοι/οργανωμενοι γενικα οι μικροελεγκτες και οι μνημες/καταχωρητες κτλ τους.

    Κανενας που ασχολειται με μικροελεγκτες και προγραμματισμο τους δεν ασχολειται πλεον με ASM. Οι συγχρονοι compilers δεν εχουν καμια σχεση με πριν 20 χρόνια.

    Σε ASM γραφεις μονο (εαν ποτε χρειαστει... πχ σε κανα bootloader) κομματια κωδικα.

    Με λιγο λογια, δεν ειναι απαραιτητη η ASM αλλα ειναι ενα τεραστιο εργαλειο για να κατανοησεις σωστα το πως δουλευει σωστα ενας μΕ. Δεν ειναι ολοι οι καθηγητες τεμπεληδες ή ασχετοι... η C είναι η ευκολη λύση.

    Υ.Γ Ψαξε για το βιβλιο AVR Microcontroller and Embedded Systems: Using Assembly and C. Εαν δε το βρεις στειλε μου Inbox

    0 Not allowed! Not allowed!

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

    Προεπιλογή

    Διαβασε το datasheet να δεις τι επιλογες εχει ο καθε καταχωρητης:

    Κώδικας:
    .INCLUDE "M8535DEF.INC"
    
    
    // PortB = eksodos
    LDI R16,0xFF
    OUT DDRB, R16
    
    
    // PortA = eisodos
    LDI R16,0x00
    OUT DDRA,R16
    
    
    /* ADCSRA
    
    
     Bit7 ADC Enable = 1
     Bits 2:0 ADPS2:0 =  ADC Prescaler Select Bits
                         [111] simainei  ADC Frequency  = XTAL frequency / 128  
    
    
    */
    LDI R16,0x87
    OUT ADCSRA,R16
    
    
    /* ADMUX
    
    
     Bit 7:6  REFS1:0: Reference Selection Bits
                        [00] simainei Voltage Reference = AREF    
     Bit 5    ADLAR: ADC Left Adjust Result
                         [1] simainei left adjust                        
     Bits 4:0 MUX4:0: Analog Channel and Gain Selection Bits
                         [00000] simainei ADC0 single ended
    */
    LDI R16,0x20
    OUT ADMUX,R16
    
    
    
    
    READ_AGAIN:
        SBI ADCSRA,ADSC    // ADC Start Conversion
    ADC_POLLING:
        SBIS ADCSRA,ADIF // Is the conversion completed?
        RJMP ADC_POLLING
        SBI ADCSRA,ADIF  // Clear the flag 
        IN R16,ADCH
        OUT PORTB,R16    // Read only the high byte (check left adjust option)
    RJMP READ_AGAIN
    Δεν αναφερεις με τι τροπο θελεις να διαβαζεις τον ADC, μαθε πρωτα με Polling.

    0 Not allowed! Not allowed!

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

    eebabs2000 (29-12-18)

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

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

  1. Ψηφιακός ελεγκτής για τον καυστήρα του ζεστού νερού χρήσης
    By kalarakis in forum Παρουσίαση Πρόχειρων Κατασκευών
    Απαντήσεις: 14
    Τελευταίο Μήνυμα: 07-04-18, 18:44
  2. Απλά προγράμματα σε assembly (AVR)
    By ALAMAN in forum Μικροελεγκτές
    Απαντήσεις: 23
    Τελευταίο Μήνυμα: 02-05-13, 18:49
  3. 18F2550 sdcc/picprog απλό παράδειγμα
    By gnt in forum Μικροελεγκτές
    Απαντήσεις: 1
    Τελευταίο Μήνυμα: 02-05-12, 14:23
  4. AVR Assembly
    By Voulis8515L in forum Μικροελεγκτές
    Απαντήσεις: 23
    Τελευταίο Μήνυμα: 10-01-11, 14:43
  5. Απαντήσεις: 0
    Τελευταίο Μήνυμα: 05-11-08, 14:41

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

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