www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega64 PortG merkwürdiges Verhalten


Autor: Schnulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vorbeugen: ATmega103 compatibility mode ist ausgeschaltet!

Mein Problem:
Über einen 40106 Schmitt-Trigger habe ich 5 Tasten entprellt und die 
ST-Ausgänge an Port G4..0 angeschlossen.

Pull-Ups gesetzt:
PG1 und PG4 funktionieren normal. Erkennung funktioniert.
Taster losgelassen: 5V
Taster gedrückt:    0V

PG0, PG2 und PG3 verhalten sich komisch.
Taster losgelassen: 5V
Taster gedrückt:    4,85V

Wenn ich die Pins PG0, PG2 und PG3 direkt auf Masse lege, fliessen 90mA 
Strom aus dem Controller heraus (pro Pin!).

DDRG = 0x00; PORTG = 0xff;

Kennt jemand dieses Phänomen und hat es lösen können? Habe inzwischen 2 
Chips ausprobiert, beide das gleiche Verhalten. Wenn ich die Tasten an 
PORTC anschliesse, ist alles in Ordnung.

Gruß,
Schnulli

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im Datenblatt nach, an welchem Port bei deinem µC-Typ das JTAG 
Interface liegt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du denn die Ports auch als Ports konfiguriert, oder haben sie
Sonderfunktionen?  In den Sonderfunktionen sind das alles Ausgänge...
(TOSC2, ALE, /WR).  Seltsam allerdings, dass PG1 (/RD) davon nicht
betroffen ist, denn der müsste bei aktiviertem XMEM-Interface
ebenfalls im Ruhezustand auf high liegen.

Autor: Schnulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
JTAG ist glaube ich PORTF. Ist aber per Fuse abgeschaltet. PORTF 
funktioniert bei mir normal. Dort benutze ich zwei Pins für ADC und vier 
für Display-Daten.

Autor: Schnulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach Datenblatt könnten eigentlich nur die Bits AS0 in ASSRn und SRE in 
MCURC stören. Diese werden aber mit 0 standardmäßig initialisiert. Auch 
daran kann es demnach nicht liegen.

Wenn ich die Pull-Ups für PORTG abschalte, messe ich 150mV, nach 
Tastendruck wieder 0V. Die Differenz zum Tastendruck beträgt also immer 
150mV. Und auch dann sind es die gleichen Tasten, die funktionieren und 
die gleichen drei, die nicht funktionieren.

Der Schmitt-Trigger hat einen symmetrischen Ausgang, der sollte also 
stark genug sein. Wenn man die Ausgänge des Schmitt-Triggers 
zusammenschaltet, kann man einen schönen Kurzschluß provozieren. Das 
Problem liegt damit wohl eindeutig beim µC. 90mA Ausgangsstrom ist 
eindeutig zu viel.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was gar nicht passt, ist PORTG3.  Der kann als Sonderfunktion höchstens 
Input werden, Output nur durch DDR (Table 46 und Fig. 33 im DS).  Womit 
entweder Hardware oder Messergebnis verdächtig werden.

Autor: Schnulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einen kleinen Schritt bin ich weiter gekommen.

Es reicht scheinbar nicht, nach dem Reset einmal PORTG und DDRG zu 
setzen. Wenn ich vor jeder Tastenabfrage im Timer (25Hz) explizit 
PORTG=0xff und DDRG=0x00 setze, dann kann ich die Tasten alle lesen.

Wenn ich allerdings mit einem Voltmeter die Spannung an den Pins 
kontrollieren möchte, löse ich beim Berühren mit der Meßspitze schon 
einen Tastendruck aus und die Spannung schwankt extrem, ist quasi nicht 
meßbar.
Ich werde nochmal versuchen, das mit einem Oszilloskop zu messen.

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Clemens,

bau doch zum testen mal ein kurzes Testprogramm, das ∗nichts∗ anderes 
macht, als DDR und PORT passend zu setzen. Wenn das funktioniert (also 
die Pins keine Stromquelle mehr sind), dann lass z.B. eine LED blinken 
wenn einer der Pins händisch(!) auf high/low gezogen wurde. Ohne timer, 
ohne Interrupt, einfach nur busy-waiting.

Ich vermute, dass Du irgendwo einen wildgewordenen Zeiger oder etwas 
ähnliches drin hast, der dir den Speicher von PORTG/DDRG regelmäßig mit 
Müll überschreibt.

HTH

Autor: Schnulli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, so was scheint es zu sein.
Ich habe ein kleines Testprogramm geschrieben, bei dem ich einfach alle 
anderen Sourcen rausgeschmissen habe. Jetzt funktioniert erstmal alles. 
Es handelt also tatsächlich um ein Software-Problem.

Danke für Eure Hilfe.

Gruß,
Clemens

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.