ATMega64 JTAG und alle AD Wandler

Gast #363583
Lesenswert?

Hallo
Ich brauche Hilfe. Ich programmiere meinen ATMega64 über JTAG und
möchte trotzdem alle 8 AD-Wandler nutzen. Ich setze in meiner Software
den JTD Pin richtig und kann auch nachvollziehen, dass mein JTAG
Interface dann nicht mehr geht. Solls ja auch nicht mehr.
Mein AD Wandler ließt aber immer 5V. Was muss ich mit dem OCDEN Fuse
machen? Kann es mit den internen Pull Up Widerständen was zu tun
haben?
Vielen Dank
Thorsten
Moderator Persönliche Seite #363584
Lesenswert?

OCDEN sollte darauf keinen Einfluss haben, da dessen Zustand nur von
Belang ist, solange JTAG aktiviert ist.  Man sollte OCDEN halt nur
abschalten, wenn man's nicht braucht, weil es (durch irgendeinen
Oszillator, der dann ständig läuft) zusätzlichen Stromverbrauch
verursacht.  Die Debugger (AVR Studio, AVaRICE) schalten diese Fuse
sowieso während ihrer Arbeit ein.

Nö, das Problem muss irgendwo in deiner Verdrahtung liegen.  Das JTAG
ICE hast du aber abgezogen, während du messen willst, ja?  Ich weiß
nicht, ob sich das Teil selbst hochohmig schaltet, wärend man es nicht
benutzt.  Beim mkI bin ich mir sogar fast sicher, dass die
Ausgangstreiber stets aktiviert waren.
Gast #363585
Lesenswert?

Vielen Dank für Deine Antwort. JTAG ICE war und ist abgezogen. Ich habe
noch mal etwas weiter geforscht.  Um den AD-Wandler vom JTAG Interface
während des Programmierens zu trennen habe ich einen Jumper eingebaut,
damit ich meine AD Eingangsschaltung (Spannungsteiler) vom Pin trennen
kann. Wenn ich den Jumper offen lasse, dann messe ich 5V an ADC4. wenn
ich ADC0-3 offen lasse, messe ich 0V. Damit kann das nicht an der
Vertrahtung liegen Wenn ich den Jumper schließe und keine Spannung an
den Spannungsteiler anlege, dann messe ich 1,7V. Kann es sein, dass da
noch ein Pull Up Widerstand aktiv ist?
Ich verwende folgende Initialisierung für den Port:

  MCUCSR |= (1<<JTD);
  MCUCSR |= (1<<JTD);

  DDRF = 0x00;
  PORTF = 0x00;
und habe es auch schon ohne die PORTF Initialisierung probiert:

  MCUCSR |= (1<<JTD);
  MCUCSR |= (1<<JTD);
Es führt beides zum oben beschriebenen Ergebnis. In der Dokumentation
des ATMega64 steht unter Alternat Functions of PortF, dass folgende
Flags geseetzt werden:

PUOE = JTAGEN (Das muss bei mit auf 1 bleiben, JTAG stelle ich
angeblich über JTD aus)
PUOV = 1 bei ADC4
Kann es sein, dass diese Flags beim setzen von JTD nicht richtig
gelöscht werden?
Gast #363587
Lesenswert?

Vielen Dank für Deine Hilfe. Ich konnte das Problem nicht grundlegend
lösen. Habe immer noch das Gefühl, dass ein Pull Up existiert. Da ich
nur eine Schwelle mit dem AD-Wandler dedektieren muss, habe ich diese
jetzt angepaßt. Nicht schön, aber reicht.
Besten Dank
Thorsten
Moderator Persönliche Seite #363588
Lesenswert?

Ich hab's nun mal probieren können.  Testprogramm im Anhang,
Testobjekt ein ATmega128 in einem STK501.  Port F beschaltet
mit einer Widerstandskaskade von 9 x 4,7 kOhm, PF0 liegt
oberhalb des ersten 4,7 k Widerstands, PF7 unterhalb des
letzten.

Selbst mit angestöpseltem JTAG ICE sind die Messungen OK.

Hier ein Zyklus:

chan 0: 0.689150 V
chan 1: 1.378299 V
chan 2: 2.072336 V
chan 3: 2.771261 V
chan 4: 3.484848 V
chan 5: 3.973607 V
chan 6: 4.315738 V
chan 7: 4.677419 V
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren