mikrocontroller.net

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


Autor: E. B. (emme)
Datum:

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

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau mal ob die jtag fuses aus sind

Autor: E. B. (emme)
Datum:

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

Autor: E. B. (emme)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: E. B. (emme)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OCDEN disablen hilft leider auch nicht weiter.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: E. B. (emme)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: E. B. (emme)
Datum:

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

Autor: E. B. (emme)
Datum:

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

Autor: Sven K. (Gast)
Datum:

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

Gruß Sven

Autor: E. B. (emme)
Datum:

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

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.