- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 21

Thema: Atmega 8 startet unkontrolliert neu.

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.707
    Zitat Zitat von striker1985 Beitrag anzeigen
    ... der Mikrocontroller startet neu .... Das ganze wirkt sehr zufällig ...
    Ich habe generell in meiner main eine Blinkroutine - nach der Portdefinition und VOR jeglichen anderen Initialisierungen und VOR dem Erlauben von Interrupts. An der spezifischen Frequenz (ca. 0,1 sec) und der Anzahl der Blinkies kann ich eindeutig irgendwelche zufälligen Resets erkennen. Siehe Codebeispiel zwischen den "Ausrufungszeichen". Ich habe auch eine Testroutine die nur fallweise eingeklinkt wird und entsprechende Signalfolgen mit unterschiedlichen Blinkzeichen generiert, je nachdem, welcher Resetvektor gerade angesprungen wurde. Damit finde ich mich bei ähnlichen Fehlersuchen relativ schnell zurecht.
    Code:
    // ============================================================================== =
    // ===  HAUPTProgramm =========================================================== =
    // Initialisierungen, LED1 kurzblinken als Signal für Programmstart,
    //   Ausgabe des Identifizierungsstrings per USART 
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                             
     int main(void)
     {                      //
    // Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //   A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
      DDRB  = 0b00011111;   // siehe aktuell oben oder Fortschritt/R2D2
      PORTB = 0b00100000;   //    und Port/Pull Ups (1)  aktivieren
      DDRC  = 0b01110000;   // PC3 ist ADC3, PC0 .. 6 , kein PC7-Pin bei m168
      PORTC = 0b00000111;   // Beachte für ADC: PC3 ist ADC-Eingang ##>> OHNE Pullup !!
      DDRD  = 0b11110000;   // -> siehe unter DDRB,  sowie PD2,3 extInt
      PORTD = 0b00001111;   //    Pull Ups aktivieren
                            //   Encoder_1 = ExtINT0 = PortD2, Encoder_2 = PortD3
    //  Dadurch Initialisierung der Anschlüsse für miniD0 auf mega328: - - - - - - - -
    //          /RESET,PC6   1 A   A 28   PC5,(SCL), gLED
    //             RxD,PD0   2 EU  A 27   PC4,(SDA), rLED
    //             TxD,PD1___3 EU  E 26___PC3, ADC0=GP2D120
    // SigMot1/ExtINT0,PD2   4 EU EU 25   PC2, SFH 5110, IN irDME 4     Rechts
    // SigMot2/ExtINT1,PD3   5 EU EU 24   PC1, SFH 5110, IN irDME 3     Links
    //   _|-- 3,4 Guz, PD4___6 A  EU 23___PC0, SFH 5110, IN irDME 1-2   Mitte
    //     - - - - - - Belegung Pinne - - - - - - - - -
    //          XTAL1  PB6___9 EU    20___VCC
    //          XTAL2  PB7  10 EU EU 19   PB5, SCK, Taster2
    //  PWM 1,2 uz+Guz,PD5  11 A   A 18   PB4, MISO,  _|-- 3,4  uz, (Taster1)
    //  PWM 3,4 uz+Guz,PD6__12 A   A 17___PB3, MOSI, Reserve 2
    //    _|-- 1,2  uz,PD7  13 A   A 16   PB2, Servo
    //    _|-- 1,2 Guz,PB0  14 A   A 15   PB1, OC1A = SFH 415, OUT (irDME)
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
      for(i=0; i<10; i++)   // LED/PC5 blinkt i-mal ##>> bevor Interrupts erlaubt sind
                            //   um ungewollte Resets u.ä. erkennen zu können
      {                       
        SetBit(PORTC, 5);   // LED auf PC5 schalten EIN, HELL
        waitms(3);          //    ... damit man kurze resets besser erkennt
        ClrBit(PORTC, 5);   // LED auf PC5 schalten AUS, Dunkel
        waitms(97);         //
      }                     // Ende von for(i=0; i<10; i++)
    // ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //      Es folgen Initialisierungsroutinen, z.B.:
      init_USART0(MYUBRR);  //USART0 initialisieren mit wählbarer Baudrate (s.o.)
      XTI_0_1_init();       //Initialisiere den externen Interrupt 0 und 1
                            //
      sei();  //Globalen Interrupt freigeben
                            //
    //      .....
    Ciao sagt der JoeamBerg

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    ich würde darauf tippen, dass die Versorgungsspannung aufgrund der Einschaltströme der Motoren einbricht.
    Auf den Foto mit dem 7805 erkenne ich nur Keramikkondensatoren, da würde ich auf der 12V-Seite noch eine Diode + einen Elko (>100µF) einbauen, damit die Versorgung des Controllers eine gewisse Zeit unterbrechungsfrei ist.
    Grüße,
    Bernhard

    edit: Das hat 021aet04 schon geschrieben
    Geändert von BMS (21.01.2012 um 10:48 Uhr)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    16.02.2010
    Beiträge
    13
    Vielen dank für eure Antworten.
    Ich fange mal von vorne an zu antworten.

    Ohne RS232 Kabel passiert genau das selbe.

    Hannes,
    ich bin Elektrotechnisch nicht vom Fach habe mir das alles durch viel lesen und nachfragen angeeignet.
    Ich habe noch keinen Kondensator in der Reset Leitung. Muss mal schauen ob ich einen Kerko mit dieser Kapazität habe, Folienkondensatoren habe ich auf jeden Fall wären diese auch ok?
    Was meinst du genau mit dem trennen der Motoren und dem MC durch eine Diode? Wie soll sie genau verbaut werden?
    Welche Diode würdest du dazu empfehlen? Ich habe 1N4001, 1N4936 und Z Dioede 5,1V 3,1W da alles andere müsste ich bestellen.

    BMS,
    an dich die selbe Frage bezüglich der Diode, ist eine von den obigen geeignet wenn nicht welche wäre es und wie soll sie genau sperren?
    Ich habe Elkos in > 100µF
    470µF und 1000µF gillt da das Motto viel hilft viel oder lieber eine andere Größe?

    oberallgeier,
    ich habe eine ähnliche Blink LED wie in deinem Vorschlag sie blinkt vor dem eintreten in die Endlosschleife 5x mit 5Hz und während dem normalen Betrieb im 1Hz Takt. Daran habe ich auch den "Neustart" erkannt.

    Ich habe auch ein Oszi zur Verfügung bin aber mit dem Umgang noch nicht so sicher also wenn sich damit etwas besser Analysieren lässt bin ich für anregungen offen.

    Mit freundlichen Grüßen
    Striker1985

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Das du nicht vom Fach bist macht nichts. Wichtig ist nur das Interesse.

    Bei der Diode kannst du jede beliebige Diode nehmen mit Ausnahme von Z-, Zener- oder Spannungsreferenzdioden. Du kannst also eine normale Gleichrichterdiode (z.B. 1N400x Serie wie deine 1N4001) oder eine Schottky Diode (ist aber nicht nötig). Die Diode dient hier nur dazu das sich der Kondensator nicht entlädt.

    Du musst die Motoren direkt vom Akku versorgen. Den µC musst du vom Aku über eine Diode versorgen. Anschließend musst die Versorgung des µC puffern. Das sieht so aus: Batterie => Diode => Kondensator und µC

    Welche Kapazität der Kondensator hat ist nicht so genau. Du kannst für den Versuch den 470µF und/oder 1000µF nehmen.

    Mit dem Oszi kannst du das am Besten im Single Shot Modus anschauen. Ich würde Single Shot Modus mit falling Edge (fallender Flanke) einstellen. Die Spannung würde ich etwas unter die Versorgungsspannung stellen. Sollte die Spannung einbrechen wird automatisch der Single Shot ausgelöst. Du kannst dann schauen ob und wie weit die Spannung einbricht. Bei der Zeit musst du dich herantasten.


    MfG Hannes

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    16.02.2010
    Beiträge
    13
    Hallo Hannes,

    dank deiner Super Anleitung habe ich mich nun endlich mit dem Oszi anfreunden können .
    Das ist leider die einzigste gute Nachricht. Im Anhang mal ein bild direkt nach dem L7805 und eins an der Anschlussklemme der MC Platine.

    Habe den aufbau des L7805 folgendermaßen geändert:

    1N4001 Diode --> 1000µF Elko parallel 470 µF Elko --> L7805 --> 100nF Kerko --> MC und Foxboard.

    Habe den Kondensator vor dem L7805 geändert da ich ausversehen einen 500pF Kerko davorgeschaltet habe anstatt einem 330nF.

    Leider noch genau das selbe Verhalten. Wie auch vorher geht mit Led's als Verbraucher alles super und es sind auch keine Spannungsänderungen zu erkennen. Das Oszi fängt dann erst an wenn ich den Trigger auf ca. 495mV stelle. (Ich nutze einen 1:10 Tastkopf)

    Mit freundlichen Grüßen
    Striker1985
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken amMC.jpg   nach7805.jpg  

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    37
    Beiträge
    5.093
    Hast du im AC oder DC Modus gemessen? Du solltest DC wählen und so einstellen das 0V so weit als möglich am unteren Bildrand und 5V am oberen Bildrand ist. Somit hast du eine sehr gute Auflösung.
    Wenn du den 7805 verwendest würde ich einen Elko vor (am Besten 1000µF) und einen nach dem Spannungsregler (470µF) einbauen. Vielleicht hilft das etwas.

    MfG Hannes

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    16.02.2010
    Beiträge
    13
    Hallo Hannes,

    danke für die schnelle Antwort. Werde es direkt morgen früh umbauen und testen.

    Da ich gerade noch sehe das man die Namen der Bilder nicht sieht. Das mit dem großen Ausschlag ist an der Klemme des MC, das andere am L7805 Ausgang.
    Zu deiner Frage:
    Ich habe im DC Modus gemessen und das Oszi so eingestellt wie du es eben gerade beschrieben hast, habe den Bereich nur etwas nach unten geschoben damit man das volle ausmaß auf den Bildern erkennt.
    Da ich morgen eh noch teile bestellen muss irgendwelche weiteren vorschläge wie man das Problem beseitigen kann? Andere Bauteile oder ähnliches?

    Mit freundlichen Grüßen
    Striker1985

Ähnliche Themen

  1. ATMega 2560 startet gelegentlich neu
    Von chris@franke im Forum AVR Hardwarethemen
    Antworten: 3
    Letzter Beitrag: 16.02.2010, 05:10
  2. ATmega32 startet nicht
    Von Feratu im Forum AVR Hardwarethemen
    Antworten: 10
    Letzter Beitrag: 12.01.2010, 13:23
  3. AVR startet bei Interrupt neu
    Von Jaecko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 25.02.2007, 14:37
  4. Atmel startet nicht!
    Von corny335 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 18.07.2005, 17:49
  5. TU Chemnitz startet Roboterwettbewerb
    Von Frank im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 1
    Letzter Beitrag: 06.06.2005, 13:22

Berechtigungen

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

LiFePO4 Speicher Test