Welche möglichkeiten habe ich analoge Signale mithilfe eines Avrs zu verarbeiten ( Digialisieren )
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.