Forum: Mikrocontroller und Digitale Elektronik MEGA1284, Port schaltet extrem langsam


von Alex (Gast)


Lesenswert?

Hallo,

ich habe in meinener Schaltung einen MEGA644P gegen einen MEGA1284P 
getauscht. Nun wollte ich mir anschauen, wie schnell ein gewisser 
Codeabschnit durchlaufen wird und dazu einen PORT-Pin togglen. Jetzt 
habe ich festgestellt, das nach zu bzw. abschalten des Pins dieser 
mehrere Sekunden braucht bis er den jeweils anderen logischen Zustand 
angenommen hat. Der Pin ist unbeschalten. Ich bin jetzt einigermaßen 
verwundert. Habe ich da was übersehen, was beim 1284 anders ist als beim 
644? Ach ja: AVR Studio mit GCC
1
DDRA |= (1<<DDA7) | (1<<DDA6) |(1<<DDA5) |(1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1);
2
3
while(1)  PORTA ^= (1<<4);

Hab jetzt erst mal nur versucht zu togglen, ohne Programm Code 
drumherum, gleiches Problem.

Grüße, ALex

von Floh (Gast)


Lesenswert?

Alex schrieb:
> Hab jetzt erst mal nur versucht zu togglen, ohne Programm Code
> drumherum, gleiches Problem.

kompletter Code bitte.
:-)

von Alex (Gast)


Lesenswert?

1
int main (void) {
2
  
3
  DDRA |= (1<<DDA7) | (1<<DDA6) |(1<<DDA5) |(1<<DDA4) | (1<<DDA3) | (1<<DDA2) | (1<<DDA1);
4
  DDRB |= (1<<ADIS_TCS)|(1<<ADIS_CS)|(1<<SELF_TEST)|(1<<RTC_PWR)|(1<<RTC_CS);
5
  DDRC |= (1<<RADIO_PWR) | (1<<BAT_SENS_PWR) | (1<<DDC3) | (1<<DDC2) | (1<<DDC1) | (1<<DDC0);
6
  DDRD |= (1<<LED_GREEN) | (1<<LED_RED) |(1<<DDD5) | (1<<DDD4);
7
  PORTB |= (1<<ADIS_TCS)|(1<<ADIS_CS);  
8
  
9
  while(1)  PORTA ^= (1<<4);
10
}

mit diesem Code teste ich das gerade

von Floh (Gast)


Lesenswert?

Alex schrieb:
> ich habe in meinener Schaltung einen MEGA644P gegen einen MEGA1284P

Im Makefile bzw in den Compilereinstellungen geändert?
Wie stellst du die Geschwindigkeit des Wechselns an PA4 fest? Oszi?

von Alex (Gast)


Lesenswert?

ERgänzung,

ich habe die Hardware 2x da, und bei beiden dasselbe Problem :(

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Wie willst du denn mit der Whileschleife mehrere Sekunden messen? Das 
Toggeln sollte mit halbem Prozessortakt, oder auch weniger, je nach dem 
was C draus macht laufen.

Vermutung: Digitaloszi und falsche Zeitbasis, sodass du  fOszi-fToggle 
dadrauf siehst (also unterabtastung betreibst)?

von Alex (Gast)


Lesenswert?

ja, ich teste das mit dem Oszi,

ich habe nix geändert, außer im AVR Studio als Device den anderen 
Controller eingestellt. Make und so weiter läuft automisch über AVR 
Studio.

Alex

von Alex (Gast)


Lesenswert?

@ Hauke: vorhin habe ich das Port manuel per tasten zu und abgeschaltet 
und man konnte schön sehen, wie die Spannung hoch und runter "gefloatet" 
ist.

von Volker Z. (vza)


Lesenswert?

Hört sich eher nach "nicht angeschlossener Masse" oder "AC-Kopplung" an.

von Karl H. (kbuchegg)


Lesenswert?

OHne jetzt ins Datenblatt gesehen zu haben.
An Port A liegt nicht zufällig der ADC und du hast AVcc nicht 
angeschlossen?

von Pete K. (pete77)


Lesenswert?

Fuses richtig eingestellt?

von Alex (Gast)


Lesenswert?

Problem gelöst, war wirklich 'ne Oszi-Einstellung. Mann sollte die 
Mittelwertbildung ausschalten bei sowas. Das ist mir jetzt peinlich. 
Sorry!
Danke für die vergebliche Mühe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.