Forum: Mikrocontroller und Digitale Elektronik ADC


ADC
von Binomie (Gast)


Lesenswert?

Hi,
Ich schreib euch mal wieder :-)
Diesmal habe ich ein Problem mit dem ADC.
Die serielle Verbindung fiunktioniert dank eurer Hilfe perfekt, nochmal 
Danke.
Also bei dem angehängten Programm sollte der ADC eigentlich einen 
Interrupt auslösen und die Messwerte sollten in den Registern stehen, 
wenn ich aber das AVR-Studio starte und die Simulation laufen lasse 
bekomme ich keinen ADC-Interrupt. Was hab ich falsch gemacht? Könnt ihr 
mir helfen?

Binomie

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Hallo!

> Ich schreib euch mal wieder :-)

Nur zu! ;-)

> Diesmal habe ich ein Problem mit dem ADC.
> Die serielle Verbindung fiunktioniert dank eurer Hilfe
> perfekt, nochmal Danke.
> Also bei dem angehängten Programm sollte der ADC eigentlich
> einen Interrupt auslösen und die Messwerte sollten in den
> Registern stehen, wenn ich aber das AVR-Studio starte und die
> Simulation laufen lasse bekomme ich keinen ADC-Interrupt. Was
> hab ich falsch gemacht? Könnt ihr mir helfen?

Sieht eigentlich soweit ok aus, das Programm (kann es jetzt leider nicht 
testen, da ich Windows erst neu installiert habe, werd ich aber 
nachholen).
Hast du geschaut, ob das Bit 4 in ADCSR in der Simulation gesetzt wird, 
oder tut sich da garnichts?
Hast du im AVR-Studio den richtigen Controller ausgewählt?
Lang genug auf den Interrupt gewartet?
Vielleicht funktioniert das Programm ja in "Real-Life"? Bau in der 
Interruptroutine halt mal einen Befehl zum LED-anschalten ein, dann 
siehst du ob was passiert.
Ich hab mal ein kleines Programm angehängt, das den auf dem 1. Kanal 
eingelesenen Wert übers UART als Hex-Zahl ausgibt. Allerdings habe ich 
da den Free-Run-Mode aktiviert. Find ich auch viel schöner so, ohne das 
umständliche Interrupt-Gebastel, man kann den Wert einfach einlesen wenn 
man ihn braucht und muss nicht irgendwo zwischenspeichern.

MfG
Andreas

von Reiner Seegebrecht (Gast)


Lesenswert?

AVR-Studio löst keinen Interrupt vom ADC aus, da der Zeitpunkt
abhängig von der Eingangsspannung und der Einstellung des
Prescalers ist. Lösung:
Mit ALT-F5 ein I/O-Fenster öffnen und bei A/D Converter-
ADC-Controll das ADIF-Bit von Hand setzen. Dann die "Messwerte"
in ADC-High und ADC-Low eintragen und Simulation starten.

Achtung! Fehler in der Interrupt Vector Liste, es fehlt ein ret
für INT1.
Besser mit der Anweisung:
.org ADCCaddr
rjmp xxx

Dann kann man sich auch das Schreiben der ganzen ret-Anweisungen
sparen.
Siehe 2333def.inc

MfG

Reiner

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.