- 3D-Druck Einstieg und Tipps         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 37

Thema: Portzustand kurz nach Start des Microkontrollers

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Anzeige

    Praxistest und DIY Projekte
    Genau. Wenn du nicht verrätst, was genau an den Ports hängt, ist alles andere nur stochern im Nebel...

  2. #12
    Es hängt an den Ports eine sogenannte ULN Schaltung dran... welche mir dann schlussendlich aus den 5V welche beim Port rauskommt 12V macht und dies weiter schickt an meine Relais.

    Hier wären die Artikel:

    ULN2803 - http://www.produktinfo.conrad.com/da...2801_03_04.pdf

    Relais - http://www.produktinfo.conrad.com/da...ais_6V_12A.pdf

    Grüsse Benny

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Dann muss es mit dem Pulldown funktionieren. Eigentlich sogar ohne exteren Widerstand, es sind nämlich schon interne vorhanden.

    Wie sind die Relais angeschlossen? 12V-Quelle->Relais->Ausgangspin des ULN?

    Tritt das Problem nur beim einschalten der Stromversorgung auf, oder auch, wenn du den Controller resettest?

  4. #14
    ja eben, dass mit der pulldown funktion softwaremäßig machen wäre die beste variante.... weißt du wie das funktioniert?

    gruss benny

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Die von mir angesprochenen Widerstände befinden sich im ULN, nicht im AVR. Sie sind dort fest eingebaut und können nicht abgeschaltet werden.

    Die Eingangsstufe des ULN2803 ist so gebaut, dass sein Ausgang abgeschaltet ist, wenn der Eingangspin nicht verbunden oder auf Masse geschaltet ist. Nur wenn am Eingang 5V angelegt werden, wird der Ausgang aktiviert.

    Poste mal dein Programm für den AVR. Die Hardware müsste nämlcih eigentlich stimmen, wenn es im Normalbetrieb funktioniert. Veilleicht machst du ja irgendwas bei der Initialisierung der Ports falsch.

  6. #16
    Das wäre unser Programm:


    #include <avr/io.h>
    #include <avr/signal.h>
    #include <avr/interrupt.h>
    #include <inttypes.h>

    volatile uint16_t timer = 0;

    #define TIMER1_RELOAD 0x85ee
    //#define TIMER1_RELOAD 0xfffe

    int main (void)
    {
    // berlauf alle 500 ms bei 16 MHz
    TCNT1 = TIMER1_RELOAD;

    // Timerberlauf Interrupt aktivieren
    TIMSK = (1<<TOIE1);

    // Prescaler = 256, Timer1 starten
    TCCR1B = (1<<CS12);

    // Interrupts aktivieren
    sei();

    // Port C als Ausgang schalten
    SFIOR=0xff;
    PORTC = 0x00;
    DDRC = 0xff;



    while(1) {


    //PORTC
    if ((timer >= 1) && (timer < 3)) {
    //port 1 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC0);
    }

    if ((timer >= 4) && (timer < 6)) {
    //port 2 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC1);
    }

    if ((timer >= 7) && (timer < 9)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC2);
    }
    if ((timer >= 10) && (timer < 12)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC3);
    }
    if ((timer >= 13) && (timer < 15)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC4);
    }
    if ((timer >= 16) && (timer < 1) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC5);
    }
    if ((timer >= 19) && (timer < 21)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC6);

    }
    if ((timer >= 22) && (timer < 24)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    PORTC |= (1<<PC7);
    }

    //if ((timer >= 25) && (timer < 27)) {
    //port 3 wird geschaltet--> znden
    // der zustand bleibt 500 ms erhalten
    //PORTC |= (1<<PC;
    //}
    if(timer==2 {
    timer=0;
    PORTC=0x00;

    }

    }

    return 0;
    }

    // -----------------------------------------
    // Timerberlauf Interrupt
    SIGNAL(SIG_OVERFLOW1)
    {
    // Timer neu laden
    TCNT1 = TIMER1_RELOAD;

    timer++;
    PORTC=0x00;


    if (timer == 0xffff) {
    // Timer stoppen
    TCCR1B = 0;
    }
    }

  7. #17
    Das SFIOR = 0xff war nur ein Test zum die Pull up Widerstände auszuschalten, leider funktionierte dies nicht.

    Grüsse Benny

  8. #18
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    Das einzige, was mir daran auffällt ist, dass die Befehle
    PORTC = 0x00;
    DDRC = 0xff;
    vertauscht und direkt an den Beginn von main verschoben werden sollten. In der jetzigen Anordnung wird nämlich erst auf Eingang mit Pullup geschaltet, und erst dann auf Ausgang low, wodurch für zwei Taktzyklen 5V am Pin anliegen würden. Aber um ein Relais zu schalten, sollte ein Impuls von 1,25µs normalerweise nicht ausreichen.

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    55
    Beiträge
    781
    Zitat Zitat von uwegw
    Das einzige, was mir daran auffällt ist, dass die Befehle
    PORTC = 0x00;
    DDRC = 0xff;
    vertauscht und direkt an den Beginn von main verschoben werden sollten. In der jetzigen Anordnung wird nämlich erst auf Eingang mit Pullup geschaltet, und erst dann auf Ausgang low, wodurch für zwei Taktzyklen 5V am Pin anliegen würden. Aber um ein Relais zu schalten, sollte ein Impuls von 1,25µs normalerweise nicht ausreichen.
    Wenn PORTC = 0 sind die Pullups meines Wissens aus. Das Datenblatt vom Mega48 stimmt mir zu.

  10. #20
    @dennis dadurch, dass wir die Ports zu beginn als Ausgang initialisieren, werden damit die Pull ups automatisch ausgeschaltet, dass Problem besteht allerdings vor der initialisierung, da die Pull ups eingeschaltet sind und mir kurzzeitig einen High Pegel am Ausgang liefern, und die Endstufen dadurch durchschalten.

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests