www.mikrocontroller.net

Forum: Compiler & IDEs ATMEGA162 PortD will nicht!!


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,
ich hexe schon eine Weile herum mit meinem ATMEGA162. Der gibt auf Port
D im Gegensatz zu den anderen nix raus. Mein Programm fängt so an:
int main(void)
{

//Fuse CKDIV8 und JTAGEN aus!!
MCUCR |= (1<<ISC01);    //INT0 falling slope
GICR |=  (1<<INT0);    //INT0 allowed
TIMSK &= ~((1<<OCIE2)|(1<<TOIE2));
  /* Write new values to TCNT2, OCR2, and TCCR2. */
TCNT2 = preload;
TCCR2 |= ((1<<CS20)|(1<<CS21)|(1<<CS22)); //1024 Vorteilung
TIFR |= ((1<<OCF2)|(1<<TOV2));
TIMSK|= (1<<TOIE2);//Timer 2 Overflow Interrupt ein.
DDRA = 0xFF;
DDRB = 0xFF;
DDRC = 0xFF;
DDRD = 0xFB;   //All Ports OUTPUTS except INT0 (Pin12)
PORTD |= ( 1 << PB2 );  //Pullup-resistor on INT0
sei();    //Enable all interrupts

while(1)
{
}
  return (1);
}

Im Timer Interrupt gebe ich auf meinen Ports A-D alle 30ms Werte aus,
aber Port D schweigt immer. WARUM??
JTAG Fuse ist aus. Ich werde aus den möglichen Sonderfunktionen von
Port D (Seite 77 ATMEL Doku) nicht schlau und will die auch gar nicht.
Was ist da eingeschaltet was ich gar nicht will??

Danke für eine kurze Hilfestellung.

Thomas

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch ein kurzer Nachtrag: Im AVR Studio im Simulator ändert sich der
PortD wie erwartet, im richtigen Leben aber nicht. Soweit zu den
Simulationen....

Autor: guenter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kontrolliere mal fuses. vermutlich ist jtag interface active und
blockiert den port

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du herausgefunden was das Problem war?

Würde mich auch mal interessieren.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim,
ja habe ich (zumindest geht es nun...).
Ursprünglich habe ich die Bits der Ports mit XOR Befehlen manipuliert
wie folgt:

PORTC ^=(1<<S3F);

Das hat immer funktioniert, nur nicht auf Port D (dort nur auf Bit1).
Danach habe ich erst für jeden Port eine Variable definiert und diese
mit XOR bearbeitet. Anschließend hab ich das Ergebnis dann auf die
Ports geschrieben (PORTD = Display[3];), so funktioniert es.
Warum verhält sich PortD anders als die anderen Ports?

Mein Problem hat sich also gelöst.

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.