Forum: Mikrocontroller und Digitale Elektronik PORTG ATMega128


von bluesky81 (Gast)


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

von unsichtbarer WM-Rahul (Gast)


Lesenswert?

Ist die Atmega103-compatibility-Fuse vielleicht (noch) gesetzt?

von bluesky81 (Gast)


Angehängte Dateien:

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

von Magnus Müller (Gast)


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?

von bluesky81 (Gast)


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

von bluesky81 (Gast)


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

von Johannes A. (Gast)


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

von Magnus Müller (Gast)


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.

von SiO2 (Gast)


Lesenswert?

Am PORTG ist nicht zufaellig ne Schnittstelle, die erst deaktiviert 
werden muss? Ich hatte aehnliches Problem mitm Mega32 und den Pins vom 
JTAG.

von Tommy K. (donnervogel)


Lesenswert?

unsichtbarer WM-Rahul wrote:
> Ist die Atmega103-compatibility-Fuse vielleicht (noch) gesetzt?

per default ist der an... sicher dass das Fuse nicht mehr gesetzt ist?

von bluesky81 (Gast)


Lesenswert?

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

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Woher sollten sie auch, vielleicht hätte es Sinn gemacht, die internen 
PullUps einzuschalten? Das oben erwähnte merkwürdige Problem war einfach 
Statik - bei CMOS nicht verwunderlich.

von Johannes A. (Gast)


Lesenswert?

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

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

Vielleicht war ja gerade das das Verwunderliche ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.