Hallo allerseits,

habe gerade ein einfaches Programm entworfen, das das Analogsignal (wird über poti auf Pin C 0 [Atmega8 ADC0] 0-5V) eingelesen. Es soll nach beendigung der ADC-Conversion also nach auslösen des Interrupts, über die Serielle Schnittstelle ausgegeben werden. Leider kommt nur Gullasch am Hyperterminal an. Denke ich habe irgendeinen Denkfehler drin, da das Gullasch sich beim Drehen des Potis verändert.

Achtung: Das ich ADLAR gesetzt habe war nur ein Versuch, dachte mal schauen was passiert wenn er die bits auf die andere seite schiebt, das resultat war: Andere ASCII Zeichen am Hyperterminal die sich beim Drehen des Potis verändern.

Hier der Code meines Programms:


Code:
.include "m8def.inc"

// aus dem UARTprogramm
.def temp = r16
.equ CLOCK = 3686400
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1


// aus dem ADC-prog
.def ad_value = r17
.org 0x000

	rjmp	init	;1   POWER ON RESET
	reti		;2   Int0-Interrupt
	reti		;3   Int1-Interrupt
	reti		;4   TC2 Compare Match
	reti		;5   TC2 Overflow
	reti		;6   TC1 Capture
	reti		;7   TC1 Compare Match A
	reti		;8   TC1 Compare Match B
	reti		;9   TC1 Overflow
	reti		;10  TC0 Overflow
	reti		;11  SPI, STC Serial Transfer Complete
	reti		;12  UART Rx Complete
	reti		;13  UART Data Register Empty
	reti		;14  UART Tx Complete
	rjmp ad_vector;15  ADC Conversion Complete
	reti		;16  EEPROM Ready
	reti		;17  Analog Comparator
	reti		;18  TWI (I²C) Serial Interface
	reti		;19  Store Program Memory Ready

init:
        ; Stackpointer initialisieren
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

        ; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp

        sbi UCSRB,TXEN    ;TX aktivieren


;ADC initailisieren

cbi ADMUX, MUX0
cbi ADMUX, MUX1
cbi ADMUX, MUX2
cbi ADMUX, MUX3
sbi ADMUX, ADLAR
cbi ADMUX, REFS0
cbi ADMUX, REFS1

;ADC interrupt anschalten

sbi ADCSR, ADIE

;Prescaler auf 16 setzen

cbi ADCSR,ADPS0
cbi ADCSR,ADPS1
cbi ADCSR,ADPS2

;AD Converter anschalten

sbi ADCSR,ADEN

;global interrupts aktivieren

sei

;erste Wandlung auslösen

sbi ADCSR, ADSC

;Hauptprogramm

main:
nop
nop
nop


rjmp main


ad_vector:

in temp,adch
sbi adcsr,adsc
sei
rjmp serout
ret



serout:
        sbis UCSRA,UDRE                   ; Warten bis UDR für das nächste
                                          ; Byte bereit ist
        rjmp serout
        out UDR, temp
        ret                               ; zurück zum Hauptprogramm