Forum: Mikrocontroller und Digitale Elektronik atmega8 ADC Problem


von Hannes (Gast)


Lesenswert?

hallo zusammen,
ich versuche gerade den ADC zum laufen zu bekommen.
atmega8, avr-studio 4.18, usbtiny2313-isp

.include "m8def.inc"

.def temp = r16
.def time = r17
.def null = r18
.def state = r24

.org 0x0000
  rjmp main
.org ADCCaddr
  rjmp ADC_1

main:
  ldi temp, LOW(RAMEND)
  out SPL, temp
  ldi temp, HIGH(RAMEND)
  out SPH, temp

  ldi temp, 0xFF
  out PORTD, temp

  ldi temp, 0b01100010
  out ADMUX, temp
  ldi temp, 0b10000111
  out ADCSRA, temp

ADC_1:
  sbi ADCSRA, ADSC

loop:
  sbic ADCSRA, ADSC
  rjmp loop

  in temp, ADCH
  out PORTD, temp
  rjmp ADC_1


das ganze ist wie im toturial aufgebaut nur das die ergebisse direkt auf 
PORTD ausgegeben werden. linksbündig, AREF=VCC, ADC2-Port, Prescaler=128 
-> 62,5kHz

dise version sollte auch ohne interrupt gehn, aber es kommt garnix an 
-.-

vielleicht kann mir einer sagen warum ^^


lg Hannes

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Statt

  ldi temp, 0xFF
  out PORTD, temp

schreiben

  ldi temp, 0xFF
  out DDRD, temp

Die Bitorgie 0b01100010 und 0b10000111 habe ich nicht aufgedröselt. Ich 
verwende da immer symbolische Bitnamen.

> .org ADCCaddr
>   rjmp ADC_1

Ist vermutlich überflüssig, weil die ISR und das Anschalten des 
Interrupts fehlt.

von AVRuser (Gast)


Lesenswert?

Hallo,

ich vermisse die Konfiguration von Port D als Ausgang. Wie soll sonst 
dort etwas ausgegeben werden?

Der Code in "main":

>  ldi temp, 0xFF
>  out PORTD, temp

schaltet lediglich die Pullup-Widerstände ein; der Port ist aber Eingang 
(ist Standard nach Reset).

Port D als Ausgang muss heissen:

  ldi temp, 0xFF
  out DDRD, temp

Der Rest der Routine sieht korrekt aus.

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.