Hi
ich versuch grad den ADC vom Atmega8 zu aktivieren, aber anscheinend funktioniert es nicht.
AVcc und ARef hab ich mit Vcc verbunden und AGnd mit GND
Ich häng mal das Programm an, vielleicht findet ihr den Fehler ja
Code:.include "m8def.inc" .equ cputakt = 1000000 ;arbeitet im Bereich von (1 - 20 MHz) .set count_ms = cputakt / (4000 + 1) ;ergibt in wait_ms ca.1ms vom Aufruf aus .MACRO wait_ms ldi temp, @0 ;Lade temp mit Zähler (in ms) rcall delay_ms ;Aufruf Verzögerungschleife .ENDMACRO .equ LED_PORT = PORTD .equ LED_DIR = DDRD .def LED_REG = r16 .def temp = r20 .def temp2 = r21 .def temp3 = r22 .cseg .org 0x0000 rjmp reset ; Interruptvektoren überspringen reti ; IRQ0 Handler reti ; IRQ1 Handler reti reti reti ; Timer1 Capture Handler reti ; Timer1 CompareA Handler reti ; Timer1 CompareB Handler reti ; Timer1 Overflow Handler reti ; Timer0 Overflow Handler reti ; SPI Transfer Complete Handler reti ; USART RX Complete Handler reti ; UDR Empty Handler reti ; USART TX Complete Handler rjmp adc ; ADC Conversion Complete Interrupt Handler reti ; EEPROM Ready Handler reti ; Analog Comparator Handler reti ; Two-wire Serial Interface Handler reti ; Store Program Memory Ready Handler reset: ldi temp, LOW(RAMEND) ; LOW-Byte der obersten RAM-Adresse out SPL, temp ldi temp, HIGH(RAMEND) ; HIGH-Byte der obersten RAM-Adresse out SPH, temp ldi temp, 0xFF ; 0xFF in Reg. temp laden out LED_DIR, temp ; alle ports als ausgänge ldi LED_REG, 0b00000000 ; alle Pins ein out LED_PORT, LED_REG wait_ms(255) ldi LED_REG, 0b11111111 ; alle Pins aus out LED_PORT, LED_REG wait_ms(255) rjmp initadc mainloop: rjmp mainloop initadc: cbi ADMUX, MUX0 cbi ADMUX, MUX1 cbi ADMUX, MUX2 cbi ADMUX, REFS0 cbi ADMUX, REFS1 ;sbi ADMUX, ADLAR sbi ADCSR, ADPS0 sbi ADCSR, ADPS1 cbi ADCSR, ADPS2 sbi ADCSR, ADEN sbi ADCSR, ADFR sbi ADCSR, ADIE cbi ADCSR, ADIF sei sbi ADCSR, ADSC ; start conversion rjmp mainloop adc: in temp, ADCL ; ADC-Wert einlesen in temp2, ADCH ; 10 Bit ror temp2 ; xxxxxxxN c=N ror temp ; Nnnnnnnn c=n ror temp2 ; xxxxxxxx c=N ror temp ; NNnnnnnn c=n out LED_PORT, temp reti ; ******************************************************************** ; delay_ms verzögert um x ms ; Parameter : Zeit in ms (1-255) in temp, in Z-Register keine Änderung ; Rückgabe : keine ; ******************************************************************** delay_ms: push ZL ;Z auf den Stack retten push ZH delay_ms_1: ldi ZH, HIGH(count_ms) ;Lade höherwertiges Byte nach Z ldi ZL, LOW(count_ms) ;Lade niederwertiges Byte nach Z delay_ms_2: sbiw ZL, 1 ;subtrahiere 1 von Z brne delay_ms_2 ;solange bis Z = 0 dec temp ;temp um 1 herunterzählen brne delay_ms_1 ;solange bis temp = 0 pop ZH ;Z vom Stack zurückholen pop ZL ret
Vielen Dank schonmal







Zitieren

Lesezeichen