ADC digitalisiert nur nach Reset

Gast #141733
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.