PORTG ATMega128

Gast #435707
Hallo,
ich möchte gerne den PortG an meinem ATMega128 abfragen.
Das scheint aber nicht so recht zu funzen.
Ich habe den Port folgendermaßen initialisiert:

EingangGDDR=0x70;
EingangG = 0x1F;

Wenn ich PG0 & PG1 nun abfragen und beispielsweise den PG0 auf LOW ziehe 
wird PG1 auch als "geschaltet" angezeigt. Ein Kurzschluß zwischen diesen 
Pins besteht aber nicht!
Die Abfrage sieht folgendermaßen aus:

unsigned char  GetPG0_1_aktuell (void)
{
unsigned char tmp_Byte=0;
  if(PinEingangG >= 1) {
    tmp_Byte=PinEingangG;
  }
  else
  {
    tmp_Byte=0;
  }
return (tmp_Byte & 0b00000011);
}

Bei allen anderen Ports funktioniert diese Abfrage. Nur bei dem PortG 
nicht?
Was ist hier denn anders???
CU
Gast
Ich habe die FUSES so gesetzt wie im Anhang der BildschirmPrint von 
PonyProg zeigt...
Bin mir nicht ganz sicher ob das nun gesetzt ist oder nicht. Wenn ich da 
aber den Haken mache läuft selbst meine COM-Schnittstelle nicht mehr...
Cu
Angehängte Dateien:
Gast
Compatibility Mode ist nicht gesetzt (Häkchen bedeutet: Fuse gesetzt / 
programmiert).

> EingangGDDR=0x70;
> EingangG = 0x1F;

Woher hast du denn diese komischen Namen??? Kann es sein, dass die 
zugewiesenen Registeradressen nicht stimmen?
Gast
Die habe ich vorher definiert:

#define EingangG            PORTG
#define PinEingangG         PING
#define EingangGDDR         DDRG


Wie gesagt bei anderen Ports funktioniert es so auch!
Muß also beim PortG nen anderen Grund haben... :-(

Cu
Gast
Ich habe nun festgestellt das jeweils bei den Eingängen PG0 & PG1 sowie 
PG2 & PG3 egal welcher PIN dort auf LOW gezogen wird beide PINS als LOW 
ekannt werden. Aber wie gesagt immer PG0 und PG1 zusammen oder eben PG2 
und PG3!
Sehr komisches Phänomen oder?

Cu
Gast
Wirklich sehr seltsam.
Aber was mir aufgefallen ist: Du lädst das DDR mit 0x70.
Hast Du schon mal 0x10 probiert?

Ich weiß, das sollte eigentlich nichts machen, aber Du hast bestimmt 
auch schon die großen Kotzflecken vor der Apotheke gesehen...

Gruß Johannes
Gast
Ich gehe mal davon aus, dass der Fehler in dem Programmteil liegt, der 
die Funktion "GetPG0_1_aktuell (void)" aufruft (und auf den hier bisher 
nicht näher eingegangen wurde). Möglicherweise wird dort der 
zurückgegebene Wert falsch interpretiert / weiterverarbeitet.
Gast
Scheint so als wenn die Pins keinen konstanten High-Pegel hatten. Ich 
habe den Port nun über einen 10k-Widerstand auf 5V-Pegel gelegt und nun 
funzt es!

Cu
Gast
> #define EingangG            PORTG
> #define PinEingangG         PING
> #define EingangGDDR         DDRG

> EingangGDDR=0x70;
> EingangG = 0x1F;

Vielleicht war ja gerade das das Verwunderliche ;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.