Forum: Mikrocontroller und Digitale Elektronik atmega644p - Welche Pins können als I/O benutzt werden?


von E. B. (emme)


Lesenswert?

hallo,
ich arbeite gerade an meinem 4x4x4 Led Cube. Dafür hätte ich gerne 20 
Pins des Atmega. Nach langem hin und her funktioniert alles bis auf 
einen Pin (PC1);
Folgen Pins hab ich aus gelassen: PA4, PA5, PB3, PB4, PC0.

DDRX und PORTX sind deshalt so definiert worden.
//DDXY   76543210
DDRA  = b11001111;
PORTA = b00000000;
DDRB  = b11100111;
PORTB = b00000000;
DDRC  = b11111110;
PORTC = b00000000;
DDRD  = b11100011; //taster auch als eingang...
PORTD = b00000000;

Wenn ich jetzt Testweise alle Leds an schalte, scheint alles zu 
funktionieren.

////////////////////
//Testpattern
///////////////////
PORTA |= b11001111;
PORTB |= b11100111;
PORTC |= b11111110;
PORTD |= b01100011;
_delay_ms(2000);
PORTA = b00000000;
PORTB = b00000000;
PORTC = b00000000;
PORTD = b00000000;

Aber wenn ich jede led hintereinander einzel durch schalte, geht der 
besagt PC1 nicht.
Lustig ist auch dass wenn man beim anschalten der jeweiligen led 
zusätzlich noch andere Pins(also die welche ich eig. aus lasse) durch 
schaltet, dann ein anderer pin (PA3) nicht mehr schaltet. PC1 dann 
jedoch schon!
Ich würde ja mit schieberegistern arbeiten, nur ergeben sich daraus 
wieder erhebliche timing schwierigkeiten beim dimmen der leds. deshalb 
liegt mir bei der led cube größe noch eine lösung ohne schieberigstern 
am herzen.
Kann mir bitte jemand sagen wie man die Register richtig definiert um so 
viele pins wie möglich für I/O funktionen bereit zu stellen?!

von Martin (Gast)


Lesenswert?

schau mal ob die jtag fuses aus sind

von E. B. (emme)


Lesenswert?

ja also das JTAGEN ist auf 1 in der hfuse;
nur SPIEN ist auf 0; (Brauch ich das nicht eig. für das programmieren 
über ISP) da kenn ich mich jetzt leider zu wenig aus;
JTAGEN müsst ich ja einfach aus machen können oder?

von E. B. (emme)


Lesenswert?

ne ich seh grad dass da eine 1 beim JTAGEN für disabled steht.
:-(
also ist se schon aus gewesen. kann ich vl. noch ein paar andere sachen 
aus machen wie zb. OCDEN ?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

OCDEN ist im Auslieferungszustand abgeschaltet.  Selbst, wenn es
aber eingeschaltet wäre: es benötigt zwingend JTAGEN, damit davon
die IO-Ports beeinflusst werden.

von E. B. (emme)


Lesenswert?

OCDEN disablen hilft leider auch nicht weiter.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

p.s.: Ich denke, du hast irgendein Hardware-Problem.  Entweder eine
Zinnbrücke oder sowas, oder aber dein AVR ist kaputt.  Ich hatte
letztens auch einen ATmega88, dessen SDA-Leitung es geschafft hatte,
intern im AVR auf einen Widerstand von ca. 2 Ω zu kommen.  Alles
funktionierte noch, nur beim TWI blieb er beim Warten auf das Ende
der Startbedingung in der Software hängen. :-/

von E. B. (emme)


Lesenswert?

naja das was mich stutzig macht ist dass je nachdem was ich für PORTX 
Und DDRX`s mache, und dann vor dem eig. testprog. noch alle unbenutzen 
ports auf 1 schalte, ein mal der eine pin nicht geht, und ein mal der 
andere nicht.
Also schalten können beide. damit schließe ich ein hardware problem eig. 
aus?!
darf ich eig. auf PORTD ein komplettes byte schreiben, wenn da doch 3 
pins als eingang definiert worden sind?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

E. B. schrieb:
> naja das was mich stutzig macht ist dass je nachdem was ich für PORTX
> Und DDRX`s mache, und dann vor dem eig. testprog. noch alle unbenutzen
> ports auf 1 schalte, ein mal der eine pin nicht geht, und ein mal der
> andere nicht.

Haben die beiden eine Brücke zwischeneinander?

> damit schließe ich ein hardware problem eig.
> aus?!

Vorzeitiger Schluss, bis zum Beweis des Gegenteils.

> darf ich eig. auf PORTD ein komplettes byte schreiben, wenn da doch 3
> pins als eingang definiert worden sind?

Wenn du dabei Bits setzt, die sich auf ein als Eingang geschaltetes
Pin beziehen, schaltest du dort die Pullups ein.

Aber du kannst natürlich immer nur ein komplettes Byte schreiben
(OK, von SBI/CBI abgesehen, aber die machen intern auch nur ein
read-modify-write, nur halt in zwei Takten).

von E. B. (emme)


Lesenswert?

Jörg Wunsch schrieb:
> E. B. schrieb:
>> naja das was mich stutzig macht ist dass je nachdem was ich für PORTX
>> Und DDRX`s mache, und dann vor dem eig. testprog. noch alle unbenutzen
>> ports auf 1 schalte, ein mal der eine pin nicht geht, und ein mal der
>> andere nicht.
>
> Haben die beiden eine Brücke zwischeneinander?
Ne. Da hat bei der realisierung jede säule ihren eigenen pin.

>> damit schließe ich ein hardware problem eig.
>> aus?!
>
> Vorzeitiger Schluss, bis zum Beweis des Gegenteils.
  Ich mess jetzt mal mit dem Oszi nach was der pin genau schaltet...
  vl. kann ich mit nem transistor die 5v schalten.
>> darf ich eig. auf PORTD ein komplettes byte schreiben, wenn da doch 3
>> pins als eingang definiert worden sind?
>
> Wenn du dabei Bits setzt, die sich auf ein als Eingang geschaltetes
> Pin beziehen, schaltest du dort die Pullups ein.
>
> Aber du kannst natürlich immer nur ein komplettes Byte schreiben
> (OK, von SBI/CBI abgesehen, aber die machen intern auch nur ein
> read-modify-write, nur halt in zwei Takten).

hm joa daran liegst wohl auch nicht.

von E. B. (emme)


Lesenswert?

Das oszi liefert kein brauchbares ergebnis; evlt. ein bedienfehler von 
mir oder der tastkopf ist kaputt :-( ich glaub ich kauf doch 
schieberegister
und oder nen coldfire...
bzw. nen neuen mega;
ist das normal dass so viele pins nicht gehen bei den atmels oder hab 
ich die echt schon alle geschossen.?

von Sven K. (Gast)


Lesenswert?

Was für eine LED hängst Du denn an den Controller ?
Vorwiderstand ?

Gruß Sven

von E. B. (emme)


Lesenswert?

the problem has been solved!
war ein software fehler.
ich hatte natürlich bei der fk die die säulen ansteuert ein bit an der 
falschen stelle.
Danke für die Hilfe!

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.