PORTG ATMega128

Gast #435707
Lesenswert?

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 #435721
Lesenswert?

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 #435727
Lesenswert?

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 #435730
Lesenswert?

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 #435802
Lesenswert?

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 #435890
Lesenswert?

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 #435895
Lesenswert?

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.

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