Forum: Mikrocontroller und Digitale Elektronik ADC digitalisiert nur nach Reset


von Marcus Schäfer (Gast)


Lesenswert?

Hallo,

ich benutze der Atmel 90S8535 bzw. ATMega8535 und moechte einen Wert
mit Hilfe des internen ADC (Pin A0) einen analog Wert einlesen und das
Ergebnis auf die Ports B und D ausgeben. Hierzu habe ich folgende
Programm verfasst:



.INCLUDE "8535def.inc"

.CSEG
.ORG 0x000
  rjmp RESET ; Reset Handler
.ORG 0x050

RESET:

;  ==========================   INIT STACK POINTER
  ldi r16, high(RAMEND)
  out SPH,r16
  ldi r16, low(RAMEND)
  out SPL,r16

;  ==========================   SETUP PORTS
  ldi r16,0x00
  out DDRA,r16      ; Port A Tri-State Input
  ldi r16,0xFF
  out DDRB,r16      ; Port B Output
  out DDRD,r16      ; Port D Output
  out DDRC,r16      ; Port C Output

  ldi r16,0x00
  out PORTA, r16
  ldi r16,0xff
  out PORTB, r16
  out PORTC, r16
  out PORTD, r16

;  ==========================   SETUP ADC

  ldi r16,0
  out ADMUX,r16
  out adcsr,r16
  nop

READ_ADC1:
  sbi adcsr,adif
  ldi r16, 0b11000111     ; ADC enabled, Start Single conversion
  out ADCSR, r16          ; Prescaler 1/128

READ_ADC2:
  IN  r16,PORTC           ; Prozessor-Takt auf PORTC ausgeben
  COM r16                 ; (als Debug Signal)
  out PORTC,r16

  sbic ADCSR,ADSC    ;  wait until conversion finished
  rjmp READ_ADC2

  clr r17                 ; Warteschleife um Prozessor-Takt
read_adc3:                      ; auf Port C zu unterbrechen
  nop                     ; (Debug info)
  nop
  inc r17
  tst r17
  brne read_adc3

  IN   r17,ADCH     ;   read data to r17:r18
  IN   r18,ADCL

  out PORTD,r17           ; Binärdaten auf Port D/B ausgeben
  out PORTB,r18
rjmp READ_ADC1




Meiner Meinung nach sollte durchgängig der ADC0-Eingang gesampelt und
auf die Port B/D ausgegeben werden.
Defakto wird das Signal auf ADC0 nur einmalig nach einem RESET
gesampelt. Spätere Veränderungen werden ignoriert!! Das Programm läuft
anscheinend korrekt durch alle Schleifen (Takt an Port C zeigt die
Unterbrechung durch die NOP-Schleife)

Ich hoffe Ihr könnt mir helfen,

Marcus

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.