Forum: Mikrocontroller und Digitale Elektronik Xmega256d3 Ports zu langsam?


von Phil (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe leider immernoch Schwierigkeiten mit meinem Display, die aber 
scheinbar von einem unsauberen Pegel verursacht werden.

Deshalb habe ich einen kleinen Test geschrieben:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#define CTRL_PORT PORTA
4
#define WR_PIN 0
5
#define WR_H CTRL_PORT.OUTSET = 1<<WR_PIN; 
6
#define WR_L CTRL_PORT.OUTCLR = 1<<WR_PIN;
7
8
void Clock_init(void)
9
{
10
  OSC.CTRL |= OSC_RC32MEN_bm;
11
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
12
  CCP = CCP_IOREG_gc;
13
  CLK.CTRL = 0x01;
14
}
15
int main(void)
16
{
17
  Clock_init();
18
  _delay_ms(150);
19
  CTRL_PORT.DIR = 0xFF;
20
  while(1)
21
  {
22
    WR_L
23
    _delay_us(1);
24
    WR_H
25
    _delay_ms(1);
26
  }
27
}

F_CPU ist in der GCC Toolchain in AVR Studio 6 auf 32000000 gesetzt.
CPU ist ein ATXMEGA256D3. Dieser wird betrieben auf einem STK600 und 
einem JTAG ICE MKii.


Ich habe nun das Ausgangssignal am PORTA.0 gemessen. Signal siehe 
Anlage.
Zum Zeitpunkt der Messung habe ich außer einem kurzem Stück Kabel nichts 
anderes am besagten Portpin angeschlossen.

Warum ist dies kein sauberes Rechtecksignal?

Gruß
Philipp

von Phil (Gast)


Angehängte Dateien:

Lesenswert?

Hier ein paar mehr Informationen und Messergebnisse:

Vergleich Atmega2560 - Atxmega256d3


Code:
mega
1
#include <avr/io.h>
2
int main (void)
3
{
4
  DDRA= 0xFF;
5
  while(1)
6
  {
7
    PORTA = 0x00;
8
    _delay_us(1);
9
    PORTA = 0x01;
10
    _delay_us(15);
11
  }
12
}


xmega
1
#include <avr/io.h>
2
void Clock_init(void)
3
{
4
  OSC.CTRL |= OSC_RC32MEN_bm;
5
  while(!(OSC.STATUS & OSC_RC32MRDY_bm));
6
  CCP = CCP_IOREG_gc;
7
  CLK.CTRL = 0x01;
8
}
9
int main(void)
10
{
11
  Clock_init();
12
  CTRL_PORT.DIR = 0xFF;
13
  CTRL_PORT.PIN0CTRL = PORT_OPC_TOTEM_gc;
14
  
15
  while(1)
16
  {
17
    PORTA_OUT = 0x00;
18
    _delay_us(1);
19
    PORTA_OUT = 0x01;
20
    _delay_us(15);
21
  }

Praktisch das gleiche oder?
Im Anhang sieht man die Ausgabe. Beide CPUs sind auf das selbe STK600 
gesteckt worden.
Hierfür wird verwendet:
-mitgeliefertes STK600-ATMEGA2560
-STK600-RC064X-14 & STK600-TQFP64

von Stefan (Gast)


Lesenswert?

Mir fehlt der Zusammenhang. Worum geht es überhaupt? Hast Du einen 
Schaltplan und eine Beschreibung, was die Schaltung tut bzw. tun soll?

von Stephan_II (Gast)


Lesenswert?

PORTA_OUT ???

Es muß doch

 PORTA.OUT = 0x00;

geschrieben werden???


Gruß

  stephan

von Timmo H. (masterfx)


Lesenswert?

geht beides

von Gerhard G. (g_g)


Lesenswert?

Hallo,

schaut aus, als wenn keine Spannung am AVCC liegt(PORTA ist ADC)!

AVCC muss bei manchen Boards besonders beschaltet werden.

Miss mal die Spannung.

Gruß G.G.

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.