- 12V Akku mit 280 Ah bauen         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: ATMega8 "verfused" Kann man den noch retten

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716

    ATMega8 "verfused" Kann man den noch retten

    Anzeige

    E-Bike
    Guten Morgen,

    ich glaube ich habe einen ATMega8 "kauptt" programmiert. Ich benutzte zum programmieren das STK500. Ich habe einen Quarz in den Sockel des STK eingesetzt und den OSCEL-Jumper auf 2-3 gesetzt. Dann habe ich die Fuses des Atmega auf einen externen Quarz (Medium Frequency) umgestellt. Alles hat funktioniert. Die Geschwindigkeit hat gepasst, da eine RS232-Kommunikation einwandfrei funktioniert hat.

    Dann wollte ich Port B an die LEDs des STK anschließen und habe deshalb den kompletten Port B als Ausgang konfiguriert:

    Code:
    DDRB = 0b11111111;
    PORTB = 0b00000000;
    Nach dem flashen dieses Programmteils konnte ich nicht mehr mit meinem STK500 kommunizieren.Ich bekomme immer eine Fehlermeldung, dass das STK500 nicht angeschlossen ist. Wenn ich den Mega8 aus der Fassung ziehe geht es. Ebeneso wenn ich den OSCEL Jumper ziehe. (Die Kommunikation mit dem STK geht dann, programmieren nicht)

    Ein Blick ins Datenblatt des Mega8 hat dann auch ergeben warum: PB6 und PB7 werden als XTAL-Pins verwendet. Mist!

    Die RS232-Kommunikation läuft jetzt auch nicht mehr sauber.

    Ich vermute das Problem ist, dass die XTAL-Pins durch den Atmel auf 0V gezogen werden und somit der Takt des Atmels und des STK aus dem Ruder gebracht wird.

    Also habe ich den XTAL-Jumper vom STK noch gezogen und OSCEL wieder auf 2-3 gesteckt, damit der Atmel vom Quarz läuft und das STK vom Takt abgetrennt ist. So ist die Kommunikation mit dem STK wieder gelaufen. Ich habe den ISP-Takt auf 1,2kHz gesetzt und die Fuses des Mega8 wieder auf den Internen RC-Oscillator setzen können. Nur leider blockiert er immer noch mein STK. Sobald der Mega8 steckt kann das AVR-Studio nicht mehr mit dem STK kommunizieren, egal wie ich die Jumper XTAL und OSCEL setze, oder sogar ganz weg lasse.

    Aus Verzweiflung habe ich die zwei Pins PB6 und PB7 (XTAL1 und XTAL2) des Mega8 hochgebogen, aber trotzdem blockiert er das STK.

    Hat noch jemand eine Idee?

    Viele Grüße
    Andreas

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.692
    ... ATMega8 "kauptt" programmiert ... (XTAL1 und XTAL2) des Mega8 hochgebogen ...
    Klingt nicht gut. Für eher einfache Fuseprobleme - umgestellt auf externen Takt und keinen Quarz oder Takt zur Hand - habe ich nen Fuseretter (klick). So wie Deine Beschreibung klingt, fürchte ich aber, dass das auch nix hilft.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von Bumbum Beitrag anzeigen
    Aus Verzweiflung habe ich die zwei Pins PB6 und PB7 (XTAL1 und XTAL2) des Mega8 hochgebogen, aber trotzdem blockiert er das STK.
    Aber will man einen Controller mit hin-und-hergebogenen Beinchen wirklich noch retten?
    Grüße
    Thomas

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Also wenn du STK500 hast, dann verwende doch den HV-Programmier-Modus. Da sind doch nur ein paar zusätzliche Kabel zum stecken.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo,

    ich habe den Fehler gefunden: Ich habe mal die Versorgungsspannung überprüft und festegestellt, dass diese von eingestellten 5V am STK auf über 6V steigt, sobald der Atmel8 steckt. Erklären kann ich mir das nicht. Ich habe deshalb den ADC im Verdacht, da ich diesen gleichzeitig mit der Port B Änderung geflasht habe. Also habe ich die PB6 und PB7 Beinchen wieder runtergebogen und die ARef und AVCC Pins dafür hochgebogen und nun läuft wieder alles. Die ARef Ausgabe vom STK habe ich überprüft: 0V. Wenn ich an den hochgebogenen Pins vom Atmel messe, messe ich 2,56V am Ref-Pin und 5V am AVCC Pin. Wo kommen denn die >6V her??

    Hier mal mein Code, der dafür verantwortlich sein könnte:

    Code:
     ADMUX = (1<<REFS1) |(1<<REFS0);
     ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    Kann sich darauf jemand von euch einen Reim machen, welchen Denkfehler ich begangen habe?

    @Thomas E: Da hast du natürlich recht. Aber zum Entwickeln der Software im STK, bei der man den Controller gefühlte 103352x flasht wird er noch ausreichen. In die Endanwendung kann ich ja dann einen neuen spendieren.

    @Hubert.G: Danke für den Hinweis. Ich habe von diesem Modus zwar mal ganz am Anfang in der der Anleitung gelesen, aber das ganze völlig vergessen. Wofür verwendet man denn üblicherweise diesen Modus? Der Verkabelunsaufwand ist ja nicht ohne. Ist das tatsächlich dann dafür da, wenn der Controller "verfused" wurde?

    Viele Grüße
    Andreas

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Ich kann mir nicht ganz vorstellen das der ADC für die 6V verantwortlich sind.
    Bevor ich Beinchen hochbiege würde ich eher den Code löschen.
    HV-Programmierung ist nicht nur für verfusede Kontroller, du kannst den Reset ja auch als I/O verwenden. Dann funktioniert allerdings ISP nicht mehr und du brauchst HV.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    46
    Beiträge
    1.369
    Wenn das STK-Board selbst gelötet ist und nicht über USB sondern über RS232 angesteuert wird, dann würde ich empfehlen nochmal die Schaltung zu checken. Dann könnte diese 6V durchaus an dem MAX232 vorbei zum µC kommen.
    Bauteile auf Lötbrücken-wo keine hingehören-prüfen.

    Wenn ich mir vorstelle ich biege immer die Beinchen der µC weg, um was zu testen....*kopfschüttel* ...wie wäre es denn einfach den Sockel mit den entsprechenden Pins auf ein Breadboard zu verlängern? Ich weiß, ich weiß, dazu muss man ein Braedboard kaufen... blöde Idee von mir

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo Hubert,

    danke für die Erklärung der HV-Programmierung. Das Problem für mich war ja, dass der Controller auf nichts mehr reagiert hat, bzw. das ganze STK lahm gelegt hat sobald er gesteckt war. Ansonsten war nichts weiteres verkabelt. Es war lediglich das 6-polige ISP-Kabel auf dem STK gesteckt. Also war der Controller für mich eh für die Tonne. Da macht dann Beinchen biegen auch nichts mehr, hauptsache man kommt auf die Ursache und kann sie vielleicht das nächste mal vermeiden.

    @HeXPloreR: Das STK500 ist gekauft und funktioniert seit Jahren einwandfrei. Und tut es ohne den komischen Mega8 auch. Ich habe heute damit mehrere verschiedene Schaltungen einwandfrei geflasht.
    Klar hätte ich mir einen "Zwischensockel" bauen können, aber siehe meine Erklärung an Hubert.

    Die Ursache ist für mich aber immer noch unlogisch. Ein "leeres" STK500, das einwandfrei funktioniert. Alle Jumper in der Standard-Stellung bis auf den OSCEL für den Quarz. Nur ein Mega8 im grünen Sockel und das 6-polige ISP-Kabel entsprechend gesteckt. Und dann ca. 20 Zeilen Code zum initialisieren der Ports und Funktionen und dann habe ich plötzlich >6V Versorgungsspannung solange der Atmel steckt. Ich habe den Controller nur "aufgesetzt" und sobald ich ihn anhebe ist die Spannung des STK wieder auf 5V runter gegangen und ich konnte via AVR-Studio damit kommunizieren. Controller wieder aufgesetzt und die Spannung war >6V und das AVR-Studio meldet, dass kein STK angeschlossen ist. Durch hochbiegen von ARef und AVCC am Mega8 ist nun alles wieder in Ordnung und ich kann ohne Probleme flashen.

    Ich versteh's nicht! Und zur Verwirrung hier noch mal der komplette Code:

    Code:
    #define AVRGCC
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <compiler.h>
    
    //F_CPU = 4000000
    
    #define BAUD                    9600l
    #define UBRRValue                (F_CPU / (BAUD * 16) - 1)
    
    void sendMsg (char *Msg, bool addCR)
    {
        while (*Msg != 0)
        {
            while ( !(UCSRA & (1<<UDRE)));
            UDR = *Msg++;
        }
    
        if (addCR)
            sendMsg ("\r\n", FALSE);
    }
    
    int main (void)
    {
        DDRB =  0b11111111;
        PORTB = 0b00000000;
        
        DDRD =  0b00000000;
        PORTD = 0b00000000;
    
        DDRC =  0b00000000;
        PORTC = 0b00000000;
        
        UCSRB = (1<<RXCIE) | (1<<TXEN);
        UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
        UBRRH = (U8)(UBRRValue>>8);
        UBRRL = (U8)UBRRValue;
    
        ADMUX = (1<<REFS1) |(1<<REFS0);
        ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    
        sendMsg ("Start", TRUE);
            
        while (1)
        {
        }
    
        return (0);
    }
    Viele Grüße
    Andreas

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    46
    Beiträge
    1.369
    Zitat Zitat von Bumbum Beitrag anzeigen

    Code:
    #define AVRGCC
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <compiler.h>
    
    //F_CPU = 4000000
    
    #define BAUD                  9600l
    #define UBRRValue                (F_CPU / (BAUD * 16) - 1)
    
    void sendMsg (char *Msg, bool addCR)
    {
        while (*Msg != 0)
        {
            while ( !(UCSRA & (1<<UDRE)));
            UDR = *Msg++;
        }
    
        if (addCR)
            sendMsg ("\r\n", FALSE);
    }
    
    int main (void)
    {
        DDRB =  0b11111111;
        PORTB = 0b00000000;
        
        DDRD =  0b00000000;
        PORTD = 0b00000000;
    
        DDRC =  0b00000000;
        PORTC = 0b00000000;
        
        UCSRB = (1<<RXCIE) | (1<<TXEN);
        UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
        UBRRH = (U8)(UBRRValue>>8);
        UBRRL = (U8)UBRRValue;
    
        ADMUX = (1<<REFS1) |(1<<REFS0);
        ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
    
        sendMsg ("Start", TRUE);
            
        while (1)
        {
        }
    
        return (0);
    }
    Das Format der eingefügten Codes ist echt mies ( Hallo, Admin). Eine 1(bei 9600l ) ist ist es nämlich nicht. Was macht dieses Zeichen dort?

    Und auf wieviel MHz soll der laufen?
    Geändert von HeXPloreR (19.03.2013 um 19:13 Uhr)

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Was findest du denn Mies daran? Das L ist nötig, damit der Compiler die Formel in der nächsten Zeile überhaupt berechnet. Ich glaube es weißt auf einen Long hin. Ohne diesen Buchstaben bringt der Compiler einen Überlauffehler.

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Wie kann man den SRF05 "reparieren"
    Von ippeb im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 15.10.2009, 21:49
  2. Kann man den USB Stick noch retten
    Von pointhi im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 05.08.2009, 02:00
  3. I2C-"Netzwerk" mit ATMega8... noch unklares...
    Von Jaecko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 21.03.2007, 12:36
  4. [ASURO]kann "test.c" weder finden noch öffnen
    Von Jonas Münch im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 02.01.2006, 16:30
  5. Wie kann man "Dicke"Motoren Stuern/Wo ne "Dic
    Von Involut im Forum Motoren
    Antworten: 7
    Letzter Beitrag: 19.07.2004, 15:55

Berechtigungen

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

LiFePO4 Speicher Test