keine Verbindung zum AVR ATmega48PA übder Dragon

OP #1574867
Hallo,

bin neu hier und programmiere auch zum ersten Mal einen Mikrocontroller.
Ich habe nun ein Problem, wofür ich trotz Suche im Internet keine Lösung 
gefunden habe.

Erstmal zu den Werkezugen, die ich benutze:

- AVR Dragon
- ATmega48PA, getaktet über externen 20MHz-Quarz
- AVR Studio 4.18

Ich konnte bisher ohne Problem den Mikrocontroller programmieren. 
Debuggen ging auch über AVR Studio. Irgendwann mal, als ich wieder mal 
in den Debug-Modus gehen wollte, hat er dann an einer Stelle gehakt und 
es kam eine Meldung mit "Wiederholen" oder "Abbrechen". Kann mich nicht 
genau an den Text erinnern, aber ich konnte so oft wiederholen drücken 
wie ich wollte und es ist nix passiert, deswege habe ich das 
abgebrochen. Seitdem kann ich nicht mehr den uC bedienen.

Wenn ich über das AVR-Icon die Fuse-Bits oder LockBits auslesen möchte, 
erscheint die "ISP Mode Error"-Meldung, mit dazugehörigem Text:

Setting device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!

Die Signature kann ich ebenfalls nicht auslesen und "Erase Device" 
funktioniert auch nicht. Die ISP Frequency kann ich aber noch einstellen 
mit der entsprechenden Meldung "Setting ISP frequency SD=0x05 .. OK"

Wenn ich mein Programm aufspielen will erscheint:

Getting ISP frequency parameters.. SD=0x05 .. OKOK
Reading FLASH input file.. OK
Setting device parameters.. OK!
Entering programming mode.. FAILED!
Leaving programming mode.. OK!


Ich habe mir 3 mal den gleichen Mikrocontroller gekauft. Als der erste 
diesen Fehler hatte, habe ich erstmal den nächsten genommen und dort hat 
es direkt beim ersten Versuch geklappt. Doch nach merhmaligem Wechsel in 
den Debug-Modus kam wieder das gleiche Problem. Dann habe ich einen 
dritten genommen und habe nun mit diesem ebenfalls das Problem. Da die 
neuen uC ohne Probleme programmiert werden konnten, gehe ich mal davon 
aus, dass die Verkabelung in Ordnung ist.

Hoffe ich habe das Problem ausreichend erklärt. Bitte nun um Lösungen ;)
Danke!!!
OP
Du meinst im Quellcode?!

Ne, benutze ich nicht. Habs grade mal im Datasheet gesucht. Dabei 
handelt es sich um das "Power Reduction Register". Hab ich nicht 
integriert.

Hier mal der Quellcode (Nicht wundern, wenn was kompliziert programmiert 
ist, bin wie gesagt noch neu...):

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


unsigned int uint_PinC0_56V;
unsigned int uint_PinC1_neg_Aufwaertswandler;
unsigned int volatile uint_ZaehlerPWM;
unsigned int uint_ISRTeiler;
unsigned int uint_PWM_Startzeit_50ms;
unsigned int uint_PWM_Startbit1;
unsigned int uint_PWM_Startbit2;
unsigned int uint_Dummy_Startzeitfreigabe;
unsigned int uint_VentilSchalter;
unsigned int uint_PWM_Ventil;
unsigned int uint_PWM_Ventil_timer;

void Pin_init()
{
  DDRD |= (1 << DDD3) | (1 << DDD5);
  DDRC &= ~((1 << DDC0) | (1 << DDC1)| (1 << DDC2));
}

void configPWM()
{
  TCCR0B = (1 << CS00) | (1 << WGM02);
  TCCR0A = (1 << WGM00) | (1 << WGM01) | (1 << COM0B1);
  TIMSK0 |= (1<<OCIE0A) | (1<<OCIE0B);
}

void enableADC()
{
  unsigned int ADC_dummy;
  ADCSRA = (1<<ADEN) | (1<<ADPS2)| (1<<ADPS1) | (1<<ADPS0);

  ADMUX |= 0;
  ADMUX |= (1<<ADLAR);
  ADMUX |= (1<<REFS0) | (1<<REFS1);


    ADCSRA |= (1<<ADSC);
    while ( ADCSRA & (1<<ADSC) )
    {
       ;
    }
    ADC_dummy = ADCH;
}

unsigned int ReadChannel_extRef (int mux)
{
    unsigned int result;

    ADMUX |= mux;
  ADMUX &= ~(1<<REFS1);

   ADCSRA |= (1<<ADSC);
    while ( ADCSRA & (1<<ADSC) )
    {
      ;
    }
    result = ADCH;

    return result;
}

unsigned int ReadChannel_intRef (int mux)
{
    unsigned int result;

    ADMUX |= mux;
  ADMUX |= (1<<REFS0) | (1<<REFS1);

   ADCSRA |= (1<<ADSC);
    while ( ADCSRA & (1<<ADSC) )
    {
      ;
    }
    result = ADCH;

    return result;
}

ISR(TIMER0_COMPB_vect)
{
  if (uint_ZaehlerPWM > 35)
  {
    if ((uint_PWM_Startbit1 == 1) && (uint_PWM_Startbit2 == 1))
      uint_ISRTeiler++;

    if (uint_ISRTeiler == 1000)
    {
      uint_ZaehlerPWM--;
      uint_ISRTeiler = 0;
    }
  }
}

ISR(TIMER0_COMPA_vect)
{
  if (uint_PWM_Startbit1 == 0)
  {
    if (uint_PWM_Startzeit_50ms < 10000)
      uint_PWM_Startzeit_50ms++;
    else
      uint_PWM_Startbit1 = 1;
  }

  OCR0B = uint_ZaehlerPWM;
}

int main(void)
{
  uint_PWM_Ventil_timer = 0;
  uint_VentilSchalter = 0;
  uint_PinC0_56V = 0;
  uint_PinC1_neg_Aufwaertswandler = 0;
  uint_Dummy_Startzeitfreigabe = 0;
  uint_PWM_Startbit1 = 0;
  uint_PWM_Startbit2 = 0;
  uint_PWM_Startzeit_50ms = 0;
  uint_ISRTeiler = 0;
  uint_ZaehlerPWM = 100;


  OCR0B = 100;
  OCR0A = 100;


  Pin_init();
  configPWM();
  enableADC();
  sei();

  while(1)
  {

    uint_PinC0_56V = ReadChannel_intRef(PC0);
    uint_VentilSchalter = ReadChannel_extRef(PC2);
    if ((uint_PinC0_56V > 190) & (uint_Dummy_Startzeitfreigabe == 0))
    {
      uint_PinC1_neg_Aufwaertswandler = ReadChannel_extRef(PC1);
      if (uint_PinC1_neg_Aufwaertswandler < 220)      //Spannung an C2 > 
4V
      {
        uint_PWM_Startbit2 = 1;
        uint_Dummy_Startzeitfreigabe = 1;
      }
    }


  }
return 0;
}
Dann war meine Vermutung nicht zutreffend.  Wenn Du das genannte Bit 
setzst, wird DebugWire abgeschaltet, was dann zu ähnlichen Effekten wie 
dem geschilderten führt, wenn Du darüber programmierst.  Daher muss ich 
passen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.