mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik keine Verbindung zum AVR ATmega48PA übder Dragon


Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!!!

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur 'ne Idee ... setzt Dein Programm PRSPI in PRR?

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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;
}

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Andreas H. (heilinger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann das Problem evtl. auch daher kommen, dass ich unter
Project -> Configuration Options -> Device
nur nen atmega48p, anstatt den von mir benutzten atmega48pa auswählen 
kann?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.