ATmega64 PortG merkwürdiges Verhalten

Gast #1744535
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
Moderator Persönliche Seite #1744551
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.
Gast #1744582
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.
Gast #1744637
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.
Gast #1744667
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
Gast #1744683
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.