www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega128 Ports schalten?


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wenn ich an meinem ATmega128 die Ports schalten will geht das erst beim
zweiten mal! Was ist da falsch??? Das ist auch schon im Simulator so,
also dürfte es kein HW Problem sein.

z.B.:
DDRC = 0xFF;  -> DDRC bleibt 0x00
DDRC = 0x00;  -> DDRC bleibt 0x00
DDRC = 0xFF;  -> Endlich hat’s der Port gerafft
(oder ich raff es nicht ;)

Das gleiche Problem habe ich auch bei den PORT Registern

Gruß
 Andi

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm, hast du die Portstruktur der AVRs begriffen oder probierst du nur so 
rum?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>hm, hast du die Portstruktur der AVRs begriffen oder probierst du nur so
>rum?

Jein, bis jetzt hatte ich das Problem noch nicht (ATmega8). Prinzipell 
hab ich das schon begriffen (Dachte ich zumindest :)

Komisch ist auch das der Simulator das gleiche macht.
Optimierung hab ich aus un im assabler steht auch die richtigen Befehle.

Autor: Artur Funk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du da machst, hat nichts mit Ports-Schalten zu tun, du schaltest 
somit die Datenrichtung der Ports um. Und es kann gut sein, dass es am 
Simulator liegt. Hast du schon mal probiert die breakpoints eine Zeile 
früher zu setzen?

Autor: Udo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die DDRx Register dienen dazu, um zu bestimmen, ob die PIN's des Ports 
Eingänge oder Ausgänge sind.
Bei als Ausgänge bestimmte PIN's musst du mit PORTx die Zustände 
schalten.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ich Die DDR hingeschrieben habe war nur als Beispiel gedacht.

ich hab da was im Datenblatt gefunden:
When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high 
({DDxn, PORTxn} = 0b11), an intermediate state with either pull-up 
enabled ({DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) 
must occur. ....

Switching between input with pull-up and output low generates the same 
problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) 
or the output high state ({DDxn, PORTxn} = 0b11) as an intermediate 
step.

ich schaue mal ob es damit zusammenhängt, wobei mir das komisch 
erscheint. Da ich ja sowieso nicht in beiden Registern gleichzeitig 
rumfummel kann. Da ist ja klar das ich einen zwischen Zustand bekomme.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte nicht Schlagen....
ich hab das Problem gefunden....
ich sag nur:
if(...)
  // tuwas
PORTA = 0x00;

man sollte halt das if(...) mit auskommentieren, wenn es nicht zutrifft.
ist schon blöd wenn man so doof ist ;)

Vielen Dank an alle
Gruß
  Andi

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.