mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ADC digitalisiert nur nach Reset


Autor: Marcus Schäfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.