Forum: Mikrocontroller und Digitale Elektronik Analog->Digital


von Alfons (Gast)


Lesenswert?

Welche möglichkeiten habe ich analoge Signale mithilfe eines Avrs zu
verarbeiten ( Digialisieren )

von Tobi (Gast)


Lesenswert?

der avr hat einen 10bit adc intern. wenn du eine höhere genauigkeit oder
mehr geschwindigkeit beim umwandeln brauchst wirst du um einen externen
adc nicht herumkommen. die benutzung des internen adc ist schon in
vielen threads im forum, tutorials und im datenblatt des avr
beschrieben

von Andy Mart (Gast)


Lesenswert?

Hallo!
Ich bin noch Anfänger mit den AVRs und experimentiere mit dem ATMega8
herum.
Ich bekomme das mit den Interupts noch nicht hin. Kann mir mal jemand
sagen, ob mein Code so funktionieren könnte, und welche die einfachste
Möglichkeit ist, eine Analoge Spannung am Eingang irgendwie digital in
ein Register zu bekommen?

Vielen Dank jetzt schon mal!!!
Gruß
Andy


.INCLUDE "m8def.inc"

.def temp=R16
.def temp2=R17


     RETI              ;1  0x000(1) RESET External Pin, Power-on Reset,
Brown-out
                       ;   Reset, and Watchdog Reset
     RETI              ;2  0x001 INT0 External Interrupt Request 0
     RETI              ;3  0x002 INT1 External Interrupt Request 1
     RETI              ;4  0x003 TIMER2 COMP Timer/Counter2 Compare
Match
     RETI              ;5  0x004 TIMER2 OVF Timer/Counter2 Overflow
     RETI              ;6  0x005 TIMER1 CAPT Timer/Counter1 Capture
Event
     RETI              ;7  0x006 TIMER1 COMPA Timer/Counter1 Compare
Match A
     RETI              ;8  0x007 TIMER1 COMPB Timer/Counter1 Compare
Match B
     RETI              ;9  0x008 TIMER1 OVF Timer/Counter1 Overflow
     RETI              ;10 0x009 TIMER0 OVF Timer/Counter0 Overflow
     RETI              ;11 0x00A SPI, STC Serial Transfer Complete
     RETI              ;12 0x00B USART, RXC USART, Rx Complete
     RETI              ;13 0x00C USART, UDRE USART Data Register Empty
     RETI              ;14 0x00D USART, TXC USART, Tx Complete
     RJMP     ADCRDY   ;15 0x00E ADC ADC Conversion Complete
     RETI              ;16 0x00F EE_RDY EEPROM Ready
     RETI              ;17 0x010 ANA_COMP Analog Comparator
     RETI              ;18 0x011 TWI Two-wire Serial Interface
     RETI              ;19 0x012 SPM_RDY Store Program Memory Ready


main:
     ldi temp, $00          ; ADMUX Channel 0 setzen
     out ADMUX, temp

     ldi temp, 0b10001000   ; ADC enable und einen dummy read triggern
(die Bedeutung der Bits stehen im Datenblatt)
     out ADCSR, temp
     sei                    ; enable general Interrupt
     sbi ADCSR,6            ; nächsten read anstossen

; ende

ADCRDY:                     ; Interrupt Routine
     in temp, ADCL          ; lower Wert nach Rn einlesen
     in temp2, ADCH         ; hohen Wert nach rn
                            ; die eingelesenen Werte stehen nun in den
Registern zum weiter verarbeiten
     sbi ADCSR,6            ; lesen des nächsten wertes anstossen
reti

von harry (Gast)


Lesenswert?

hi,

nix gegen asm, macht manchmal wirklich sinn.
trotzdem liegen die einfachsten möglichkeit in hochsprachen.
beispiel aus basic-dialekten:

'x = getadc(0)' , wobei die 0 den adc-input beschreibt

gruss, harry

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.