-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Atmega48 läuft auf eigener Platine nicht wie er soll!?

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647

    Atmega48 läuft auf eigener Platine nicht wie er soll!?

    Anzeige

    Hi,

    ich habe mir eine eigene Platine in absoluter minimalkonfiguration gefräst. Ich habe nur einen 4,7kOhm Pullup am Resetpin und einen 104 Kondensator an VCC und GND. Auf meinem Steckbrett hat alles super funktioniert. Nur auf meiner Platine läuft der Controller nicht sauber durch.
    Es handelt sich um den selben Controller wie auf dem Steckbrett.

    Ich habe den Eindruck, das der Controller zwischendurch neustartet. Er soll ein RC-Empfängersignal auslesen und wenn es größer als 1,5ms ist die Ledblinken lassen. Aber die Led blinkt nicht immer und wenn sich das Empfängersignal nicht ändert kann es trotzdem sein das er ein paar Sekunden nicht blinkt wie er soll. An der Software habe ich nachdem es auf dem Steckbrett lief nichts mehr geändert. Den µC hab ich auf dem Steckbrett geflasht und dann eingelötet.

    Habt ihr eine Idee woran das liegen kann?

    Danke
    Gruß Daniel
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken 2011-08-02 16.58.20.jpg   2011-07-30 12.27.20.jpg   2011-08-02 16.59.06.jpg   2011-08-02 16.59.26.jpg  
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Ein Schaltplan von der Platine wäre gut......weil so eine Fehleranalyse an hand von Fotos ist doof.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.554
    Zitat Zitat von DanielSan
    ... Ich habe den Eindruck, das der Controller zwischendurch neustartet ... Habt ihr eine Idee woran das liegen kann? ...
    Das Problem mit ungewollten Resets kenne ich. Seit langem verwende ich daher unmittelbar nach der Portdefinition, noch vor dem Erlauben der Interrupts, eine markante Blinkroutine, siehe Code (ALLE programmrelevanten Zeilen aber viel Kommentar/Dokumentation gelöscht)

    HTML-Code:
    // =================================================================================
    // ===  HAUPTProgramm ==============================================================
    // Initialisierungen, LED1 kurzblinken als Signal für Programmstart,
    //   Ausgabe des Identifizierungsstrings per USART 
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     int main(void)
     {        
      uint8_t i;
      DDRB  = 0b00011111;   // siehe aktuell oben ...
      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
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      for(i=0; i<10; i++)   // gLED auf PC5 i-fach blinken lassen 
                            //   ###>>> bevor Interrupts erlaubt sind, um ungewollte
                            //   Resets u.ä. besser 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 main                
    // ================================================================================
    /* ============================================================================== */
    /* ============================================================================== */
    /*### Programm pausieren lassen  !! Der Pausenwert ist nur experimentell !*/ 
    void waitms(uint16_t ms) 
    { 
       for(; ms>0; ms--) 
       { 
          uint16_t __c = 4000; 
          __asm__ volatile ( 
             "1: sbiw %0,1" "\n\t" 
             "brne 1b" 
             : "=w" (__c) 
             : "0" (__c) 
          ); 
       } 
    } 
    /* ============================================================================== */
    // Auszug aus headerdatei:
    
     #define SetBit(ADDR,BIT)       ((ADDR) |= (1<<(BIT)))           // Setzt Bit
     #define ClrBit(ADDR,BIT)       ((ADDR) &= ~(1<<(BIT)))          // Löscht Bit
    Das eindeutig identifizierbare Blinken nach einem Reset/Kaltstart hilft erstmal nix - aber man weiß dann sicher, dass es kam - und manchmal fällt einem etwas Kluges ein, wenn man sieht WANN es kommt . . . .

    Als Grund für ungewollte Resets hatte ich schon falsche Portinitialisierungen, falsche Interruptinitialisierung, mikroskopische Kurzschlüsse etc. Aber ich glaube, das ist noch nicht die Liste aller Möglichkeiten.
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    An sich sollte der Mega48 2 Abblock-kondensatoren bekommen und man sollte auch AVCC anschließen. Ist der Widerstand wirklich nach VCC, nicht nach GND ?. Den Widerstand am Reset Pin könnte man noch eher weglassen als den 2. Kondensator.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Ich könnte mir vorstellen das entweder die Spannung einbricht oder das du Störungen auf der RST Leitung hast. Du könntest einen Elko an parallel zum Abblockkondensator schalten (VCC und GND) bzw einen Abblockkondensator zusätzlich zwischen RST und GND schalten.

    MfG Hannes

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    Hi,

    danke für eure Tips!

    Ich habe jetzt noch zusätzlich einen 100nF von Reset nach GND, einen 100nF von AVCC nach GND, 5V an AVCC und einen 100nF von AREF nach GND gelötet. Leider funktioniert das immer noch nicht.
    Ich habe auch schon eine andere Spannungsversorgung ausprobiert weil ich dachte, das es evtl. daran liegt aber das ändert auch nichts.
    Die resets scheinen so schnell zu kommen, das er es nicht mal bis zum ersten Timer überlauf schafft und der ist jede 1ms.
    Wenn ich die Platine anfasse dann funktioniert es manchmal für 1-2 Sekunden so wie es soll. Aber dann bricht es wieder zusammen.

    Einen Schaltplan habe ich aktuell garnicht. Ich habe die Platine in einem 2D-Cad gezeichnet.

    Ich glaub ich entwickel das nochmal komplett neu und zeige euch dann erst hier den Schaltplan. Ich versteh das zwar nicht, weil ich schon einige deutlich komplexere Projekte umgesetzt habe. Vielleicht ist das zu einfach für mich .

    Oder habt ihr noch eine Idee?

    Edit: @021aet04: Den Elko hab ich noch nicht ausprobiert. Welchen Wert sollte der denn haben?

    Danke
    Gruß Daniel
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Da reichen auch 100nF

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    29
    Beiträge
    4.544
    Das ist eigentlich relativ egal. Die Versorgungsspannung muss nur konstant sein und nicht einbrechen (z.B. beim Schalten eines Relais bzw andere Verbraucher mit hohem Stromverbrauch). Wenn nur der µC auf der Versorgung hängt würden schon ca. 10µF reichen. Je mehr desto besser ist es natürlich. Wenn du Verbraucher mit hohem Stromverbrauch hast könntest du auch den µC mit einer Diode entkoppeln und mit einem Elko den µC puffern (z.B. bei einem Servo). Bei einer Led sollte das aber egal sein.

    Wenn du schreibst das wenn du die Platine berührst die Schaltung länger funktioniert kommt mir die Idee mit den Lötstellen. Kontrolliere einmal die Lötstellen und löte gegebenenfalls nach.
    Du könntest noch kontrollieren ob der Watchdog aktiv ist. Der resettet den µC auch wenn du ihn nicht immer zurücksetzt.

    MfG Hannes

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.09.2004
    Alter
    32
    Beiträge
    647
    Ok hilft alles nix.

    Der einzige Verbraucher ist bis jetzt die Led. Als spannungsversorgung hab ichs mit dem 7805 vom Steckbrett und einem UBEC versucht. Bei beiden das gleiche Ergebniss.

    Ich habe mir überlegt, das ich das ganze nochmal neu mache. Evtl. hab ich ja irgendwo einen Kurzschluss oder der Controller ist beim einlöten gestorben (glaub ich zwar nicht) oder sonst irgend etwas ist schief gelaufen.

    Im Anhang hab ich mal den Schaltplan als PDF eingefügt.
    Int0 und Int1 sind die beiden Pins mit denen ich das Empfängersignal (also 2 Kanäle) einlesen möchte. Wie gesagt auf dem Steckbrett hat alles bestens geklappt.

    Meint ihr das der Schaltplan so ok ist?
    Ich weiss das ginge sicherlich noch schöner, aber ich kenne das Programm (KiCad) noch nicht sooo gut.

    Danke
    Gruß Daniel * der eigentlich schon viel komplexere Sachen durchgezogen hat *
    Angehängte Dateien Angehängte Dateien
    Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Die Schaltung sieht schon OK aus. Du hast nur keinen Programmierstecker vorgesehen, da würde ich einen Sockel verwenden.
    Wenn es auf dem Steckbrett funktioniert hat, dann dürfte doch mit der Hardware etwas nicht stimmen. Vielleicht doch ein Kurzschluss, beim fräsen legt sich schnell mal wo ein Span hinein.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Atmega48 läuft mit 1Mhz statt 8Mhz
    Von DanielSan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 05.03.2011, 15:10
  2. Atmega48 tut nicht so wie ich will
    Von Halodri im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 13
    Letzter Beitrag: 04.12.2010, 11:17
  3. Eigener C Code auf ATTiny13 funktioniert nicht
    Von chaotic im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 26.04.2008, 11:29
  4. [läuft+Code] Servotest an ATtiny13 läuft nicht
    Von oberallgeier im Forum Motoren
    Antworten: 4
    Letzter Beitrag: 18.10.2007, 17:49
  5. Antworten: 3
    Letzter Beitrag: 15.08.2005, 17:41

Berechtigungen

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