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







Zitieren

Lesezeichen