atmega644p - Welche Pins können als I/O benutzt werden?

#1294996
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?!
Moderator Persönliche Seite #1295053
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. :-/
#1295089
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?
Moderator Persönliche Seite #1295122
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).
#1295183
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.

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