mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PORTG ATMega128


Autor: bluesky81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: unsichtbarer WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist die Atmega103-compatibility-Fuse vielleicht (noch) gesetzt?

Autor: bluesky81 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: bluesky81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bluesky81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: SiO2 (Gast)
Datum:

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

Autor: Tommy K. (donnervogel)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: bluesky81 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Johannes A. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> #define EingangG            PORTG
> #define PinEingangG         PING
> #define EingangGDDR         DDRG

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

Vielleicht war ja gerade das das Verwunderliche ;-)

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.