Ausgaenge bei Reset High, warum?

Gast #1015243
Lesenswert?

Hallo Leute,
also ich habe folgendes Problem:
Ich habe ein kleines Programm fuer den ATMEGA8515 geschrieben.
PORTD dient als Ausgang bei dem die Pins in einer gewissen Sequenz 
High/Low gwschaltet werden. Benutzt wird Timer1 Interrupt. Das 
funktioniert soweit auch gut, aber was mich irritiert ist, dass bei 
einem Reset die Pins fuer etwa eine Sekunde auf High stehen(in der 
Simulation ist das nicht so!). Es sind auch nur die Pins auf High, 
welche ich als Ausgaenge definiert habe, also wenn ich z.B. DDRD auf 
0x0F setze sind nur PD0...PD3 fuer etwa eine Sekunde auf High.
Dieses Verhalten habe ich vorher nicht festgestellt, erst seitdem ich 
den Timer mit 1/64tel des Systemtakts laufen lasse tritt das auf.
Allerdings wird der Timer erst initialisiert nachdem die Ausgaenge 
bereits definiert sind.
Zuerst habe ich vermutet, dass bei einem Reset vielleicht alle Ausgaenge 
auf High gesetzt werden, aber dann muessten ja alle Pins High sein, 
oder?

Wuerde mich freuen, wenn mir jemand dieses Verhalten erlaeutern kann.

Danke vorab und nen schoenen Wochenstart
lulli
Gast #1015323
Lesenswert?

Hallo,
ja so hatte ich das aus dem Datenblatt auch interpretiert.
Habe nun festgestellt, dass meine Bits 'invertiert' angesteuert werden 
muessen. Kann mir ds zwar nicht erklaeren, aber es passiert folgendes:
Hier mein Testprogramm,

#include <stdint.h>
#include <string.h>
#include <avr/io.h>

int main(void) {

    DDRD = 0x3F;         // Port als Ausgang
    PORTD = 0x04;        //PD2 High

   while(1){
    }


    return 0;
}

mein PD3 ist low, der Rest High...
Benutze das STK500 und AVR Studio.
PORTD ist an LEDs angeschlossen und es leuchten LEDS0,1,3,4,5
Irgendwie habe ich nen Wurm fabriziert glaube ich.
Gruss mit Hoffnung auf klaerung;)

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