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
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
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?
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
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
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
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.
Am PORTG ist nicht zufaellig ne Schnittstelle, die erst deaktiviert werden muss? Ich hatte aehnliches Problem mitm Mega32 und den Pins vom JTAG.
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?
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
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.
> #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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.